Skip to content

C# Scriptの書き方 ​

ゲームの処理はNEMEngine.MonoBehaviourを継承して記述します。ScriptはGameObjectへ追加して初めて実行されます。

コールバック ​

名前主な用途
Awake参照・状態の初期化
OnEnable有効になった時の処理
Start初回のゲーム処理開始
FixedUpdate固定刻みの物理制御
Update入力・通常のゲーム更新
LateUpdate通常更新後の追従など
OnDisable無効になった時の解除
OnDestroy所有者の破棄に伴う解除
OnCollisionEnter / Stay / Exit接触の開始・継続・終了
OnAnimationEventAnimation Eventの受信

コールバックは指定名と引数で認識します。overrideを付けて基底の仮想関数を上書きする方式ではありません。通常は引数なしのvoid、接触はCollision、Animation EventはAnimationEventを引数にします。StartにはIEnumeratorを返す方式もあります。

同じframe内でもScene生成・Component追加・破棄の要求は安全地点で適用されます。呼出し直後に、別ScriptのStartまで完了していると仮定しないでください。

InspectorへFieldを出す ​

publicな保存Field、または[SerializeField]を付けたFieldを使います。Range、Min、Label、Tooltipなどで編集方法を補助できます。

Scene Asset、Prefab、Textureなどは対応型のFieldを用意し、Projectから設定します。参照が未設定・未解決の場合も想定して判定します。

名前変更で旧保存値を引き継ぐ場合は[FormerlySerializedAs("旧名")]を使用します。型や構造を大きく変える場合まで、自動的な互換変換があると考えないでください。

保存・表示・実行順・識別用の属性は、SerializeFieldなどの属性一覧に対象と記述例をまとめています。

GameObjectとComponent ​

gameObjectは所有GameObject、transformはそのTransformです。GetComponent<T>でComponentを取得し、ない場合のnullを処理します。

GameObjectの操作で、Inspectorからの参照設定、生成、検索、親子付け、破棄を確認してください。

NEMEngine.Objectの== nullは、C#参照が残っている破棄済み対象も考慮します。ReferenceEqualsやis nullと同じ判定ではありません。Scene切替後に古い参照を保持する場合は特に注意してください。

Coroutine・Timer・Event ​

Scriptから開始したCoroutineやTimerは所有者の寿命と結び付きます。Scriptが無効、またはGameObjectが非アクティブな間の進行と、Play自体のPauseを区別します。

WaitForSecondsはゲーム時間、WaitForSecondsRealtimeはTimeScaleの影響を受けない時間に使います。Timerには単発・繰り返し・Unscaledがあります。停止するためのHandleを保持してください。

イベント購読は、不要になった時点で解除します。受信中の例外で残りの購読先へ届かない場合があるため、ゲームの状態変更を中途半端に残さないようにします。

例外と再コンパイル ​

ConsoleのGame側で例外を確認します。「パネル → Script Errorで一時停止」が有効な場合、状態を保って安全地点で停止し、Inspectorで実行値を調べます。

「Play中のC#再読み込み」には再コンパイルして継続、Stop後に反映、自動Stopして再コンパイルの選択があります。初めはStop後に反映する方式で確認すると、実行状態とコード変更を区別しやすくなります。

Unityとの関係 ​

基本の名前や操作をUnityに寄せていますが、Unity API一式を持つわけではありません。Shader、Scene、入力、Physics、Coroutineの詳細や対応型はこのマニュアルを正にしてください。

MonoBehaviour · API一覧 · スクリプト実行順

現行版マニュアル · 8ea58ba2 · 2026-10-28確認