本文へスキップ
BecomeCoder

C#実践コース · 第8章 Unity開発 · レッスン46

MonoBehaviourのライフサイクル(Start / Update)

ローカル実施

導入

Unityのスクリプトは、あなたがMainを呼ぶのではなく、Unityが決まったタイミングで自動的にメソッドを呼び出します。この「いつ呼ばれるか」=ライフサイクルを理解することが、Unityプログラミングの第一歩です。

図解

flowchart TB
    A["Awake<br/>生成直後(1回)"] --> S["Start<br/>最初のフレーム前(1回)"]
    S --> U["Update<br/>毎フレーム(何度も)"]
    U --> U
    U --> FU["FixedUpdate<br/>物理演算のタイミング(一定間隔)"]
    style U fill:#e8f5e9

サンプル(Unity C# ― 読み物)

using UnityEngine;

public class LifecycleDemo : MonoBehaviour
{
    void Awake()
    {
        // 生成直後に1回。初期化(参照の取得など)に使う
        Debug.Log("Awake: 生成された");
    }

    void Start()
    {
        // 最初のフレームの直前に1回。他オブジェクト参照後の初期化に使う
        Debug.Log("Start: 開始");
    }

    void Update()
    {
        // 毎フレーム呼ばれる(60FPSなら1秒に約60回)。入力チェックや移動に使う
        // 毎フレーム重い処理を書くとカクつくので注意
    }

    void FixedUpdate()
    {
        // 一定の物理間隔で呼ばれる。Rigidbodyを使う物理処理はここに書く
    }
}
  • Awake / Start1回だけ(初期化用)、Update毎フレーム呼ばれる
  • 入力・移動などの「毎フレームやること」はUpdateに書く
  • 物理(Rigidbody)はFixedUpdateに書く(フレームレートに依存しない一定間隔)
  • どれもUnityが自動で呼ぶ(自分で呼び出さない)

Unityで試す

  • 上のLifecycleDemoを貼り付けて再生し、ConsoleにAwakeStartの順で1回ずつ出ることを確認
  • UpdateDebug.Log("frame")を入れて再生し、猛烈な勢いで出力されることを体感する(確認後は消す)

まとめ

  • Unityがメソッドを自動で呼ぶ(Main不要)
  • Awake/Startは1回、Updateは毎フレーム、FixedUpdateは物理間隔
  • 「毎フレームやること」はUpdate、物理はFixedUpdate

次回: 物を動かす——Transformと入力です。