このキータは、スタジオしまづ様の動画をもとに自分の勉強用にまとめた内容になっています。
もっと詳しく知りたい方は下記の動画を見ていただければよりわかるかと思います
https://www.youtube.com/watch?v=uyi2fRsO6EY
(※不適切な際は指摘いただければと存じます)
Gameobjectを取得する方法
- GameObject.Find
- GameObject.FindWidthTag
- public + エディタを使用
- staticにする
=Find=
//GameManagerAという名前になっているオブジェクトを検索(Findメソッド)してゲームオブジェクト型の変数に格納して取得
//GameManagerA : unity上でsceneに配置したオブジェクトの名前
GameObject gameManagerObj = GameObject.Find("GameManagerA");
//ゲームマネージャー自体に付属しているコンポーネントを取得して変数に格納し、そこからさらになんのオブジェクトなのかを指定する
//.GetComponent<>をすることでそのオブジェクトにくっついているコンポーネントを取得できる
GameManager gameManager = gameManagerObj.GetComponent();
//ゲームオブジェクト型の変数にそのクラス内のメソッドを続けて書くことで、実行しているスクリプト以外のメソッドを実行できる
gameManager.SampleMethod();
=FindWithTag=
ほぼFindの時と同じ
//GameManagerAという名前になっているオブジェクトを検索(Findメソッド)してゲームオブジェクト型の変数に格納して取得
//GameManagerA : unity上でsceneに配置したオブジェクトのタグの名前を取得
GameObject gameManagerObj = GameObject.FindWithTag("GameManager");
//ゲームマネージャー自体に付属しているコンポーネントを取得して変数に格納し、そこからさらになんのオブジェクトなのかを指定する
//.GetComponent<>をすることでそのオブジェクトにくっついているコンポーネントを取得できる
GameManager gameManager = gameManagerObj.GetComponent();
//ゲームオブジェクト型の変数にそのクラス内のメソッドを続けて書くことで、実行しているスクリプト以外のメソッドを実行できる
gameManager.SampleMethod();
※tagから検索する方をUnityとしては推奨をしている
=Public + エディタ=
//まずクラス内でゲームマネージャー型の変数を宣言(メソッドの中に入れないように)
public GameManager gameManager;
//インスペクターにオブジェクトを指定できるようにインプット欄ができるので、そこに指定し、メソッドを実行する
gameManager.SampleMethod();
メリット・デメリット
メリット:何がアタッチされてるかわかりやすい
デメリット:変数名を変更するとその都度設定しなおさないといけない数が多いと面倒
=static化= static:静的
//static化することでどこからでも取得できる
//まずクラス内でpublic staticを追記してゲームマネージャー型の変数を宣言(メソッドの中に入れないように)
public static GameManager instance; //instance:どこからでも参照できる変数
private void Awake()
{
instance = this; //instanceに自分自身を設定する
}
//上記のコードをGameManager.cs内のクラスで書くことでどこからでもこのcsのメソッドにアクセスできるようになる
//PlayerManager側で下記のコードを実行するとGameManager.csのメソッドを実行できる
GameManager.instance.SampleMethod();
デメリット:1つしかないものでしか実行できない (ex.UI, プレイヤーのデータ etc..)