はじめに
今回はあるスクリプトから他のスクリプトの関数や変数にアクセスする方法を紹介します。
私自身これには非常に紆余曲折苦労したことがあったため、記事にまとめることにしました。
#方針
方法はたくさん存在するのですが、私が一番楽だと思った方法を紹介します。
それは GetComponent を活用することです!!!
GetComponentは最強なので知っておいて損はないかと思います。
方針としては、
- アクセスしたいスクリプトを何らかのオブジェクトにつけておく
- スクリプトから「オブジェクト → スクリプト → 関数/変数」の順にアクセスしていく
の2ステップです。
それでは、実際の流れを見ていきましょう。
#流れ
1. オブジェクトを作成(アクセスされる側)
アクセスしたいスクリプトをつけるためのGameObjectを作成します。
これは空のオブジェクトでも、実際に使用するオブジェクトでもなんでも可です。
今回は「Reseaver」と名付けます。ついでに適当に変数と関数を持たせておきましょう。
変数と関数は全てpublicで作成してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Reseaver : MonoBehaviour {
public int number = 1000;
public void ReturnAccess(){
Debug.Log ("アクセス成功!!");
}
}
2. 1.のオブジェクトにアクセスする(アクセスする側)
ここからスクリプトを書きます。
まずは1.で作成したオブジェクトを受け取るための器を作りましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Access : MonoBehaviour {
public GameObject gameobject;
}
public で宣言することでUnity側で操作することが可能になります。
続いて、Unity側から1.で作成したオブジェクトをgameobjectにアタッチしてください。
3.GetComponentを用いてアクセスしてみる
Accessスクリプトを以下のように書き換えます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Access : MonoBehaviour {
public GameObject gameobject;
void Start(){
//Reseaver 内の number という変数を取得する
int num = gameobject.GetComponent<Reseaver> ().number;
Debug.Log (num);
//Reseaver 内の ReturnAccess という関数を使用する
gameobject.GetComponent<Reseaver>().ReturnAccess();
}
}
これでアクセスができたはずです。実行画面を見てみましょう。
コンソール画面に正しく出力されましたね。アクセス成功です。
#最後に
今回はGetComponetを用いることで
- gameobjectにアクセス
- gameobjectのコンポーネントの一つであるスクリプトにアクセス
- スクリプト内の変数/関数にアクセス
の順でアクセスしました。
この方法を選んだ理由は以下の通りです
- とっつきやすい
- 二つの事象に対し一つの方法で対処できる
- 応用がききやすい
めちゃくちゃ使いやすい上に便利なので、是非使ってみてください。