久しぶりに Unity に触ったので、学んだことをメモしておきます。
初期化
Unity でスクリプトを作成すると、プログラム開始時に呼ばれる Start
メソッドと毎フレーム呼ばれる Update
というメソッドがテンプレートでついてきます。これらは予約メソッドなので、この名前で新しくメソッドを作ることはできません。
1. Start メソッド
実行時に1度だけ呼び出されるメソッド。
void Start()
{
}
2. Update メソッド
実行中に、毎フレーム呼び出されるメソッド。ただし、重い処理によってフレームが遅延する可能性があるので必ず同じタイミングとは限らない。
void Update()
{
}
3. Awake メソッド
Start メソッドよりも前に動くメソッド。このスクリプトを無効にしても動く。
private void Awake() { }
4. LateUpdate メソッド
Update の後に毎フレーム呼び出されるメソッド。
private void LastUpdate() { }
5. FixedUpdate メソッド
物理演算によって変更がなされると呼び出されるメソッドで、必ず同じタイミングで呼び出される。
private void FixedUpdate() { }
FixedUpdate と Update の比較
どちらのメソッドも毎フレーム同じタイミングで呼び出されているように見えますが、時間を計ってみるとよく分かります。
void Update() { print("Update : " + Time.deltaTime); } void FixedUpdate() { print("FixedUpdate : " + Time.fixedDeltaTime); }
これで実行してみると、こんな感じです。
分かりやすくログを選択してみました。FixedUpdate
の場合は 0.02 秒ごとに同じタイミングで呼び出されており、Update
の場合は異なるタイミングで呼び出されていることが分かります。また、Update
のほうが早く呼び出されています。
ログ出力
ログ出力には Infomation
, Warning
, Error
があるみたいですね。
void Start() { Debug.Log("Info"); Debug.LogWarning("Warning"); Debug.LogError("Error"); }
ちなみに、print
メソッドも Information と同じ表示になりますが、MonoBehaviour
を継承していないと使用できません。
オブジェクト変更
オブジェクトの状態が変更されると呼び出されるメソッドもあります。
private void OnEnable() { print("OnEnable"); } private void OnDisable() { print("OnDisable"); }
このようにして、インスペクターにあるスクリプトを有効化や無効化したりするとログに上記で書いた文字列が表示されます。
また、オブジェクトに対しての操作も行うことができます。
private void OnMouseDown() { print("OnMouseDown"); } private void OnDestroy() { print("OnMouseDown"); }
OnMouseDown
はオブジェクトをクリックしたとき、OnDestroy
はオブジェクトを削除(または破壊)されたときに呼び出されます。