導入
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/Startは1回だけ(初期化用)、Updateは毎フレーム呼ばれる- 入力・移動などの「毎フレームやること」は
Updateに書く - 物理(Rigidbody)は
FixedUpdateに書く(フレームレートに依存しない一定間隔) - どれもUnityが自動で呼ぶ(自分で呼び出さない)
Unityで試す
- 上の
LifecycleDemoを貼り付けて再生し、ConsoleにAwake→Startの順で1回ずつ出ることを確認 UpdateにDebug.Log("frame")を入れて再生し、猛烈な勢いで出力されることを体感する(確認後は消す)
まとめ
- Unityがメソッドを自動で呼ぶ(Main不要)
Awake/Startは1回、Updateは毎フレーム、FixedUpdateは物理間隔- 「毎フレームやること」は
Update、物理はFixedUpdate
次回: 物を動かす——Transformと入力です。