特定のスクリプトがアタッチされたGameObjectの配列
例えばEnemy.csがアタッチされた敵用のゲームオブジェクトの配列を作りたいときは、
GameObject[]
とすると入れることはできるが、GameObject内在の関数しか呼べない。
Enemy[]
とすれば、自動的に「Enemy.csがアタッチされたGameObjectの配列」と解釈され、
Enemy.cs内の関数を呼ぶことができる。(スクリプトの配列とはみなされない)UI.Text.enabled
これはTextコンポーネント自体のon/offを制御するもので、
このTextがアタッチされたGameObject本体が非表示設定だとTextがenabledされても表示されない。全てのInputを無効化する
フェード中など、ユーザー側の操作を一切受け付けないようにしたい場合、
Unity側では特に関数などは用意されていないので
public static bool canControl;
を宣言して、Input.GetXXXXX()
系の呼び出しの時に確認する。
もしくは、Inputクラスのラッパーを用意して全てそちらに置き換える。オブジェクトの移動は
FixedUpdate()
で
一般的に毎フレーム行う処理はUpdate()
関数に記述するが、
瞬間的に重い処理が発生した場合次のUpdate()
関数が呼ばれるまでに間が開いてしまうことがあり、
キャラクターの移動などをUpdate()
で行うと飛び飛びになってしまうことがある。
その対策として用意されているのがFixedUpdate()
で、これは同じ時間の間隔で実行されることが保障されているため、
通常オブジェクトの移動はFixedUpdate()
で行うとより自然な動きになる。GameObjectを特定のGameObjectの子オブジェクトとして生成する
GameObjectをEnemiesという名前のGameObjectの子オブジェクトとしてゲーム中に動的に生成する場合、以下のようにできる。
GameObject go = Instantiate(A, new Vector3 (0,0,0), Quaternion.identity) as GameObject; go.transform.parent = GameObject.Find("Enemies").transform;
GameObjectの名前を取得
gameObject.name
引数つきでInvoke()を呼びたい場合
Invoke()
は引数なしでしか利用できないので、StartCoroutine()を使用する。
void Start() { StartCoroutine(MyFunction(false, 1f)); } IEnumerator MyFunction(bool status, float delayTime) { yield return new WaitForSeconds(delayTime); // Now do your thing here }
Invoke()
にラムダを渡す
Invoke()
の第1引数は関数名をstringで指定する形式で、1行の処理でも新しく関数を作る必要がある。
以下のブログ記事で対応策が紹介されている。
StartCoroutineでラムダ式を使用できるようにするラッパークラスOnTriggerEnter2D
で衝突したオブジェクトについてるスクリプトの関数を呼ぶ
coll.GetComponent<ScriptName>().SomePublicFunction();
// RigidBody2Dなども同様にGetComponentから取得できる