【Unity メモ】様々なメソッドとログ出力

久しぶりに 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);
}

これで実行してみると、こんな感じです。

f:id:takunology:20210309223433p:plain

分かりやすくログを選択してみました。FixedUpdate の場合は 0.02 秒ごとに同じタイミングで呼び出されており、Update の場合は異なるタイミングで呼び出されていることが分かります。また、Update のほうが早く呼び出されています。

ログ出力

ログ出力には Infomation, Warning, Error があるみたいですね。

void Start()
{
    Debug.Log("Info");
    Debug.LogWarning("Warning");
    Debug.LogError("Error");
}

f:id:takunology:20210309221947p:plain

ちなみに、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 はオブジェクトを削除(または破壊)されたときに呼び出されます。