- 他のオブジェクトにアタッチされているスクリプトのメソッドを実行したい
という悩みを解決します。
結論としてオブジェクトを取得し、スクリプトを取得し、メソッドを実行します。
他のスクリプトファイルのメソッド(関数)を実行する方法
状態
Cube
→CubeController.cs
GameOject
→Access.cs
がアタッチされている状態です。
【メソッド版】CubeController.cs(アクセスされる側)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeController : MonoBehaviour {
public void ReturnAccess()
{
Debug.Log("アクセス成功");
}
}
【ReturnAccess】メソッドを作りました。これにアクセスします。
【メソッド版】Access.cs(アクセスする側)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Access : MonoBehaviour {
GameObject gameobject;
// Use this for initialization
void Start () {
// 任意のオブジェクトを取得する
gameobject = GameObject.Find("Cube");
}
// Update is called once per frame
void Update () {
// 他のスクリプトのReturnAccessメソッドを使用
gameobject.GetComponent<CubeController>().ReturnAccess();
}
}
変数名.GetComponent<スクリプト名>().メソッド名();
こんな感じで他のスクリプトにアクセスすることができます。
こんな感じでもアクセスすることができる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Access : MonoBehaviour
{
GameObject gameobject;
CubeController script;
// Use this for initialization
void Start()
{
// 任意のオブジェクトを取得する
gameobject = GameObject.Find("Cube");
// スクリプトを格納
script = gameobject.GetComponent<CubeController>();
}
// Update is called once per frame
void Update()
{
// メソッド実行
script.ReturnAccess();
}
}
変数名.メソッド名();
他のスクリプトを格納するための変数をつくり、メソッドを実行しています。頻繁にメソッドを実行したい場合はこのようにしたほうが楽です。
補足:ちなみに変数も参照できる
【変数版】CubeController.cs(アクセスされる側)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeController : MonoBehaviour {
public int box = 5;
}
たった一行。
【変数版】Access.cs(アクセスする側)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Access : MonoBehaviour
{
GameObject gameobject;
CubeController script;
// Use this for initialization
void Start()
{
// 任意のオブジェクトを取得する
gameobject = GameObject.Find("Cube");
// スクリプトを格納
script = gameobject.GetComponent<CubeController>();
}
// Update is called once per frame
void Update()
{
int boxcount = script.box;
Debug.Log(boxcount);
}
}
変数名.アクセスしたい変数名
これで変数にアクセスすることができます。
まとめ
- 他のスクリプトのメソッドを実行できる
- オブジェクトを取得→スクリプトを取得→メソッドを実行の流れが楽
以上、他のスクリプトファイルのメソッド(関数)を実行する方法でした。
さぎのみや(@saginomiya8)でした。
コメント