他のスクリプトの変数・メソッドにアクセスする【Unity】

Unityのスクリプトで、ほかのGameObjectのスクリプトの値やメソッドにアクセスするのはどうしたらよいでしょうか?ここではその方法を説明していきます。

[toc]
目次

UnityにおけるGameObjectにアタッチされたスクリプトの扱い

UnityではGameObjectにTransform、Renderer、RigidbodyなどのComponentをアタッチできますが、実はスクリプト自体もComponentの一つなのです。ComponentであるためにはComponentクラスを継承している必要がありますが、スクリプトを作成するときに必ず継承するMonoBehaviourクラスComponentクラスの派生クラスであることからもスクリプトがComponentの一つであることが分かります。例えば、TransformクラスRendererクラスRigidbodyクラスもすべてComponentクラスを継承していることからも、これらのComponentと自分でアタッチしたスクリプトとの扱いが全く同じであることが分かりますね。

ポイント
GameObjectにアタッチされたスクリプトはComponentとして扱われます。

スクリプトから他のGameObjectにアタッチされたスクリプトを取得する

GameObjectにアタッチされたComponentを取得するにはGetComponentメソッドを用いるのでした。例えば、GameObjectにアタッチされたRendererを取得するためには次のようにします。

Renderer renderer = gameObject.GetComponent<Renderer>();

詳細はこちらをご覧ください。

あわせて読みたい
スクリプトからのGameObjectの基本的操作(座標・回転・色の指定)【Unity】 ここでは、Unityスクリプトを用いたGameObjectの基本的な操作方法として、GameObject名の変更や、座標・回転の指定、色の指定方法を説明します。 開発環境 Unity 2019.4...

GameObjectにアタッチされたスクリプトを取得する場合もこれと全く同じになります。例えば、gameObjectにアタッチされたScriptTestを取得する場合は次のようになります。

ScriptTest script = gameObject.GetComponent<ScriptTest>();

ここで取得したスクリプトの変数(testValue)やメソッド(testMethod)はそれぞれ次のようにアクセスできます。

var value1 = script.testValue  //取得したスクリプトの変数の取得
script.testMethod()  //取得したスクリプトのメソッドの実行

なお、ほかのスクリプトからアクセス可能にするためには、変数やメソッドのアクセス修飾子をpublicにしておく必要があるのでご注意ください。

実際にやってみる

Unity上でCubeを作成し、次のスクリプトをアタッチします。この時、ほかのスクリプトからアクセスできるように変数やメソッドはpublicにしておくことがポイントです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeScript : MonoBehaviour
{
    //ほかのスクリプトからアクセス可能な変数
    public string sample_text = "Hello, World!";

    //ほかのスクリプトからアクセス可能なメソッド
    public void Move()
    {
        var position_old = transform.position;
        transform.position = position_old + new Vector3(0.05f, 0, 0);
    }
}

次に、マネージャースクリプトを次のようにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
  
public class Manager : MonoBehaviour
{
 
    CubeScript script;

    void Start()
    {
        script = GameObject.Find("Cube").GetComponent<CubeScript>();
        //CubeScriptの変数にアクセスする
        Debug.Log(script.sample_text);
    }
  
    void Update()
    {
        //CubeScriptのメソッドにアクセスする
        script.Move();
    }
}

12行目で、先ほど作成したCubeを検索して、そこにアタッチされたCubeScriptを取得しています。

なお、マネージャースクリプトについては以下の記事をご覧ください。

あわせて読みたい
ゲーム全体の進行を管理するマネージャークラスを作成する【Unity】 UnityのスクリプトはGameObjectにアタッチすることで初めて有効化されます。それでは、ゲーム全体を管理するためのスクリプトはどこにどのようにして作成すればよいので...

これを実行すると、以下のようにコンソール上にHello, World!が出力されて、Cubeが移動します。

Cube自身にアタッチしたスクリプトのStartメソッドやUpdateメソッドには何も書いてなくて、マネージャースクリプトのStartメソッドやUpdateメソッドから処理が実行されているのがポイントですね。

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

three + eleven =

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次