当サイトを閲覧いただきありがとうございます。
本記事では、Game Creator 2のコア機能と他のツールを組み合わせて「よくあるゲーム機能をどう実現するか」を解説します。
「〇〇をやりたいけど何を使えばいい?」という疑問に答えることを目的とした、実践的なゲーム制作ガイドです。
公式ドキュメント:Game Creator 2 Documentation
GC2 でゲームを作る際の基本的な考え方
「全部 GC2 で作る」必要はない
GC2 はゲーム制作のすべてを担うエンジンではなく、ゲームプレイのロジック層を高速に組むためのツールキットです。
- GC2 が得意なこと:キャラクター制御、カメラワーク、イベント駆動のゲームロジック、セーブ&ロード、オーディオ管理
- GC2 以外に任せること:UIレイアウト、パーティクル、シェーダー、物理マテリアル、地形、NavMeshのベイクなど
- 自作スクリプトの出番:数値計算が複雑なもの(独自の弾道計算など)、リアルタイム通信、プロシージャル生成
「イベント → 条件判定 → 命令実行」がすべての基本
GC2 のゲームロジックは、3つの要素の組み合わせだけで成り立ちます。
Trigger(何が起きたら)→ Conditions(条件を満たしていれば)→ Actions(何をする)
どんなに複雑に見えるゲームでも、個々の挙動は「ドアの前でボタンを押した → 鍵を持っていれば → ドアを開ける」のような小さなイベント駆動の積み重ねです。
「状態」は Variables で管理する
ゲームの進行状態(フラグ、スコア、残弾数、現在のフェーズ等)はすべて Variables に保存します。Variables を中心に設計すれば:
- どこからでも参照できる(Global Variables)
- セーブ&ロードに自動対応する
- Conditions で簡単に分岐できる
小さく作って、つなげる
GC2 の Actions は「1つのことをする命令の列」です。複雑なロジックを1つの巨大な Actions に詰め込むのではなく:
- 小さな Actions を複数作る(ドアを開ける、アイテムを渡す、カメラを切り替える…)
- Trigger でそれらを呼び出す
- Conditions で分岐する
この粒度で作ると、再利用・デバッグ・修正がすべて容易になります。
GC2 の設計思想を理解する3つのキーワード
High-Level Scripting
GC2 の命令は「人間が考える粒度」で設計されています。
| やりたいこと | 通常のUnityスクリプト | GC2 の命令 |
|---|---|---|
| キャラを地点Aに歩かせる | NavMeshAgent.SetDestination + コルーチンで到着待ち + アニメーター制御 | Move To(1命令) |
| カメラを三人称に切り替える | CinemachineのVCam優先度切替 or 手書き | Change To Shot(1命令) |
| BGMをフェードアウトして別の曲に切り替える | AudioSource×2のクロスフェードスクリプト | Fade All Music → Play Music(2命令) |
低レベルの計算は GC2 が内部で処理するので、「何をしたいか」だけを記述すれば動きます。
Property による動的値解決
多くの命令のパラメータは Property(動的な値供給元)として定義されています。例えば「移動先」を指定する際:
- 固定座標(Vector3直打ち)
- Playerの現在位置
- 特定のMarkerの位置
- 変数に保存された座標
- Main Cameraの位置
…をドロップダウンで切り替えられます。「固定値」と「実行時に決まる値」をコードを書かずに切り替えられるのが、GC2で柔軟な設計ができる理由です。
Signals による疎結合
直接参照でも動きますが、Signal(名前付きメッセージのブロードキャスト)を使うと:
- 送信側と受信側が互いの存在を知らなくてよい
- プレハブ化・シーン分割に強い
- 後から受信者を増やせる(
boss-defeatedシグナルを受けて扉が開く、BGMが変わる、UIが更新される…)
大規模になるほど Signal ベースの設計が効いてきます。
「やりたいこと」→「使う機能」逆引きマップ
キャラクターの動き
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| プレイヤーをWASDで動かす | Character(Player Unit → Directional) | 設定するだけ、命令不要 |
| ポイント&クリック移動 | Character(Player Unit → Point & Click) | DriverをNavMesh Agentに |
| NPCを巡回させる | Move To をMarker連鎖 | Triggerを On Start + Restart Instructions でループ |
| NPCをプレイヤーに追従させる | Start Following | Min/Max Distanceを設定可能 |
| 追従を止める | Stop Following | — |
| キャラの移動速度を変える | Change Movement Speed | Duration付きでスムーズ変化 |
| ジャンプ | Jump | Motion UnitでJump Force等を設定 |
| ダッシュ(回避) | Dash | 方向・速度・時間を指定 |
| 瞬間移動 | Teleport | Locationを指定 |
| ラグドール化(吹き飛ばし) | Start Ragdoll | — |
| ラグドールから復帰 | Recover Ragdoll | 起き上がりアニメ自動選択 |
| 死亡(ラグドール+入力停止) | Kill Character | 自動でインタラクト無効化+ラグドール化 |
| 復活 | Revive Character | 自動で起き上がり+制御復帰 |
| 特定アニメーション(一回再生) | Play Gesture | 完了待ち可 |
| 特定アニメーション(ループ) | Enter State | Layerで重ね可 |
| プレイヤー入力を無効化 | Is Controllable をfalseに | カットシーン中などに使用 |
| 足音を地形ごとに変える | Footsteps + Material Sounds | テクスチャ判定で自動切替 |
| 2D横スクロール移動 | Axonometry → Side-Scroll XY | Rotation側も同設定に |
| アイソメトリック移動 | Axonometry → Isometric 8 Directions | — |
カメラ
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| 三人称カメラ | Camera Shot:Third Person | Orbit TargetにPlayer指定 |
| 一人称カメラ | Camera Shot:First Person | Headに追従 |
| 固定カメラ(バイオハザード風) | Camera Shot:Fixed | 複数配置してTriggerで切替 |
| カットシーン中にカメラを移動 | Camera Shot:Follow + Change To Shot | Durationでスムーズ遷移 |
| ロックオンカメラ | Camera Shot:Lock On | 対象を指定するだけ |
| 見下ろしカメラ(ディアブロ風) | Third Person(Pitch固定高め) | Min/Max Pitchを同値に |
| 2D横スクロール風 | Camera Shot:Follow(Z軸固定) | Axonometryと合わせる |
| カメラのShotを切り替え | Change To Shot | Duration指定で遷移演出 |
| 前のShotに戻す | Revert To Previous Shot | スタック式に管理される |
ゲーム進行・イベント
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| ゲーム開始時に何か実行 | Event On Start | シーンロード完了時に1回発火 |
| プレイヤーが領域に入ったら | Event On Trigger Enter | ColliderをIs Triggerに |
| 特定タグのオブジェクトが入ったら | Event On Trigger Enter Tag | Tag指定で絞り込み |
| オブジェクトをクリックしたら | Event On Interact + Hotspot | インタラクションUI自動表示 |
| 一定時間ごとに実行 | Event On Interval | 秒数指定 |
| キー入力で実行 | Event On Input Button | Input Systemアセット指定 |
| 条件付き分岐 | Conditionsコンポーネント | 複数Branchで多分岐も可 |
| Actionsの途中で条件チェック | Check Conditions | falseなら以降をスキップ |
| フラグ管理 | Global Name Variables(Boolean) | Set Bool / Compare Boolean |
| スコア管理 | Global Name Variables(Number) | Increment Number で加算 |
| タイマー(制限時間) | Local Variable + On Interval で毎秒デクリメント | 0になったら Emit Signal で通知 |
| カットシーン | Is Controllable(false) → Shot切替 → キャラ移動 → Is Controllable(true) | — |
| シーン遷移 | Load Scene | Transitions Extensionで演出追加 |
| Signal で通知 | Emit Signal | — |
| Signal を受信して実行 | Event On Receive Signal | ID一致で発火 |
オブジェクトの制御
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| ドアを開ける(回転アニメ) | Change Rotation | Duration + Easingで自然な動き |
| ドアを開ける(Animator) | Set Animator Trigger | Animator Controller側で遷移定義 |
| オブジェクトを出現させる | Set Active(true) or Instantiate | プレハブから生成も可 |
| オブジェクトを消す | Set Active(false) or Destroy | 一時的ならActive、永久ならDestroy |
| オブジェクトを移動させる | Change Position | Duration付きでエレベーター等 |
| オブジェクトの色を変える | Change Material Color | Durationでフェード可 |
| 物理で吹き飛ばす | Add Force 3D / Add Explosion Force 3D | Rigidbody必須 |
| プレハブを生成 | Instantiate | Position/RotationをPropertyで動的指定 |
| オブジェクトプーリング | Pool Prewarm | 事前生成でInstantiate負荷軽減 |
| コライダーの有効化/無効化 | Enable Collider / Disable Collider | — |
| 親子関係を変更 | Set Parent / Clear Parent | — |
| パーティクル再生 | Unity標準ParticleSystem + Set Active or Instantiate | GC2専用命令はないが問題なし |
UI(ユーザーインターフェース)
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| テキスト表示(スコア等) | Change Text | TMP対応 |
| テキストを変数の値で更新 | Change Text のValueにPropertyでVariable指定 | リアルタイム更新は On Interval で |
| HPバー | Slider + Change Slider | Statsモジュールなら自動バインディング |
| メニューの表示/非表示 | Canvas Group Alpha + Canvas Group Interactable | フェードイン/アウト |
| ボタンクリックで処理実行 | ButtonのOnClick → Run Actions | — |
| 画像を差し替える | Change Image | Spriteを動的指定 |
音声・演出
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| BGMを再生する | Play Music | ループ再生、フェード対応 |
| BGMを切り替える | Fade All Music → Play Music | クロスフェード |
| 効果音を鳴らす | Play Sound Effect | 空間音対応、自動ピッチ揺らぎ |
| 環境音(雨、風) | Play Ambient | ループ、複数同時再生可 |
| キャラの声を再生 | Play Speech | 1キャラ1クリップ同時制限 |
| 音量設定(オプション画面) | Change Master Volume 等 + Slider UI | Global Variableに保存可 |
| スローモーション | Time Scale | Layer指定でブレンド可能 |
| 画面フェード | Canvas Group Alpha(黒ImageのCanvas Group) | Duration指定で滑らか |
| ライトの明滅 | Light Intensity / Light Color | Duration付きでスムーズ変化 |
セーブ&ロード
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| ゲームを保存する | Save Game | スロット番号指定 |
| ゲームを読み込む | Load Game / Load Latest Game | — |
| セーブデータを消す | Delete Game | — |
| セーブの存在確認 | Has Save At Slot / Has Save | — |
| オブジェクトの状態を保存対象にする | Remember コンポーネント | 位置・回転・Active状態等 |
| 変数を保存する | Global Variablesは自動保存対象 | LocalもRemember付きGameObjectのものは可 |
| カスタムデータを保存する | IGameSave インターフェース実装(C#) | クラウドセーブ差替も可能 |
| ゲームをリセット | Reset Game | 指定シーンに遷移 |
AI・NPCの挙動(コアのみ)
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| NPCを巡回させる | Move To(Marker指定)×複数 + Restart Instructions | On Start でループ |
| NPCをその場で待機させる | Wait Seconds + Enter State(Idleアニメ) | — |
| NPCに話しかけられるようにする | On Interact + Hotspot | Dialogueモジュールでリッチ会話 |
| プレイヤーを追いかけるNPC | Start Following(TargetにPlayer指定) | Min/Max Distanceで距離感調整 |
| 敵がプレイヤーを見つけたら攻撃 | On Trigger Enter(検知エリア)→ 攻撃Actions | Perceptionモジュールでリアルな索敵 |
| ランダムな行動 | Conditionsで乱数分岐 | Behaviorモジュールで本格AI |
| NPCの注視 | Start Looking At | 目線を向ける |
Behaviorモジュールを入れると:ステートマシン、ビヘイビアツリー、GOAP、Utility AI の4方式が使え、複雑なAIを視覚的に構築できます。
戦闘(コアのみ)
| やりたいこと | 使う機能(コア) | 補足 |
|---|---|---|
| HPを管理する | Global/Local Variable(Number) | Statsモジュールでより体系的に |
| ダメージを与える | Subtract Numbers でHP変数を減算 | — |
| 死亡判定 | Compare Decimal(HP ≤ 0)→ 死亡Actions | — |
| 死亡演出 | Kill Character | 自動でラグドール化+入力無効 |
| 攻撃アニメーション | Play Gesture | 攻撃モーションのクリップ指定 |
| 攻撃判定(近接) | On Trigger Enter(武器のCollider)→ ダメージ処理 | Meleeモジュールで本格化 |
| 攻撃判定(遠距離) | Instantiate(弾プレハブ)+ Rigidbody + Trigger | Shooterモジュールで本格化 |
| 無敵時間 | Set Invincible | Duration指定で自動解除 |
| ノックバック | Dash(後方に短時間)or Add Force 3D | Dashはアニメ付きで制御しやすい |
| ターゲット管理 | Set Target / Cycle Next Target | Lock Onカメラと連携 |
Melee / Shooterモジュールを入れると:コンボシステム、パリィ、Motion Warp、リコイル、弾道計算、照準、武器切替などが専用アセット+UI付きで組めます。
コア機能だけで作るゲームロジックの実践パターン
以下に、GC2コアだけで実装できる33の実践パターンを紹介します。
パターン一覧
| # | パターン名 | カテゴリ |
|---|---|---|
| 4.1 | 鍵付きドアの開閉 | インタラクション |
| 4.2 | 会話(Dialogueモジュールなし) | 演出・UI |
| 4.3 | スコアシステム | ゲーム進行 |
| 4.4 | 移動する足場・エレベーター | ギミック |
| 4.5 | タイマー(制限時間) | ゲーム進行 |
| 4.6 | チェックポイントとリスポーン | ゲーム進行 |
| 4.7 | カットシーン | 演出 |
| 4.8 | Signalによる複数オブジェクトの連動 | 設計パターン |
| 4.9 | Hotspotを使ったインタラクト可能オブジェクト | インタラクション |
| 4.10 | 固定カメラのエリア切替(バイオハザード風) | カメラ |
| 4.11 | NPCの巡回と追跡の切り替え | AI |
| 4.12 | 簡易ダメージシステム | 戦闘 |
| 4.13 | ロックオンカメラと対象切り替え | カメラ・戦闘 |
| 4.14 | セーブ・ロード画面 | セーブ |
| 4.15 | BGMとエリア環境音の管理 | 音声 |
| 4.16 | スローモーション演出 | 演出 |
| 4.17 | プロップ装着と見た目の切り替え | キャラクター |
| 4.18 | Dashを使った回避アクション | 戦闘 |
| 4.19 | Physicsを使ったオブジェクト破壊 | ギミック |
| 4.20 | Overlapを使った範囲検知 | 戦闘・検知 |
| 4.21 | Nested Accessで対象の変数を動的参照 | 設計パターン |
| 4.22 | ワープ/ファストトラベル | 移動 |
| 4.23 | スイッチ&レバーで扉を開く | ギミック・パズル |
| 4.24 | 敵スポーン(ウェーブ制) | 戦闘 |
| 4.25 | 宝箱(ランダム報酬) | インタラクション |
| 4.26 | 押せるブロック(パズル) | ギミック・パズル |
| 4.27 | トラップ(ダメージ床・落石) | ギミック |
| 4.28 | はしご/つたの昇降 | 移動 |
| 4.29 | 水中移動(泳ぎ) | 移動 |
| 4.30 | NPCのスケジュール行動 | AI |
| 4.31 | QTE(クイックタイムイベント) | 演出・入力 |
| 4.32 | コレクティブル(収集要素) | ゲーム進行 |
| 4.33 | パーティ/仲間の追従 | 移動・AI |
4.1 鍵付きドアの開閉
最も基本的な「条件付きインタラクション」のパターンです。
必要なもの:
- Door オブジェクト(Trigger + Hotspot付き)
- Global Variable:
has_key(Boolean、初期値false) - 鍵オブジェクト(拾うと
has_keyをtrueにする)
Doorの Trigger設定:
Event: On Interact
→ Conditions:
Branch 1: [Compare Boolean: has_key == true]
→ Change Rotation (ドアを90度回転、Duration: 0.8, Easing: EaseInOut)
→ Play Sound Effect (ドア開閉SE)
Branch 2: [Always True (else相当)]
→ Play Sound Effect (施錠SE)
→ Change Text ("鍵がかかっている")
鍵オブジェクトの Trigger設定:
Event: On Interact
→ Set Bool (has_key = true)
→ Play Sound Effect (取得SE)
→ Set Active (鍵オブジェクト = false)
→ Change Text ("鍵を手に入れた")
4.2 会話(Dialogueモジュールなし)
簡易的なテキスト表示なら、コアだけで対応できます。
構成:
- Canvas上にText(TMP)+ 背景Imageを持つパネル(Canvas Group付き)
- NPCにTrigger(
On Interact)+ Hotspot
NPCの Trigger設定:
Event: On Interact
→ Is Controllable (Player, false)
→ Canvas Group Alpha (会話パネル = 1, Duration: 0.3)
→ Change Text ("こんにちは、旅人さん。")
→ Wait Seconds (2)
→ Change Text ("この先の洞窟には気をつけてね。")
→ Wait Seconds (2)
→ Canvas Group Alpha (会話パネル = 0, Duration: 0.3)
→ Is Controllable (Player, true)
Dialogueモジュールを入れると:選択肢付き分岐会話、話者アイコン、テキスト送り(クリック待ち)、条件分岐ノードなどが標準UIスキン付きで使えます。
4.3 スコアシステム
構成:
- Global Variable:
score(Number、初期値0) - Canvas上のText(TMP)にスコア表示
得点オブジェクトの Trigger設定:
Event: On Trigger Enter Tag (Tag: "Player")
→ Increment Number (score, +100)
→ Change Text (スコアText の Value を score Variable の Property に)
→ Play Sound Effect (得点SE)
→ Destroy (このオブジェクト)
4.4 移動する足場・エレベーター
Trigger設定:
Event: On Start
→ Change Position (上の位置, Duration: 3, Easing: EaseInOut)
→ Wait Seconds (2)
→ Change Position (下の位置, Duration: 3, Easing: EaseInOut)
→ Wait Seconds (2)
→ Restart Instructions
注意:GC2のCharacterは独自のCharacterController/NavMeshAgent/Rigidbodyで制御されるため、Unityの Set Parent で足場の子にしてもキャラが追従しない場合があります。対策として、足場が動く間 Move Direction でキャラに同じ移動ベクトルを与えるか、足場側をRigidbody(Is Kinematic)にしてCharacterのDriverをRigidbodyに変更する方法があります。
4.5 タイマー(制限時間)
構成:
- Global Variable:
time_left(Number、初期値60) - Trigger:
On Interval(1秒)でデクリメント
Trigger設定:
Event: On Interval (1秒)
→ Increment Number (time_left, -1)
→ Change Text (タイマーUI の Value を time_left Variable の Property に)
→ Check Conditions: [Compare Decimal: time_left <= 0]
→ Emit Signal ("game-over")
ゲームオーバー受信側:
Trigger Event: On Receive Signal ("game-over")
→ Is Controllable (Player, false)
→ Canvas Group Alpha (ゲームオーバー画面 = 1)
→ Time Scale (0)
4.6 チェックポイントとリスポーン
チェックポイントの Trigger設定:
Event: On Trigger Enter Tag (Tag: "Player")
→ Set Point (checkpoint_position = このオブジェクトの Position Property)
→ Play Sound Effect (チェックポイントSE)
リスポーン(死亡Signal受信):
Trigger Event: On Receive Signal ("player-died")
→ Revive Character (Player)
→ Teleport (Player, Location = checkpoint_position の Variable Property)
4.7 カットシーン(カメラ演出+キャラ移動)
Trigger設定:
Event: On Trigger Enter Tag (Tag: "Player")
→ Is Controllable (Player, false)
→ Change To Shot (アングルA, Duration: 1.5)
→ Move To (NPC → Marker_NPC_Position)
→ Wait Seconds (1)
→ Change To Shot (アングルB, Duration: 1.0)
→ Play Gesture (NPC, 手を振るアニメ)
→ Wait Seconds (1.5)
→ Change To Shot (アングルC, Duration: 0.8)
→ Change Text ("ここから先は危険だ。")
→ Wait Seconds (2)
→ Canvas Group Alpha (会話パネル = 0, Duration: 0.3)
→ Revert To Previous Shot (Duration: 1.0)
→ Is Controllable (Player, true)
ポイント:
Change To ShotのDurationを0以上にするとスムーズにブレンド遷移するRevert To Previous Shotでカットシーン前のShotに戻せる(Shotはスタック管理)Move Toは到着まで次のInstructionを待つ(Wait to Completeがデフォルト ON)
4.8 Signalによる複数オブジェクトの連動
1つのイベントで複数の独立したオブジェクトに通知するパターンです。
状況: ボスを倒したら、扉が開く + BGMが変わる + UIが更新される
ボスの死亡判定:
→ Subtract Numbers (boss_hp, ダメージ量)
→ Check Conditions: [Compare Decimal: boss_hp <= 0]
→ Kill Character (Boss)
→ Emit Signal ("boss-defeated")
扉オブジェクト(受信側1):
Trigger Event: On Receive Signal ("boss-defeated")
→ Change Rotation (扉, 90度, Duration: 1.5)
→ Play Sound Effect (重い扉が開くSE)
BGM管理オブジェクト(受信側2):
Trigger Event: On Receive Signal ("boss-defeated")
→ Fade All Music (Duration: 2.0)
→ Wait Seconds (1.0)
→ Play Music (勝利BGM, Transition In: 1.0)
ボス側は Emit Signal を1回呼ぶだけです。受信側が何個あっても変更不要で、各受信側はプレハブ化して再利用可能です。
4.9 Hotspotを使ったインタラクト可能オブジェクト
GameObject: Chest
- Collider (Is Trigger = true)
- Hotspot コンポーネント:
Target: Player
Mode: On Interaction Focus
Spots:
- Characters > Look At ← プレイヤーが箱に目を向ける
- UI > Show Floating Text ("開ける") ← 頭上にテキスト表示
- Materials > Change Material (ハイライトマテリアル) ← 光る演出
- Trigger コンポーネント:
Event: On Interact
→ Set Bool (chest_opened = true)
→ Set Animator Trigger (Chest の Animator, "Open")
→ Play Sound Effect (箱を開けるSE)
→ Emit Signal ("chest-01-opened")
4.10 固定カメラのエリア切替(バイオハザード風)
各部屋にCamera Shot(Fixed Position)を1つずつ配置し、部屋の境界にTrigger Colliderを配置します。
Event: On Trigger Enter Tag (Tag: "Player")
→ Change To Shot (Shot_RoomB, Duration: 0.5)
- Duration: 0 にすると即座に切り替わり、クラシックなホラーゲーム風に
- Duration: 0.3〜1.0 にするとシネマティックなスムーズ遷移に
4.11 NPCの巡回と追跡の切り替え
コアのみで「巡回→発見→追跡→見失い→巡回に戻る」を実現するパターンです。
巡回Actions:
Trigger Event: On Start
→ Move To (Marker_A)
→ Wait Seconds (2)
→ Move To (Marker_B)
→ Wait Seconds (2)
→ Move To (Marker_C)
→ Wait Seconds (2)
→ Restart Instructions
発見Trigger(検知エリア):
Event: On Trigger Enter Tag (Tag: "Player")
→ Set Bool (is_chasing = true)
→ Start Following (NPC, Target: Player, Min: 1.5, Max: 2.0)
→ Enter State (NPC, 走りアニメ State, Layer: 5)
見失いTrigger(検知エリアから出た):
Event: On Trigger Exit Tag (Tag: "Player")
→ Set Bool (is_chasing = false)
→ Stop Following (NPC)
→ Stop State (NPC, Layer: 5, Transition: 0.3)
→ Run Actions (巡回Actionsを再実行)
限界:この方法は状態が2つ(巡回/追跡)なら管理できますが、3つ以上になるとTriggerとVariableの数が爆発します。複雑なAIにはBehaviorモジュールを推奨します。
4.12 簡易ダメージシステム
プレイヤーの攻撃Trigger(入力受付):
Trigger Event: On Input Button (Attack ボタン)
→ Check Conditions: [Is Available: Player]
→ Play Gesture (Player, 攻撃アニメ, Wait to Complete: false)
→ Wait Seconds (0.2) ← アニメの振り始めまで待つ
→ Enable Collider (武器 Collider)
→ Wait Seconds (0.3) ← 攻撃判定の持続時間
→ Disable Collider (武器 Collider)
敵側のダメージ受信Trigger:
Event: On Trigger Enter Tag (Tag: "PlayerWeapon")
→ Check Conditions: [Is Invincible: Enemy == false]
→ Subtract Numbers (enemy_hp, 25)
→ Set Invincible (Enemy, Duration: 0.5) ← 連続ヒット防止
→ Play Gesture (Enemy, 被弾アニメ)
→ Play Sound Effect (ヒットSE)
→ Check Conditions: [Compare Decimal: enemy_hp <= 0]
→ Kill Character (Enemy)
→ Emit Signal ("enemy-defeated")
4.13 ロックオンカメラと対象切り替え
敵が範囲内に入ったら候補追加:
Event: On Trigger Enter Tag (Tag: "Enemy")
→ Add Target Candidate (Player, Target: 入ってきた敵)
ロックオンON:
Trigger Event: On Input Button (LockOn ボタン)
→ Cycle Closest Target (Player)
→ Change To Shot (Shot_LockOn, Duration: 0.3)
ターゲット切替:
Trigger Event: On Input Button (CycleTarget ボタン)
→ Cycle Next Target (Player)
4.14 セーブ・ロード画面
セーブボタン押下:
→ Save Game (Slot = current_slot の Variable Property)
→ Play UI Sound (セーブ完了SE)
→ Change Text (メッセージ, "セーブしました")
ロードボタン押下:
→ Conditions:
Branch 1: [Has Save At Slot: current_slot]
→ Load Game (Slot = current_slot の Variable Property)
Branch 2: [Always True]
→ Play UI Sound (エラーSE)
→ Change Text (メッセージ, "データがありません")
4.15 BGMとエリア環境音の管理
洞窟エリアに入った時:
Event: On Trigger Enter Tag (Tag: "Player")
→ Fade All Music (Duration: 1.5)
→ Fade All Ambient (Duration: 1.5)
→ Wait Seconds (0.5)
→ Play Music (洞窟BGM, Transition In: 2.0)
→ Play Ambient (水滴の音, Spatial Blending: 0.8, Target: 水源の位置)
→ Play Ambient (コウモリの鳴き声, Spatial Blending: 0.5)
- Musicチャンネルはループ再生。
Fade All Musicで現在のBGMを止めてから新しい曲を再生 - Ambientチャンネルもループ再生。複数同時再生可能(風 + 虫の声 + 川の音など)
Spatial Blendingを0〜1で設定。0 = 2D(どこでも同じ音量)、1 = 3D(距離減衰あり)
4.16 スローモーション演出
必殺技ヒット時の演出:
→ Time Scale (0.2, Blend Time: 0.1, Layer: 1) ← 全体を0.2倍速に
→ Shake Camera Burst (Duration: 0.3, Magnitude: 0.5, Roughness: 10)
→ Wait Seconds (0.5, Mode: Unscaled Time) ← リアルタイムで0.5秒待つ
→ Time Scale (1.0, Blend Time: 0.3, Layer: 1) ← 通常速度に戻す
Wait SecondsのModeをUnscaled Timeにすると、TimeScaleに影響されずリアルタイムで待機- Characterの
Update TimeをUnscaled Timeにしたキャラはスロー中も通常速度で動きます
4.17 プロップ装着と見た目の切り替え
武器を拾って装備する:
Event: On Interact (武器オブジェクト)
→ Set Active (地面に落ちている武器モデル = false)
→ Attach Prop (Player, Type: Instance, Prop: 武器Prefab, Bone: RightHand)
→ Set Bool (has_weapon = true)
→ Play Sound Effect (装備SE)
→ Enter State (Player, 武器を持ったLocomotion State, Layer: 3)
Attach PropはBone(装着先ボーン)を指定し、Position/Rotationでオフセットを調整Remove Prop/Drop Prop(落とす)で外せます。Drop Propは物理で落下します
4.18 Dashを使った回避アクション
Trigger Event: On Input Button (Dodge ボタン)
→ Conditions:
Branch 1: [Compare Boolean: can_dodge == true] AND [Is Grounded: Player]
→ Set Bool (can_dodge = false)
→ Set Invincible (Player, Duration: 0.4)
→ Dash (Player, Direction: 入力方向, Velocity: 8, Duration: 0.4)
→ Wait Seconds (0.8) ← クールダウン
→ Set Bool (can_dodge = true)
Dashは方向・速度・持続時間を指定してキャラを高速移動させる専用InstructionSet Invincibleと組み合わせて回避中の無敵フレームを実現- Boolean変数でクールダウンを管理し、連続回避を防止
4.19 Physicsを使ったオブジェクト破壊
Event: On Interact (爆弾を使う)
→ Set Active (壊れるオブジェクト = false)
→ Instantiate (破片 Prefab, Position: オブジェクトの位置)
→ Add Explosion Force 3D (破片の各Rigidbody,
Origin: 爆発中心, Radius: 5, Force: 500, Force Mode: Impulse)
→ Play Sound Effect (爆発SE)
→ Shake Camera Burst (Duration: 0.3, Magnitude: 0.8, Roughness: 15)
→ Emit Signal ("wall-destroyed")
4.20 Overlapを使った範囲検知
→ Overlap Sphere 3D (Center: Player の位置, Radius: 5,
Store In: nearby_enemies (Local List Variable), Layer Mask: Enemy レイヤー)
→ Conditions:
Branch 1: [List Is Empty: nearby_enemies == false]
→ [nearby_enemies の各要素にダメージ処理を実行]
→ Play Sound Effect (範囲攻撃SE)
Branch 2: [Always True]
→ Play Sound Effect (空振りSE)
Overlap Sphere 3D/Overlap Box 3Dでコライダーを持つオブジェクトを検索- 結果はList Variableに格納される(Layer Maskでフィルタ可能)
4.21 Nested Accessで対象の変数を動的参照
Variablesの Nested Access(スラッシュ区切りの入れ子参照)を使い、「現在のターゲットのHP」のように動的な対象の値を参照するパターンです。
ダメージ処理:
→ Increment Number (current_target/hp, -25)
↑ 「current_target が指す GameObject の Local Variable "hp"」を -25 する
→ Check Conditions: [Compare Decimal: current_target/hp <= 0]
→ Kill Character (current_target の Character)
ターゲットが変わっても参照パスを書き換える必要がありません(Variableの値が変わるだけ)。
4.22 ワープ/ファストトラベル
同一シーン内のワープ実行:
→ Canvas Group Interactable (ワープ選択UI = false)
→ Play Sound Effect (ワープ開始SE)
→ Canvas Group Alpha (白幕 = 1, Duration: 0.4)
→ Teleport (Player, Location = ワープ先 Marker の Position)
→ Change To Shot (ワープ先エリアの Camera Shot, Duration: 0)
→ Wait Seconds (0.2)
→ Canvas Group Alpha (白幕 = 0, Duration: 0.5)
→ Play Sound Effect (ワープ到着SE)
→ Is Controllable (Player, true)
別シーンへのワープ:
→ Canvas Group Alpha (黒幕 = 1, Duration: 0.5)
→ Save Game (slot: 0)
→ Set Point (spawn_position = ワープ先の座標)
→ Load Scene ("TargetScene")
白幕/黒幕のフェードで瞬間移動の「飛び」を隠すのがポイントです。
4.23 スイッチ&レバーで扉を開く
スイッチのTrigger設定(各スイッチ共通):
Event: On Interact
→ Conditions:
Branch 1: [Compare Boolean: this_switch_activated == false]
→ Set Bool (this_switch_activated = true)
→ Set Animator Trigger (スイッチ Animator, "Activate")
→ Play Sound Effect (スイッチSE)
→ Increment Number (switch_count, +1)
→ Check Conditions: [Compare Decimal: switch_count >= 3]
→ Emit Signal ("all-switches-on")
扉の受信側:
Trigger Event: On Receive Signal ("all-switches-on")
→ Play Sound Effect (重い扉SE)
→ Change Position (扉, 上方向に移動, Duration: 2.0, Easing: EaseInOut)
4.24 敵スポーン(ウェーブ制)
ウェーブ開始Trigger:
Trigger Event: On Receive Signal ("start-wave")
→ Increment Number (current_wave, +1)
→ Check Conditions:
Branch 1: [Compare Decimal: current_wave == 1]
→ Set Number (enemies_alive = 3)
→ Instantiate (敵A Prefab × 3)
Branch 2: [Compare Decimal: current_wave == 2]
→ Set Number (enemies_alive = 5)
→ Instantiate (敵A × 2 + 敵B × 3)
Branch 3: [Compare Decimal: current_wave == 3]
→ Set Number (enemies_alive = 1)
→ Instantiate (ボス Prefab)
全滅チェック(Signal受信):
Trigger Event: On Receive Signal ("enemy-killed")
→ Check Conditions: [Compare Decimal: enemies_alive <= 0]
→ Wait Seconds (2)
→ Emit Signal ("start-wave") ← 次ウェーブ開始
4.25 宝箱(ランダム報酬)
Event: On Interact
→ Set Number (random_roll, From: Random Property [Min: 1, Max: 100])
→ Conditions:
Branch 1: [Compare Decimal: random_roll <= 10] ← 10%: レア
→ Change Text (通知, "伝説の剣を手に入れた!")
Branch 2: [Compare Decimal: random_roll <= 40] ← 30%: アンコモン
→ Change Text (通知, "回復薬×3 を手に入れた")
Branch 3: [Always True] ← 60%: コモン
→ Change Text (通知, "コイン×50 を手に入れた")
Set Number のFromにRandom Property(Min〜Max範囲のランダム値)を指定して乱数を変数に格納し、Conditionsの分岐で確率テーブルを実現します。
4.26 押せるブロック(パズル)
ブロック押し(プレイヤーの前方に力を加える):
Trigger Event: On Update
→ Conditions: [Is Input Held Down: Push ボタン] AND [Is Grounded: Player]
AND [Raycast 3D: Player の前方 1m, Layer: Block]
→ Enter State (Player, 押すアニメ, Layer: 3)
→ Add Force 3D (ブロック, Direction: Playerの Forward, Force: 300)
ブロックが目的位置に到達:
Event: On Trigger Enter (ブロック)
→ Change Position (ブロック, 目的位置の中心にスナップ, Duration: 0.2)
→ Is Kinematic 3D (ブロック = true) ← これ以上動かないように固定
→ Emit Signal ("block-puzzle-complete")
4.27 トラップ(ダメージ床・落石)
ダメージ床(乗っている間ダメージ):
[ダメージループ]
Trigger Event: On Interval (0.5秒)
→ Check Conditions: [Compare Boolean: player_on_trap == true]
→ Increment Number (player_hp, -5)
→ Play Sound Effect (ダメージSE)
→ Check Conditions: [Compare Decimal: player_hp <= 0]
→ Emit Signal ("player-died")
落石トラップ(タイミング回避):
Trigger Event: On Interval (3秒)
→ Instantiate (警告エフェクト Prefab, 落下地点の地面)
→ Wait Seconds (1.0) ← 警告表示時間(プレイヤーが逃げる猶予)
→ Instantiate (岩 Prefab, スポーン位置)
→ Wait Seconds (3.0)
→ Destroy (落ちた岩)
4.28 はしご/つたの昇降
Event: On Interact (はしご下端の Hotspot)
→ Set Bool (on_ladder = true)
→ Is Controllable (Player, false)
→ Teleport (Player, Marker_LadderBottom) ← はしごの真正面にスナップ
→ Change Rotation (Player, はしご正面方向, Duration: 0.2)
→ Enter State (Player, はしご昇りアニメ State, Layer: 5)
→ Change Position (Player, Marker_LadderTop の Position,
Duration: 3.0, Easing: Linear) ← 一定速度で上昇
→ Play Gesture (Player, はしごから降りるアニメ)
→ Teleport (Player, はしご上端の着地位置)
→ Stop State (Player, Layer: 5, Transition: 0.3)
→ Is Controllable (Player, true)
→ Set Bool (on_ladder = false)
Is Controllable(false) で通常の移動入力を無効化してからはしご移動を行うのがポイントです。
4.29 水中移動(泳ぎ)
水に入った時:
Event: On Trigger Enter Tag (Tag: "Player")
→ Set Bool (is_swimming = true)
→ Change Movement Speed (Player, Speed: 2.0, Duration: 0.3)
→ Enter State (Player, 泳ぎアニメ State, Layer: 5)
→ Change To Shot (水面用 Shot, Duration: 0.5)
→ Play Sound Effect (水に入るSE)
→ Play Ambient (水中環境音)
水から出た時:
Event: On Trigger Exit Tag (Tag: "Player")
→ Change Movement Speed (Player, Speed: 4.0, Duration: 0.3)
→ Stop State (Player, Layer: 5, Transition: 0.3)
→ Revert To Previous Shot (Duration: 0.5)
→ Fade All Ambient (Duration: 1.0)
4.30 NPCのスケジュール行動
Trigger Event: On Interval (5秒)
→ Conditions:
Branch 1: [time_of_day >= 6 AND < 12]
→ Move To (NPC, Marker_Shop) ← 午前:店で仕事
→ Enter State (NPC, 作業アニメ, Layer: 3)
Branch 2: [time_of_day >= 12 AND < 18]
→ Move To (NPC, Marker_Square) ← 午後:広場で休憩
→ Enter State (NPC, 座りアニメ, Layer: 3)
Branch 3: [Always True]
→ Move To (NPC, Marker_Home) ← 夜:家に帰る
→ Enter State (NPC, 睡眠アニメ, Layer: 3)
current_schedule で「既にその行動中か」をチェックし、毎Interval同じMove Toが発火しないようにするのが重要です。
4.31 QTE(クイックタイムイベント)
QTEの開始:
→ Set Bool (qte_active = true)
→ Canvas Group Alpha (QTE_UI = 1, Duration: 0.1)
→ Time Scale (0.5, Blend Time: 0.1, Layer: 1) ← スローモーションで緊張感
正しいボタンが押された:
Trigger Event: On Input Button (X ボタン)
→ Check Conditions: [Compare Boolean: qte_active == true]
→ Set Bool (qte_active = false)
→ Emit Signal ("qte-success")
Time Scale でスロー + Unscaled Time のIntervalでゲージを減らすことで「スローモーション中でも入力受付は通常速度」を実現します。
4.32 コレクティブル(収集要素)
Event: On Trigger Enter Tag (Tag: "Player")
→ Increment Number (collectibles_found, +1)
→ Play Sound Effect (収集SE)
→ Set Active (このオブジェクト = false) ← Remember で状態保存
→ Check Conditions: [Compare Decimal: collectibles_found >= collectibles_total]
→ Emit Signal ("all-collected")
Remember コンポーネントで Set Active(false) 状態をセーブに保存すれば、ロード後も取得済みのものは消えたままになります。
4.33 パーティ/仲間の追従
仲間を加入させる:
Event: On Interact (仲間NPCに話しかける)
→ Set Bool (party_member_1_active = true)
→ Start Following (仲間1, Target: Player, Min Distance: 2.0, Max Distance: 3.5)
→ Change Text (通知, "○○が仲間に加わった!")
複数仲間の隊列(距離をずらす):
仲間1: Start Following (Target: Player, Min: 2.0, Max: 3.5)
仲間2: Start Following (Target: 仲間1, Min: 2.0, Max: 3.5)
仲間3: Start Following (Target: 仲間2, Min: 2.0, Max: 3.5)
隊列を作るには「仲間2は仲間1をFollow」のようにチェイン構造にします。
GC2 と他のアセット・ツールとの共存
GC2はUnityのフレームワークの特定の領域だけを担当するツールキットです。
GC2が占有する領域(競合注意)
以下はGC2が内部的にフル制御しており、同じ領域を担当する別のアセットを併用すると動作が競合する可能性が高いものです。
| GC2が制御する領域 | 競合するアセットの例 | 競合理由 |
|---|---|---|
| キャラクター移動・回転・物理 | Opsive UCC、Invector TPC、KCC、ECM2等 | 同じGameObjectの移動制御を奪い合う |
| カメラ管理 | Cinemachineを「メインカメラ制御」として使用 | 両方がMain CameraのPosition/Rotationを毎フレーム上書き |
| セーブ&ロード | Easy Save等を「GC2管理下のデータにも適用」する場合 | 同じデータを二重に保存して不整合 |
| オーディオ再生管理 | 別のオーディオマネージャ | GC2のVolume階層と競合 |
GC2が関与しない領域(自由に選択可能)
以下の領域はGC2がまったく制御しないため、Unity標準でもサードパーティアセットでも好きなものを使えます。
| 領域 | GC2との関係 |
|---|---|
| UIレイアウト・設計 | GC2は Change Text 等で「値を書き込む」だけ |
| パーティクル・VFX | GC2は Instantiate / Set Active で生成するだけ |
| 地形・レベルデザイン | GC2のCharacterがその上を歩くだけ |
| シェーダー・マテリアル | GC2は Change Material Color 等で外部操作するのみ |
| NavMesh・パス計算 | GC2のDriverが「利用する」だけ |
| Animator Controller設計 | GC2のGesture/Stateはその上の薄いラッパー |
| 物理(Rigidbody・Joint・Cloth) | GC2は Add Force 等を提供するが物理設定自体には関与しない |
| ネットワーク | GC2はシングルプレイ前提。ネット層は完全に別 |
| プロシージャル生成 | GC2は生成後のオブジェクトを操作するだけ |
| ポストプロセス・カメラエフェクト | GC2のCameraは位置と回転のみ管理 |
競合判定の原則
あるアセットをGC2と併用できるか?
├── そのアセットは「GC2のCharacter」を制御しようとするか?
│ → Yes → 競合する
│ → No → 共存可能
├── そのアセットは「Main CameraのPosition/Rotation」を毎フレーム制御するか?
│ → Yes、かつGC2のCamera Shotも使いたい → 競合する
│ → Yes、だがGC2のカメラ機能は使わない → 共存可能
│ → No → 共存可能
└── そのアセットはGC2が関与しない領域を担当するか?
→ Yes → 自由に使える
注意が必要な「グレーゾーン」のアセット
- Cinemachine:GC2のCamera Shotと同じMain Cameraを操作すると毎フレーム奪い合い。別カメラ(ミニマップ等)に使うなら共存可能
- Animancer:GC2のCharacterのAnimatorを直接操作すると衝突。GC2 Character以外のGameObjectなら問題なし
- Playmaker / Unity Visual Scripting:共存可能。公式ドキュメントに明記されています
- DOTween / LeanTween:GC2が管理しないオブジェクトに対してなら問題なし
コアだけでは大変なこと(GC2モジュールの価値)
GC2モジュールの最大の強みはGC2のVisual Scripting・Variables・セーブ&ロードと完全に統合されていることです。
インベントリ(アイテム管理)
コアのみだと: List Variableにアイテム IDを格納し、手動で追加・削除のロジックを組み、Bag UIを一から構築する必要があります。
Inventoryモジュールがあると: Itemアセットで定義 → Bagコンポーネントで管理、これだけで完結。Runtime Item(個別インスタンスの概念)、Equipment(装備スロット)、Currency(通貨)、Merchant(商店)、Tinker(クラフト/解体)、Loot Table(確率ドロップ)が全部入りです。
AI(複雑なNPC行動)
コアのみだと: 状態が4〜5個を超えると、どのTriggerがどの状態に対応するか追跡が困難になります。
Behaviorモジュールがあると: State Machine/Behavior Tree/GOAP/Utility AIの4方式が使え、ランタイムで現在の実行ノードが視覚化されデバッグが劇的に楽になります。
戦闘(近接/遠距離)
コアのみだと: コンボ(A→A→Bで3段攻撃)をConditionsで組むと入力バッファやタイミング窓の実装が非常に煩雑です。
Melee/Shooterモジュールがあると: SkillアセットのSequencerでフェーズ管理、ComboアセットでInput Bufferが先行入力を自動吸収、Shieldアセットのパリィ機能が標準で使えます。
知覚(Perception)
コアのみだと: 球状のTrigger Colliderでは視野角の概念がなく、壁の向こうも検知してしまいます。
Perceptionモジュールがあると: Sight/Hearing/Smell/Feelの4センサ、Awareness(段階的認知)、Luminance(明暗)+Camouflage(偽装)で本格的なステルスシステムが組めます。
ステータス・RPG数値体系
コアのみだと: ダメージ計算式をMath命令の列で毎回記述し、装備補正を手動管理する必要があります。
Statsモジュールがあると: Formulaアセットで式を一箇所に定義、Stat Modifierで装備補正を自動管理、Status Effectで状態異常を定義するだけで実装できます。
コアだけでは「辛い」ラインの目安
| 領域 | コアで十分な範囲 | モジュール推奨の境界 |
|---|---|---|
| アイテム | 拾う→フラグON→使う(3種類以下) | アイテムリスト表示、スタック、装備、売買 |
| 会話 | 固定テキスト表示 + Wait | 選択肢分岐、条件分岐、繰り返し会話 |
| AI | 巡回 + 追跡(2〜3状態) | 4状態以上、動的優先度、計画的行動 |
| 戦闘 | ボタン→攻撃→当たったらダメージ | コンボ、パリィ、リコイル、照準 |
| 知覚 | 範囲トリガーで発見 | 視野角、段階認知、隠密、痕跡 |
| 数値 | HP + 攻撃力(2〜3値) | 5値以上、計算式、装備補正、状態異常 |
| クエスト | Booleanフラグで進行管理 | タスク階層、ジャーナルUI、自動追跡 |
モジュール間の連携と組み合わせ
GC2モジュールの真価はモジュール同士が連携することにあります。
代表的な組み合わせ
- Stats × Melee / Shooter:Hitの発生時にFormulaでダメージ自動計算。Equipmentによる Stat Modifierが自動反映
- Stats × Inventory:装備スロットに装備すると Stat Modifier が自動適用。外せば戻る
- Perception × Behavior:Awarenessが Alert に達したら State Machine が追跡に遷移
- Dialogue × Stats:会話ノードの条件に「STR ≥ 15」を設定。力が足りないと選択肢が出ない
- Quests × Dialogue:NPC との会話内で Quest を受注し、報告時に報酬が自動発火
- Inventory × Dialogue × Quests:典型的RPG構成。アイテム収集→Task完了→報酬
推奨組み合わせ(ジャンル別)
| ジャンル | 推奨モジュール構成 |
|---|---|
| アクションRPG | Stats + Inventory + Melee + Behavior |
| シューター | Shooter + Stats + Inventory + Perception |
| ステルス | Perception + Behavior + (Melee or Shooter) |
| アドベンチャー/謎解き | Inventory + Dialogue + Quests |
| RPG(古典的) | Stats + Inventory + Dialogue + Quests + Behavior |
| サバイバル | Inventory + Stats + Perception + Behavior |
| 格闘 | Melee + Stats |
モジュールの導入判断基準
判断フローチャート
「この機能はコアだけで作れるか?」
→ Yes、かつ実装が簡易(〜30分) → コアで作る
→ Yes、だが相当な工数がかかる → モジュール検討
→ No(概念自体がコアにない) → モジュール必須 or カスタムスクリプト
おすすめの導入順序
- まずコアだけで作ってみる — 基本が分かっていないとモジュールも使いこなせない
- ゲームジャンルの中核になるモジュールを1〜2個入れる
- RPGならStats + Inventory
- アドベンチャーならDialogue + Inventory
- アクションならMelee or Shooter
- プレイテストして足りないものを追加する — 必要になってから買う
- AI系(Behavior + Perception)は敵が複数種類になった段階で検討 — 1種類の単純な敵ならコアで十分
よくある実装パターン集
シーン遷移(ローディング付き)
Trigger Event: On Interact (ドアに触れる)
→ Is Controllable (Player, false)
→ Canvas Group Alpha (黒幕 = 1, Duration: 0.5)
→ Save Game (slot: 0)
→ Load Scene ("NextStage", Async: true)
Transitions Extension(無償) を使えば、ローディング画面やフェード演出を専用コンポーネントで設定できます。
複数エンディング
Global Variables:
- ending_flag (Number): 0=未決定, 1=Good, 2=Bad, 3=True
最終シーンの Conditions:
Branch 1: [ending_flag == 1] → Good End カットシーン
Branch 2: [ending_flag == 2] → Bad End カットシーン
Branch 3: [ending_flag == 3] → True End カットシーン
Branch 4: [Always True] → Normal End
ゲーム中の選択や行動で ending_flag を書き換えていく設計です。
デイナイトサイクル(昼夜切替)
Global Variable: time_of_day (Number, 0〜24)
Trigger Event: On Interval (0.1秒)
→ Increment Number (time_of_day, +0.01)
→ Check Conditions: [Compare Decimal: time_of_day >= 24]
→ Set Number (time_of_day = 0)
GC2の
Change Animator Floatで time_of_day をAnimatorに渡し、Animator側でライト制御するハイブリッド手法が楽です。
トラブルシューティングと設計のコツ
よくある問題と解決法
| 問題 | 原因 | 解決法 |
|---|---|---|
| Actionsが動かない | TriggerのEventが発火していない | Log Text を先頭に入れて発火確認 |
| キャラが動かない | Player Unit未設定 or Is Controllable がfalse | InspectorでPlayer Unitを確認 |
| Move Toで目的地に着かない | Stop Distanceが大きい or NavMesh未ベイク | 設定確認 |
| 変数が反映されない | LocalとGlobalを間違えている | シーン間共有ならGlobal |
| セーブが効かない | Rememberコンポーネントがない | 保存したいオブジェクトにRememberを付ける |
| Hotspotが反応しない | Colliderがない or Is Triggerでない | Collider(Is Trigger = true)が必要 |
| On Interactが発火しない | Interaction Radiusに入っていない | Character > Motion > Interaction > Radius確認 |
| 音が鳴らない | AudioClip未設定 or Volume 0 | パラメータ+Master Volume確認 |
設計のコツ
- 変数名は英語でスネークケース —
player_hp、has_key_blue、quest_01_complete - Signal名は
主語-動詞形式 —boss-defeated、door-opened、timer-expired - Signalをお気に入り登録する — 打ち間違い防止
- 1 Actions = 1 責務 — 単機能にする
- Conditionsは上から優先 — 最も限定的な条件を最初のBranchに
- Hotspotは全インタラクト対象に付ける — プレイヤーに「何ができるか」を常に示す
On Trigger Enter Tagを活用する — Tagフィルタで不要な発火を防ぐ
パフォーマンス意識
On Update/On Fixed Updateは毎フレーム実行されるので必要最小限に(On Intervalで代用検討)Instantiateを大量に使う場合はPool Prewarmで事前プーリング- 使わなくなったActions/Triggerは
Set Active(false) で止める - NavMesh Agent使用時に大量のNPCがいるとパスファインディング負荷が上がる。
On Intervalの間隔を広めに
公式リンク
まとめ
本記事では、Game Creator 2でゲームを作る方法を実践パターンとともに解説しました。如何だったでしょうか。
重要なポイントを振り返ります。
- Trigger + Actions + Conditions + Variables の4つを覚えれば、大半のゲームロジックは組めます
- GC2が占有するのはキャラクター制御・カメラ管理・ゲームロジック・セーブ&ロードの4領域。それ以外は自由に選択できます
- 他のアセットと競合するかの判断基準は「GC2のCharacter/Cameraと同じGameObjectを制御しようとするかどうか」
- 「インベントリ管理」「複雑なAI」「戦闘の操作感」「段階的な知覚」「RPG数値体系」はコアだけだと実装コストが跳ね上がる — ここがモジュールの価値
- モジュール同士が連携するとさらに価値が倍増します(Stats × Meleeでダメージ自動計算、Perception × Behaviorで知覚駆動AIなど)
「小さなイベント駆動の積み重ね」で考えれば、コア+必要なモジュールの組み合わせで、ほとんどのゲームジャンルに対応できます。
それでは次の記事も閲覧いただけると幸いです。
📚 シリーズ:Game Creator 2 完全ガイド(7/16)



