Unity

【Unity】Game Creator 2 サンプル実装5選 ― 脱出・格闘・RPG・サバイバル・FPS

【Unity】Game Creator 2 サンプル実装5選 ― 脱出・格闘・RPG・サバイバル・FPS

当サイトを閲覧いただきありがとうございます。

本記事では、Game Creator 2のモジュールを組み合わせて「5つの異なるジャンルのゲーム」を実装する手順をまとめてレポートします。脱出ゲーム・ボクシング・ドラクエ風RPG・サバイバルクラフト・Apex風FPSの各ジャンルについて、使用モジュール・設計方針・実装手順を解説します。

公式ドキュメント:Game Creator 2 Documentation


1. 脱出ゲーム(Core + Inventory + Dialogue)

ゲーム仕様

  • 視点:三人称固定カメラ or ポイント&クリック
  • ルール:鍵のかかった部屋からアイテム/謎解きを通して脱出する
  • 主要要素
    • 拾えるアイテム(鍵・メモ・工具)
    • 使うアイテム(錠前に鍵を使う、工具で箱をこじ開ける)
    • 調べる家具(TriggerとDialogueで情報開示)
    • パスワード入力(Global Name Variable)
    • 脱出条件(ドアが開いてシーン遷移)

使うモジュール

モジュール用途
Core(Characters/Cameras/Visual Scripting/Variables/Save & Load)プレイヤー操作・カメラ・全ゲームロジック
Inventoryアイテムの所持・使用
Dialogue家具・NPCとの対話、ヒント表示
Extensions: Transitionsドアからシーン遷移時の演出

プロジェクト初期セットアップ

  1. Unityプロジェクト作成 → Game Creator 2 + Inventory + DialogueをPackage Managerからインストール
  2. Game Creator > Install... でサンプルを入れる:Inventory(Items/UI)、Dialogue(Skin Default)
  3. シーン Room_01 を作成。床・壁・天井のコライダー付きモデルを配置
  4. Hierarchy → Game Creator > Characters > Player でプレイヤー作成
  5. Game Creator > Cameras > Camera ShotThird Personを作成しPlayerをターゲット指定
  6. Inventory UIプレハブ(Bag UI)をCanvasに配置

アイテム定義(Inventory)

Project で Create > Game Creator > Inventory > Item を繰り返し作成します:

Item名ID用途Prefab
Rusty Keykey_rusty正面ドア開錠あり
Crowbarcrowbar木箱破壊あり
Torn Notenote_01パスワードの断片なし
Note Papernote_02パスワードの断片なし

PropertiesTorn Note にNumber Property fragment = 1、Note Paperは2。合計で3になったら完全なパスワードが判明する設計に利用します。

Bag:PlayerにBag(Listタイプ)コンポーネントを追加し、Skin UIにInventoryのBag Skinを指定します。

シーン構成

必要なGameObject:

  • DoorFront(出口ドア):鍵で開く
  • Safe(金庫):3桁パスワード入力で開く
  • WoodenCrate(木箱):Crowbarで破壊、中から鍵
  • Desk(机):調べるとTorn Noteを拾う
  • Bookshelf(本棚):Note Paperを挟んだ本
  • HintNPC(任意):ヒントを話すNPC

全インタラクト対象に Trigger(Event = On Interact)と Hotspot(Mode = On Interaction Focus、Spotに「調べる」テキスト表示)を設定します。

Variables設計

Global Name Variables(アセット)EscapeFlags

変数名初期値用途
door_unlockedBooleanfalse出口ドア開錠フラグ
safe_unlockedBooleanfalse金庫開錠フラグ
crate_openBooleanfalse木箱破壊フラグ
password_enteredString""プレイヤーが入力したパスワード
password_correctString”4263”正解

Remember:Player(またはDontDestroyOnLoadなルート)にRememberコンポーネント → Bag・Variables をMemoryに登録してセーブ対応します。

アイテム取得ロジック(例:机のTorn Note)

DeskのTrigger(On Interact)でConditionsコンポーネントにより分岐します:

Branch 1(条件:Has Item (Torn Note, 1) == false):

  1. Play Dialogue → 机の説明と「引き出しを開けた」演出
  2. Add Item → Torn Note をPlayerのBagに
  3. Play UI Sound(拾得音)
  4. Play Dialogue → 「拾った」通知

Branch 2(条件空 = デフォルト分岐):Play Dialogue → 「もう何もない」

取得後はDeskのHotspotを Set Active(Hotspot, false) で無効化するか、ConditionsのBranch分岐で「持っているならスキップ」させます。

アイテム使用(鍵でドア開錠)

DoorFrontのTrigger(On Interact):

  • Branch 1door_unlocked == true):Transition to Scene(Transitions Extension)で Outside シーンへ
  • Branch 2Has Item (Rusty Key, 1) == true):Play Dialogue → door_unlocked = true → 鍵消費 → 「ドアが開いた!」
  • Branch 3(デフォルト):「ドアには重そうな錠前が掛かっている」

木箱破壊(CrateのTrigger):

  • Branch 1:crate_open == true → 「もう何もない」
  • Branch 2:Has Item (Crowbar, 1) == true → 破壊SE/パーティクル → Add Item (Rusty Key)crate_open = true
  • Branch 3:「手では開かない」

金庫とパスワード入力

  • Safe UIで4桁入力欄を作成(Create > UI > InputField
  • 金庫Trigger(On Interact):safe_unlocked == true なら中身取得、そうでなければSafe UIを表示
  • 入力確定ボタンで typed == password_correct を比較(Text Equals条件)
  • 成立:safe_unlocked = true + 成功音 + UI閉じ + 宝箱中身を金庫内にInstantiate
  • 不成立:失敗音 + Play Dialogue「違うようだ…」

パスワードの推理:Torn Noteに「4と2が…」、Note Paperに「…6と3」。両方持って調べると完全な 4263 がDialogue内のGlobal Dynamic Valueで表示されます。

Dialogueの使い方

  • Text ノードにActor(Narrator等)とPortrait Noneで素のメッセージ
  • Choiceで「調べる/離れる」を提示するパターンも可
  • Tag を付けて Tag Visited で「初見だけ長い説明、次回からは短い要約」の切替が可能

ヒントNPC:NPCにTrigger(On Interact)+ Play Dialogue。Choice で「ヒントをくれ」を選ぶと、金庫・木箱・ドアそれぞれの状態を見て段階的に教えます。

カメラ演出

  • Close-up Shot:金庫や本棚など「寄りたい対象」ごとに専用Camera Shot(Fixed Position)を作り、調べ始めに Change To Shot、離れる時に Revert to Previous Shot
  • Dialogue中のカメラ固定:Dialogueの On Start で Is Controllable = false、On End で戻す

セーブとロード

  • タイトルメニューButton:Save Game (slot=1) / Load Game (slot=1) / Delete Game (slot=1)
  • PlayerにRememberコンポーネントを置き、Transform、Bagを Memoryに追加
  • Global VariablesのSaveチェックボックスをONにして、パズル進捗を保存

シーン遷移

  • 脱出成功時のDoorFront Triggerで Transition to Scene(Transitions Extension)
  • Nextシーン Outside にエンディングDialogueを配置
  • エンディングDialogueのOn Finishで Load Scene → タイトル戻り

実装順序(推奨)

  1. シーン・Player・Cameraのセットアップ
  2. Inventory導入、アイテムとBag UIの動作確認
  3. 1つだけTrigger+Dialogue+Add Itemを実装(動作確認)
  4. 残りのインタラクト対象を横展開
  5. 金庫パズル(Variables+UI InputField)
  6. ドア開錠とシーン遷移
  7. Remember/Save & Load対応
  8. DialogueのヒントNPCと演出カメラ
  9. SE・BGM(Play UI Sound/Play Ambient)
  10. Transitions演出と仕上げ

コツと落とし穴

  • TriggerのUse Raycast:プレイヤーと対象物の間に壁があると反応させない設定で自然に
  • HotspotのTarget = Player を忘れない
  • ItemのPrefab未設定ではDrop Item不可。拾うだけのアイテムなら不要、落としたいなら設定
  • パスワード比較で大文字小文字:InputFieldからのテキストは JoinSet Text で正規化する
  • Dialogue中のキャラ入力遮断Is Controllable = false をセット
  • Rememberの順序:ParentのTransformをセーブしたいならChildのRememberより親が先に読まれる構造にする
  • Save対象外の型:GameObject参照変数は保存不可。代替ID(string)を保存する

応用アイデア

  • Perception導入で徘徊する管理人を追加し、見つかるとゲームオーバー(ホラー系へ拡張)
  • Statsで「正気度」Attributeを追加し、暗い部屋にいると減っていく演出
  • Questsに置き換えて、部屋ごとにTaskを順次開放するストーリードリブン構造に
  • Localization導入で多言語対応

2. ボクシングゲーム(Melee + Stats + Behavior)

ゲーム仕様

  • 視点:三人称サイド寄りカメラ(リング周回)
  • ルール:3ラウンド制。各3分。HPかDownカウントで決着
  • 操作:ジャブ/ストレート/フック/アッパー、ガード、バックステップ、ウィーブ
  • AI:Behavior Treeでジャブ主体→隙あらば大振り、ガード/回避も行う
  • 勝敗:HP 0でKO、3回ダウンでTKO、時間切れで判定

使うモジュール

モジュール用途
Core(Characters/Cameras/Visual Scripting/Variables)基本動作
Meleeパンチ/ガード/コンボ/ダメージ/Reaction
StatsHP、Stamina、Damage Formula、Down Count
Behavior敵AI(Behavior Tree)
CamerasLock Onベースのリングカメラ

プロジェクト初期セットアップ

  1. Game Creator 2 + Melee + Stats + Behaviorをインストール
  2. Game Creator > Install... でMelee Examplesの Brawl テンプレをインポート
  3. リングGameObject(Plane上にロープ・ポスト・床)を配置
  4. PlayerとEnemyをそれぞれ PlayerCharacter で生成
  5. Lock On Shotを採用:Anchor = Player、Look Target = Enemy

Stats設計

Attribute

AttributeMax説明
hpmax_hp体力
staminamax_staminaパンチ/回避で消費

Stat

StatBase説明
max_hp100HP上限
max_stamina100スタミナ上限
attack10攻撃力
defense5防御力
down_count0ダウン回数

ClassBoxer に上記Stat/Attributeをすべて含め、Player/Enemyそれぞれに Traitsコンポーネントで割当てます。

ダメージFormula

max[ 1, source.stat[attack] * source.var[current_power] - target.stat[defense] ]

current_power はSkill側で設定するLocal Variable(ジャブ0.5、フック1.0、アッパー1.5等)です。

Meleeアセット構成

Weapon(素手):ID fists、Shield Boxing Guard、Hit Reaction HitFlinch、On Equip で拳のColliderプロップを両手にAttach Prop、Combos BoxerCombo

Shield(ガード):Angle 160°、Parry Time 0.18s、Defense 50、Recovery 2/sec、Cooldown 1.5s、State Layer 7

Skillアセット

SkillPowerPoise ArmorPoise Damage説明
Jab_L111左ジャブ、スピード最速・火力最低
Jab_R111右ストレート
Hook_L222左フック、Motion Warpで敵に軽くスナップ
Hook_R222右フック
Uppercut333アッパー、ダウン誘発要素あり
BodyBlow112ボディ、ガード貫通に強い
Dodge_Back---ダッシュバック(スタミナ消費)
Weave_L/R---左右ウィーブ(パリィ判定内で無敵)

各SkillのSequencer:Anticipation 0.1〜0.25s、Strike 0.05〜0.1s(Strikerを拳のSphere、Predictions=3)、Recovery 0.3〜0.6s。Animation Cancel Trackで Recovery後半はWeave/Dodgeでキャンセル可能です。

SkillのOn Hit(Self = 攻撃者、Target = 被弾者):Change Attribute (target.hp, -Formula) + Change Attribute (self.stamina, -2)

ダウン誘発はReactionで実現します。Knockdown ReactionのMin Powerを3に設定し、Power 3のSkill(Uppercut)命中時に自動発動。ReactionのOn Enterで Change Stat (target.down_count, +1) を実行します。

Combo(BoxerCombo)

Root
├── Tap A  → Jab_L
│   └── Tap B  → Jab_R           (ワン・ツー)
│       └── Tap A  → Hook_L      (ワン・ツー・フック)
├── Tap B  → Jab_R
│   └── Tap A  → Hook_L
├── Tap C  (Charge) → Uppercut  (溜め0.4sで発動)
└── Tap D  → BodyBlow  (Anytime)

Input Bufferは0.4s(Set Buffer Window)です。

Reaction

  • HitFlinch:小フリンチ(Min Power 0)
  • HitStagger:Min Power 2、後退+カウンター誘発
  • Knockdown:Min Power 3、床に倒れるアニメ。On Enterで Set Stat (down_count, +1)
  • Parried:パリィ後の硬直。カウンター受付時間を長めに設定

Inputマッピング

  • On Input Button(Left Click)Input Execute(A)
  • On Input Button(Right Click)Input Execute(B)
  • On Input Button(Shift Hold) + Release → Input Charge(C) / Input Execute(C)
  • On Input Button(Space)Input Execute(D)(ボディ)
  • On Input Button(Q)Start Blocking / Releaseで Stop Blocking
  • On Input Flick(Move Left/Right)Play Melee Skill(Weave_L/R)(Blocking中のみ)

カメラ設定

  • Lock On Shot:Anchor Player、Look Target Enemy、Distance 3.0m、Offset (0, 1.6, 0)
  • Shake演出:大技命中時のOn Hitに Shake Camera Burst(Magnitude 0.3、Duration 0.2)
  • カットイン:Uppercut直前に専用Camera Shotに Change To Shot、終了後 Revert to Previous Shot

敵AI(Behavior Tree)

ProcessorとGraph EnemyBoxerBT.asset をEnemyに設定します:

Entry
└── Selector
    ├── Sequence [Threat: Player Attacking & Stamina > 20]
    │   ├── Check Condition: In Attack Phase (target=Player, Phases=Anticipation/Strike)
    │   ├── Selector (60% Block / 40% Weave)
    │   │   ├── Task: Start Blocking
    │   │   └── Task: Play Melee Skill(Weave_L or R)
    ├── Sequence [Counter: Player Recovery]
    │   ├── Check Condition: In Attack Phase(target=Player, Phases=Recovery)
    │   ├── Task: Input Charge(C); Wait 0.5s; Input Execute(C)  (アッパー)
    ├── Sequence [Pressure: HP > 30%]
    │   ├── Move To Player (Stop Distance=1.4)
    │   ├── Input Execute(A); Input Execute(B); (ワンツー)
    ├── Sequence [Defensive: HP <= 30%]
    │   ├── Move To BackCorner
    │   ├── Start Blocking

Blackboardtarget(Game Object)= Player、aggression(Number)= 0〜1(HPが減ると下がる)

Stats UI

  • HUDに Attribute UI(hp、stamina)を2つずつ(Player/Enemy)
  • Transition ON(Stall 0.3s、Transition 0.6s)で「遅れて減るバー」演出
  • Down Count UIは Stat UIdown_count を表示し、3でマッチ終了

試合フロー(Visual Scripting)

変数用途
roundNumber現在ラウンド
round_timeNumber残り秒
is_koBooleanKO判定
match_resultStringplayer_win / enemy_win / draw
  • ラウンドタイマー:Match Controller の On Startround = 1round_time = 180On Interval(1.0s)round_time -= 1
  • round_time <= 0 → ラウンド終了:round++、Stamina回復、round <= 3 なら次ラウンド、そうでなければ判定
  • KO判定On Stat Change(down_count)で down_count >= 3 なら is_ko = trueOn Attribute Change(hp) で hp <= 0 も同様
  • 判定勝ち:残HPと与ダメ総数(Stat damage_dealt)を比較して match_result を決定

ゲーム開始〜終了の流れ

  1. Title シーンで「試合開始」ボタン → Transition to Scene(Ring)
  2. Ringシーンの On Start でゴングSE → Match Controller動作開始
  3. ラウンド中:Player/Enemyのバトル
  4. KO/判定 → カメラを勝者にフォーカス → 結果UI表示
  5. ボタン押下で Title に戻る

SE/BGM

  • Play Ambient:群衆の歓声
  • Play Music:試合BGM(ラウンド中のみ)
  • Skillに Use Sound、Hit Sound、Block Sound、Parry Soundを適切に設定
  • ゴングSEを Play UI Sound でラウンド開始/終了に

実装順序(推奨)

  1. 床・リング・Player・Enemyを配置、Lock On Cameraで確認
  2. Stats(Attribute/Class)とTraits
  3. Meleeの Weapon、Shield、1つのSkill(Jab_L)で命中&ダメージ動作確認
  4. Reaction(HitFlinch)→ 被弾アニメ確認
  5. Combo追加(Jab_L → Jab_R → Hook_L)
  6. Inputマッピング一式
  7. Enemy用Behavior Tree(最初はシンプルに:近づいてジャブだけ)
  8. HUD(Attribute UI)とShake
  9. ラウンドタイマー、KO/判定、シーン遷移
  10. カットインと音響の仕上げ

コツと落とし穴

  • State Layer衝突:Weapon = 5、Charged Skill = 6、Shield = 7の予約を必ず守る
  • Motion Warpの距離:Hook系は Self Close = 1.0m 程度で自然。遠すぎると滑って見える
  • Parry Timeは短めが快感。0.15〜0.20sで調整
  • Stamina消費:全攻撃/全回避に消費を入れないと単調に。0近傍でSkill実行をConditionsでブロック
  • Behavior Treeは最小から:いきなりフルAIは破綻する。ジャブするだけのAI → 近づく → ガードの順で肉付け
  • ReactionのCancel Time:スタンロック防止。Min Power 1〜2のReactionに0.2〜0.3sを設定
  • Down Countのリセット:ラウンドまたぎでリセットするか、試合全体で継続するかを先に決める
  • Lock On Cameraの角度調整で酔いを防ぐ:Offset.Y 1.6〜1.8、Smooth Time 0.2〜0.4

応用アイデア

  • Perceptionで観客席の視線ビジュアル
  • Questsで「10回ストレートを当てる」「5回パリィする」などチャレンジ
  • Inventoryでプロテイン・グローブなどのアイテム装備 → Stat Modifier
  • Dialogueで試合前後のインタビュー/実況テキスト
  • マルチプラットフォーム:Inputを抽象キーA〜Hで統一し、キーボード/ゲームパッド/モバイルタッチに同時対応

3. ドラクエ風RPG(Stats + Inventory + Dialogue + Quests + Melee + Behavior)

ゲーム仕様

  • 視点:三人称オービットカメラ
  • 流れ:フィールド探索 → 街で情報収集・買い物 → ダンジョン突入 → ボス撃破 → クリア
  • 戦闘:シンボルエンカウント(敵と接触するとバトルシーンへ遷移)+リアルタイム戦闘(Melee)
  • 成長:経験値 → レベル → Stats上昇
  • 要素:装備、アイテム、ポーション、クエスト、ダイアログ、セーブ/ロード

使うモジュール

モジュール用途
Core基本動作、Variables、Save & Load
StatsHP/MP/STR/DEF/LV/EXP、Class
Inventory武器/防具/ポーション、Currency(Gold)、Merchant
DialogueNPC会話、Choice ベースの受注/報告
Questsメインクエスト、サイドクエスト、Journal
Melee戦闘(剣/杖)
Behavior敵AI
CamerasThird Person / Cutscene
Extensions: Transitions戦闘突入時/シーン遷移

プロジェクト初期セットアップ

  1. 必要モジュール全てをPackage Managerからインストール
  2. Game Creator > Install... でサンプル導入:Stats(Classes、UI)、Inventory(Items、UI)、Dialogue(任意スキン)、Quests(UI)、Melee(Sword)
  3. シーン構成:TitleWorldMapTown_01Dungeon_01_Floor1Dungeon_01_Boss

Stats設計

Attribute

AttributeMax参照Stat初期%
hpmax_hp1.0
mpmax_mp1.0

Stat

StatBaseFormula説明
level1table.level[source.stat[exp]]累積EXPから計算
exp0-累計経験値
max_hp2020 + 10 * source.stat[level]レベルで拡大
max_mp1010 + 4 * source.stat[level]
str5source.base[this] + source.stat[level]
def3source.base[this] + ceil[source.stat[level] / 2]
agi5-回避判定に

ClassHero(勇者)、Mage(魔法使い)で Base値を変えて使い分けます。

ダメージFormula

max[ 1, source.stat[str] * source.var[skill_power] - target.stat[def] + random[-2, 2] ]

Table(EXPテーブル)Create > Game Creator > Stats > Table、タイプLinear、係数20 → LV2で20 EXP、LV3で40 EXP…

Inventory(アイテム・通貨・商店)

CurrencyGold(Coin単体、Value 1)

Itemの例

Item分類用途
Copper Sword武器(Equipment)装備時 Add Stat Modifier(str, +3)
Iron Sword武器attack +8
Leather Armor防具装備時 Add Stat Modifier(def, +2)
Herb消耗品On Use:Change Attribute(hp, +20)

Equipment:Slot(RightHand、Body、Accessory)に対応するBoneを設定します。

Merchant:Town の道具屋NPCに Bag + Merchant。Stock、Buy Rate 1.0、Sell Rate 0.5。NPCのTrigger On InteractOpen Merchant UI を実行します。

Dialogue(会話)

村人NPC:Randomノードで挨拶を毎回違うセリフに。Tag Visitedで「初めて話す/2回目以降」を分岐します。

クエストNPC(村長)

  • Text:「村が魔物に襲われている…勇者よ、洞窟のボスを倒して欲しい」
  • Choice:「引き受ける/断る」
  • 引き受ける → Instructionで Quest Activate(MainQuest_01)
  • 報告用Textノード(Conditions: Is Quest Completed == true)で勝利セリフと Change Currency(+500)

情報提供NPC:特定のフラグ(Global Name Variable)を条件に出すセリフを切替。動的値で {player-name} の名前差込も可能です。

Quests(クエスト)

**MainQuest_01「古代の洞窟」**のTasks:

  1. 村長に話す(完了済み)
  2. 古代の洞窟へ向かう(POI:洞窟入口)
  3. ボスを倒す(On Die で Task Complete)
  4. 村に戻り村長に報告

Journal:PlayerにJournalコンポーネント、Tracking Mode = Multiple、RememberにJournal memoryを追加します。

UI:Quest List UI、Indicator UIで「次の目的地」アイコンを表示します。

フィールドと敵

シンボルエンカウント:敵Prefabをフィールドに配置。Triggerの Event On Trigger Enter Tag(Tag = Player)で発火時に Transition to Scene(Battle_01) を実行します。

戦闘シーン:Player(Hero)とEnemy(動的にSpawn)が対峙。MeleeのSword Weaponを装備してプレイヤー操作で斬りつけ、EnemyはBehavior Treeで追従&攻撃します。

戦闘結果:Enemyの On Die で EXP加算、Currency加算、Loot TableでHerbドロップ。Level Up判定で hp/mpをFull回復。勝利Dialogue → 直前のフィールドへTransitionします。

Player死亡:hp = 0 で On Attribute Change(hp) を拾い、タイトルまたは教会リスポーン(所持金半減)に遷移します。

Behavior(敵AI)

雑魚敵Slime

Entry
└── Selector
    ├── Sequence (HP < 20%)
    │   └── Task: Flee (Move To AwayFromPlayer)
    ├── Sequence (Player in range < 2m)
    │   └── Task: Play Melee Skill(BiteAttack)
    └── Task: Move To Player

ボスCave Lord

Entry
└── Selector
    ├── Sequence (HP < 30%, Enraged not yet)
    │   ├── Task: Play Gesture(RoarAnim)
    │   └── Task: Add Status Effect(Enraged)
    ├── Sequence (Player in Range)
    │   └── Selector
    │       ├── Task: Combo Attack 1-2-Uppercut (70%)
    │       ├── Task: AOE Skill "Shockwave" (30%)
    └── Task: Move To Player

EnragedはStatus Effectで Str +10、速度上昇、全攻撃Hit Reactionを強化します。

レベルアップ演出

PlayerにTrigger(Event = On Stat Change、Stat = level)を配置。exp が加算されるとFormula経由で level が再計算され、値が変わった時点で発火します。

発火時:Play UI Sound(LevelUp) → Dialogueポップ「レベルアップ!」 → hp/mpをMax回復

セーブ&ロード

  • タイトル/教会/宿屋メニューに Save Game(slot=1) ボタン
  • PlayerのRememberにTransform、Bag、Journal、Statsを登録
  • Global Name VariablesのSaveをすべてON

UI構成

  • HUD:Attribute UI(hp/mp)、Stat UI(level/gold)
  • ポーズメニュー:Tab切替(Status/Inventory/Quests/Options)
  • ダイアログ:Dialogue Skin
  • 戦闘結果:EXP/Gold獲得ウィンドウ

カメラ演出

  • フィールド:Third Person Shot(Orbit、Playerを Target)
  • 会話中:ActorとPlayerを映す固定位置Shotに切替
  • ボス戦突入:カットイン用Animation Shotをボスに向けて再生 → 戻す

シーン構成とフロー

Title
 ├─ 「はじめから」 → WorldMap へ Transition
 ├─ 「つづきから」 → Load Game(slot=1)
 └─ 「設定」 → Options

WorldMap
 ├─ Town_01(NPC多数、Merchant、宿屋で全回復)
 ├─ Dungeon_01_Floor1(雑魚敵、宝箱)
 └─ Dungeon_01_Boss(ボス戦BT発動)

Battle_01(シンボル戦闘用の共通バトルシーン)
 └─ 戦闘終了 → 前シーンへ戻る

実装順序(推奨)

  1. Stats:Hero Class、hp/mp/level/exp、Formula、Table、UI
  2. Player移動、Third Person Camera、フィールド探索
  3. Inventory:Item/Bag/Wealth UI
  4. 1人のNPCとDialogue、会話からQuest Activateを確認
  5. Quests:MainQuest_01のタスク階層とUI
  6. Melee:Sword Weapon、基本Skill、ダメージ算出確認
  7. Behavior:Slime BT、ボスBT
  8. シンボルエンカウント → Battleシーン遷移
  9. 勝敗処理、EXP/Gold/レベルアップ
  10. Merchant/宿屋/教会(リスポーン)
  11. Save & Load、Title/Options
  12. 演出(Transitions、カメラ、SE/BGM)、仕上げ

コツと落とし穴

  • Stat参照のID命名規約を最初に決める。タイポでFormulaが0扱いされて発見が遅れる
  • Formulaの循環依存:Statsは警告しないので、max_hp Formulaに hp を入れる等のループを作らない
  • Level Up検知level はFormulaで計算されるのでOn Stat Changeで拾える。手動で Change Stat しないほうが安全
  • RememberにJournalを入れ忘れるとクエスト進捗が消える
  • Battleシーン遷移時にPlayerのhp/mpを保持したい → Globalとして持つか、Transition時にLocal → Globalコピーを挟む
  • Behavior Graphはランタイム差替え不可:敵の種類ごとにGraphを分ける
  • Status EffectのMax Stack 1:ボスのEnragedなど二重付与を防ぐ
  • QuestのProperty Counter活用:「ポーション5個収集」をInventoryと自動連動できる
  • DialogueのGlobal Dynamic Valueでプレイヤー名を全会話に流し込む

応用アイデア

  • Perception導入で「敵がプレイヤーを発見して追いかけてくる」ステルス要素
  • Localizationで多言語対応
  • Shooterを部分導入して弓矢使いキャラを追加
  • コンパニオン:2体目のCharacterをNPCモードでFollowさせ、戦闘時はBehavior Tree自動実行

4. サバイバルクラフト(Inventory + Stats + Perception + Behavior + Melee)

ゲーム仕様

  • 視点:三人称(Fキーで一人称切替も可)
  • コアループ
    1. 昼:木・石・食料を採取
    2. 夜:敵(ゾンビ等)が襲ってくる。拠点で迎撃
    3. クラフト:素材を組み合わせて道具・武器・建材
    4. 建築:自由配置できる壁・ドア・ベッド
    5. 生存ステータス:HP/Hunger/Thirst/Stamina を管理

使うモジュール

モジュール用途
Core基本、Variables、Save & Load
Inventory資源・道具・建材・クラフト(Tinker)
Stats生存ステータス、Status Effect
Melee斧・石ピッケル・棍棒などの近接武器
Shooter(任意)弓矢や投石
Perception敵からの視覚/聴覚検知
BehaviorゾンビAI
CamerasThird Person、一人称切替

プロジェクト初期セットアップ

  1. 上記モジュールをPackage Managerからインストール
  2. Game Creator > Install...:Inventory(Items、UI、Examples)、Stats(Classes、UI)、Perception(UI、Examples)、Behavior(Examples)
  3. シーン World_01:広大なPlaneにプロシージャル風の地形/木/岩/水辺を配置
  4. Player作成、Third Person Camera、Locomotion Speed 4、Sprint State 6

Stats(生存ステータス)

Attribute

AttributeMax説明
hpmax_hp体力
staminamax_stamina走り/採取で消費
hungermax_hunger空腹ゲージ。0でHP減少
thirstmax_thirst喉の渇き。0でStamina回復停止
tempmax_temp体温。夜に下がる、焚き火で回復

Statmax_hpmax_stamina(100固定)、max_hungermax_thirst(100)、max_temp(100、既定50)、harvest_power(採取効率)、craft_speed(クラフト速度)

時間経過での減少(Master Trigger On Interval(10s)):hunger -1thirst -1.5、夜(time_of_day > 0.8)は temp -2

Status Effect

  • Bleeding:Duration 30s、While Activeで hp -1/s
  • Poisoned:Duration 60s、While Activeで hp -0.5/s、Save ON
  • Overeaten:Duration 20s、Stat Modifierで stamina recovery 50%低下
  • Warm:焚き火近くで付与、Duration 10s、On Endで再付与(近接中)

低ステータスの影響hunger <= 0 で Status Effect Starving を常時付与(hp -1/s)。thirst <= 0 で stamina回復停止。

Inventory(資源/道具/建材)

分類Item(継承の親):Resource、Tool(Is Equipable)、BuildingPart、Food(Is Usable)、Ammo_Arrow

具体Itemの例

Item効果
WoodResource建材・クラフト素材
StoneResource石器素材
FiberResource紐・弦
BerryFoodOn Use:hunger +15
WaterBottleFoodOn Use:thirst +30
StoneAxeTool装備時 harvest_power +5
WoodenBowTool(Shooter)
ArrowAmmo弓の弾薬
WallBuildingPart建築配置用

Bag:PlayerにBag(List、Max Weight 50kg)。Equipmentアセットに「メイン手」「オフハンド」「頭/胴/足」スロットを設定します。

採取システム

リソースオブジェクト(木・岩・ベリー茂み・水源)にTrigger(On Interact)+ Hotspot + Stats(耐久)を設定します:

Branch 1(条件:Player が StoneAxeを装備中 かつ Self.hp > 0):

Play Gesture(ChopAnim)
Wait Seconds(0.5)
Change Attribute(Self.hp, -10)
Play Sound Effect(ChopSE)
Change Attribute(Player.stamina, -2)

Branch 2(条件:Self.hp <= 0):

Set Active(Self, false)
Add Item(Wood, 3) to Player.Bag
Emit Signal("tree_chopped")

採取動作キャンセル:PlayerのBusyシステム(Arm Rightを Busy化)で他アクションと競合しないようにします。

クラフト(Tinker)

各完成品Itemの Crafting セクションでレシピを定義:

  • Wooden Bow:Wood ×3、Fiber ×2
  • Stone Axe:Wood ×2、Stone ×3、Fiber ×1
  • Wall:Wood ×4

Tinker UI:Workbench(作業台)のOn Interact → Open Tinker UI。Filter ItemでTool親型(Tool専用工房)やBuildingPart(建築台)を分けます。

クラフト成功On Craft イベントでクラフトSE、Stamina微減、経験値加算。craft_speed Statでクラフト時間を短縮します。

建築システム

  1. Player手元に「ホログラムPrefab」を生成して位置・回転を操作
  2. マウスホイールで回転(Change Rotation
  3. クリックで確定 → Destroyホログラム、Instantiate本物
  4. Remove Item(Wall x4) で素材消費

有効/無効判定:Physics系Condition(Raycast 3D等)で他オブジェクトと重ならないか、地面接地を判定します。

建築物の耐久とセーブ:各建築Prefabに Stats(hp)付き、Rememberコンポーネントで位置・回転・耐久をセーブします。

時間サイクルと敵出現

  • Global Name Variables:time_of_day(0〜1)、day_count
  • Master Trigger On Interval(1s)time_of_day += 1/1200(=20分で1日)
  • 1.0超えたら day_count += 1time_of_day = 0
  • 環境光の輝度(Change Global Luminance)とスカイボックスMaterialをフェード
  • time_of_day > 0.8 && time_of_day < 1.0 のとき Spawn Zombie をOn Interval(15s)で実行。Spawn位置はPlayerから30〜50m離れた地点

敵AI(Behavior Tree)

Zombie基本:Character + Perception(Sight + Hearing)+ Traits + Processor

Entry
└── Selector
    ├── Sequence (Awareness >= Aware)
    │   ├── Move To Player
    │   └── Play Melee Skill(BiteAttack, if range < 1.5)
    ├── Sequence (Awareness >= Suspicious)
    │   └── Move To LastKnownPosition
    └── Task: Wander

複数ゾンビ連携Relay Awareness Knowledge で群れがPlayer発見を共有します。到達したZombieの On Die で別TriggerがEXP加算します。

犬(プレイヤーペット):友好Character。Follow Player。Perceptionで敵を検知したら Add Target Candidate でPlayerの候補に追加します。

戦闘

Melee:StoneAxe/Wooden ClubのWeaponアセット。Skill:軽攻撃(Swing)/重攻撃(Chop)。Strikerは手元の斧頭にCapsule Striker。Reaction:Hit(小)/Stagger(大)/Knockdown。

Shooter(弓):Wooden Bow Weapon、Fire Mode = Charge(Min 0.3s、Max 1.5s)。Projectile = Kinematic、Wind Influence 0.5。Ammo = Arrow(Inventory Item連動)。

UI

  • HUDに Attribute UI:hp/stamina/hunger/thirst/temp
  • hunger < 20 ならStatus Effect List UIに「空腹」アイコン
  • Attribute UIのStall Transitionで減衰バー演出

セーブ&ロード

  • Bed(ベッドPrefab)Trigger On Interact:昼なら「夜まで眠るか?」 → 選択で time_of_day = 0.85。夜なら翌朝までスキップ。Save Game自動実行
  • Player Remember:Bag/Traits/Transform/Status EffectsをMemoryに追加
  • Global Variables(time_of_day/day_count)もSave

シーン構成

  • Title:New Game/Continue
  • World_01:本体(地形・NPC拠点・リソース・敵スポナー)
  • 死亡時:Respawn シーンへTransition → World_01再読込(ベッド位置)

Questでチュートリアル(任意)

Quest Survival BasicsのTasks:木を5本切る → Stone Axeをクラフト → Shelterを建築 → 夜を1回耐える。Property CounterでBag所持数/建築物の数にリンクします。

実装順序(推奨)

  1. Player、Third Person Camera、基本移動
  2. Stats(hp/stamina/hunger/thirst)とHUD UI
  3. Intervalで Hunger/Thirst減少、閾値Status Effect
  4. Inventory:Bag/Wood/Stoneの採取(Triggerでのリソース破壊+Add Item)
  5. クラフト:Wall/Stone AxeのレシピとTinker UI
  6. 建築システム(ホログラム+確定/素材消費)
  7. 時間サイクル(Change Global Luminance)と夜判定
  8. ゾンビSpawn、Behavior Tree最小版、Melee戦闘
  9. Food Item(Berry食す、WaterBottle飲む)
  10. Bedでのセーブ&時間スキップ
  11. Perception、敵連携、犬コンパニオン
  12. 弓(Shooter)とクラフトレシピ
  13. Questチュートリアル
  14. 演出、SE、BGM、仕上げ

コツと落とし穴

  • Weight制限のUX:OverloadedのTrigger On Add で現状重量をHUDにリアルタイム表示しないとプレイヤーが困惑
  • リソースの再生成:木が復活してほしいなら On Interval(300s)Set Active(true) で復活
  • 建築の衝突判定:Overlap 3Dで他建築とPlayer/敵のプレースメント除外
  • Zombieの大量発生:フレームレート対策でPerceptionのUpdateをIntervalに
  • ステータス補正の順序:Stat Modifierは% → 固定値の順。装備でattack +20%と+5を掛けるときに把握
  • Status EffectのSave:効果の残り時間を保ちたいときはSave ON、起きた時点でリセットしたければOFF
  • Temperature:焚き火の近接をHotspot Radiusで検知し、中にいる間だけWarmを更新。外れたらForget Delay経由で解除
  • Craft中のキャンセル:Tinker UI Open中に襲撃された時はUIを強制Close
  • 夜間スポーン範囲:地面判定、プレイヤー視界外を確認
  • Horror色を強めるなら:PerceptionのHearing/Smellを足音・血臭に活用、Dynamic Dinで雷雨演出

応用アイデア

  • LocalizationでUI/アイテム名を多言語化
  • Quests拡張:バイオーム別ボスをメインクエストに
  • Stats Formulaに温度要素を入れて「凍傷でdef低下」
  • PerceptionのEvidence:プレイヤーが塞いだドアが破壊されたことをゾンビが認知して迂回する

5. Apex風FPS(Shooter + Stats + Inventory + Perception + Behavior)

ゲーム仕様

  • 視点:一人称(First Person Shot、IKでアイアンサイト精密)
  • 操作:WASD移動/スプリント/スライディング/ジャンプ/リーン/リロード/Quick Reload
  • HP構造:Shield(100、再生なし、バッテリーで回復)+ HP(100、薬で回復)
  • 武器:Primary/Secondary 2本同時装備、スイッチ切替
  • アビリティ:Tactical(クールダウン付き)、Ultimate(ゲージ制)
  • AI敵:Behavior Treeで遮蔽移動+射撃

使うモジュール

モジュール用途
Core基本、Variables、Save & Load(設定のみ)
Shooter武器・弾薬・リロード・サイト・リコイル
StatsHP/Shield/Ammo Pool/アビリティクールダウン
Inventory装備スロット・弾薬・回復アイテム
CamerasFirst Person Shot
Perception敵の視覚・聴覚(足音・銃声)
Behavior敵AI(Behavior Tree)

プロジェクト初期セットアップ

  1. 対象モジュールすべてをPackage Managerからインストール
  2. Game Creator > Install...:Shooter(Examples、Weapons)、Stats(Classes、UI)、Inventory(Items、UI)、Perception(UI、Examples)
  3. シーン Arena_01:狭めの屋内/屋外複合マップ、コライダー完備
  4. Player作成 → Driver = Character Controller、Speed 6、Sprint State 9
  5. Camera Shot = First Person、Optics = Head Bone、Head Bobbing/Leaning ON

Stats(HP/Shield/アビリティ)

Attribute

AttributeMax説明
hpmax_hp(100)本体HP
shieldmax_shield(100)回復式シールド
ult_chargemax_ult(100)アルティメートゲージ

Statmax_hpmax_shieldmax_ulttactical_cd(残秒)、move_speed_mod

ダメージ処理Formula

max[ 1, source.var[weapon_damage] - target.stat[def] ]

被弾時はShield → HPの順に削る設計です。被弾Trigger(On Shoot Hit)で shield > 0 ならshieldから減算し、オーバーフローはhpに流します。

回復

  • Shield Battery:On Useで Busy化 + Play Gesture + 3s後 shield +50
  • Syringe:5s後 hp +25
  • Phoenix Kit:両方100回復(長い詠唱)

Status EffectKnockdown(HP 0で発動、Move Speed 1、射撃不可。final_hpが0で死亡)

Inventory構成

EquipmentのSlot:Primary、Secondary、Helmet(Shield Modifier +20)、BodyArmor(+40/+60/+80)、Consumable_1/2/3(ホットバー)

弾薬Item:LightAmmo、HeavyAmmo、ShotgunShell、SniperAmmo(Stacking可、重量あり)

武器Item:Inventory の Itemとして登録(Prefab付き)。On EquipのInstructionsで Equip Shooter Weapon を呼びShooter側を装備します。

Shooter:武器セットアップ

共通構成:ID一意、Fire AnimationはHuman IK+手続きRecoil、Sight = Camera Center with Raycast、Biomechanics = Human IK(Scope Through ON)

武器例

武器IDFire ModeProjectileAmmoMagazineSpread
R-301assault_rifleFull AutoRaycastLightAmmo30
Voltsmg_voltFull AutoRaycastLightAmmo24
EVA-8shotgun_eva8Single(Pellets=8)RaycastShotgunShell6
Longbowsniper_longbowSingleRaycastSniperAmmo60
Wingmanpistol_wingmanSingleRaycastHeavyAmmo6

Recoil:R-301はX=0.2°/Y=1.2°、Recover 2/s。Longbowは X=0.1°/Y=2.5°、Recover 1/s

Sight:IronSight(既定)、HoloSight、1xScope〜4xScope。Scroll Wheelで Set Sight ID 切替。ADS時FOV 90→60

Ammo Pool:Ammoアセットの Value = InventoryのItem所持数。リロードするとマガジンに、所持数から引かれます。

ReloadアセットReload_AR(アニメ2s、Magazine Track、Quick-Reload Track 0.5s枠)

入力マッピング

キー動作
WASD移動
Shiftスプリント
SpaceJump
Ctrlスライディング/しゃがみ
QTactical ability
ZUltimate ability
EInteract
RReload Weapon
左ClickPull Fire Trigger / Release Fire Trigger
右ClickSet Sight ID(ADS)
1 / 2Primary / Secondary切替
3/4/5Consumable使用
V武器切替(Swap)
Tabインベントリ

アビリティ実装

Tactical:スモーク

  • 使用時:前方にSmoke Prefab Instantiate、Emit Noise、数秒後Destroy
  • Cooldown:tactical_cd = 20、Intervalで減らす

Ultimate:AoE攻撃

  • ult_charge >= max_ult の時のみ発動可
  • Charge消費 → Play Gesture → 着弾地点にOverlap Sphere → 命中Characterに hp -50 → Shake Camera Burst

ult_chargeの貯め方:キル(On Die)+20、ヒット(On Hit)+1、時間経過(On Interval(10s))+2

カメラ

  • FPS Shot:First Person Shot、Target = Player、Bone = Head、Head Bobbing(歩行で小、スプリントで大)
  • Hit Marker:命中時 On Hit で画面中央のUIアイコンを0.2sフラッシュ
  • 被弾方向インジケータ:PlayerのOn Shoot Hitで攻撃者方向から赤いアーク表示
  • ノックダウン時:Camera Shotを切替(下向き、Shake少)

敵AI(Behavior Tree)

Enemy Character:Traits(Class: Soldier)+ Perception(Sight + Hearing)+ Processor

Entry
└── Selector
    ├── Sequence (HP < 30%)
    │   ├── Move To NearestCover
    │   └── Task: Use Heal Item
    ├── Sequence (Can See Player)
    │   ├── Task: Face Player
    │   ├── Task: Pull Fire Trigger (Interval 0.2s) until magazine empty
    │   └── Task: Reload Weapon
    ├── Sequence (Heard Noise)
    │   └── Move To LastKnownPosition
    └── Task: Patrol Waypoints

Perception設定:Sight Primary cone 60°/25m、Peripheral +30°/+5m、Use Luminance ON。Hearing Min 0.1 / Max 1.0、Decay 2s。Playerの射撃はOn Shootで Emit Noise(Intensity 0.9, Radius 40, Tag "gunshot")

チーム連携:1人がAwareになったら Relay Awareness Knowledge で近傍敵に伝播

UI構成

  • HUD:HP・Shieldバー(Attribute UI)、武器アイコン+弾薬(Ammo UI)、Tactical・Ultimateアイコンとクールダウン、Crosshair UI、Mini-Map
  • インベントリ:Bag UI、Equipment UI、Wealth UI
  • ダメージ表示:命中時に数字をInstantiateで表示(Floating Text)
  • Kill Feed:Signal kill_event を受けて更新

マッチ進行

変数用途
killsNumberキル数
deathsNumber死亡数
match_timeNumber残秒
match_stateStringwarmup / active / end

フロー

  1. Warmup:カメラがマップ俯瞰をAnimation Shotで流す、カウントダウン5s
  2. Active:Player操作開始、On Interval(1s)match_time -= 1
  3. match_time == 0:終了。Transition to Scene(Result) で集計画面

セーブ(設定のみ)

  • マッチ進行自体はセッションのみ(スロット不要)
  • 感度/キーバインド/FOV等はスロット0(共有設定)で保存
  • IsShared = true のGlobal Variablesを作成し、OptionsUIのApplyで Save Game(0)

シーン構成

Title
 ├── Play → Arena_01 へ Transition
 ├── Training → Rangeシーン(的+Merchant)
 ├── Options → 設定編集 → Save(slot=0)
 └── Quit
Arena_01
 ├── Warmup → Active → End
 └── End → Result → Titleへ戻る
Range
 └── 練習用、Merchant、弾薬無限オプション

実装順序(推奨)

  1. Player(First Person Camera)・移動・Sprint・Jump・Lean
  2. Shooter:1武器(R-301)を装備して射撃・リロード・Recoil
  3. Stats(HP/Shield)と被弾処理(Shield → HP)
  4. Ammo PoolのInventory連動
  5. Sight切替(IronSight / 2xScope)
  6. 2本目の武器(Wingman)とSwap
  7. 回復アイテム(Shield Battery/Syringe)
  8. Tactical/Ultimate(クールダウン+ゲージ)
  9. 敵Character + Perception + Behavior Tree(最小)
  10. Hit Marker/被弾方向/ダメージ数字
  11. マッチタイマー・勝敗集計・Transition
  12. Options/設定のセーブ、キー再マップ
  13. サウンド・Muzzle Flash・Shell排出・Killfeed
  14. 最終バランス調整、パフォーマンスチューニング

コツと落とし穴

  • SightのHuman IKはFPS必須。第三者視点混在ならSightを切替
  • Fire RateとFire Audioのループ処理:Full AutoはLoad Loopを使い、Loop停止の徹底を
  • Recoilパターン:Weapon の Recoil X/Y値は固定。ランダム性はAccuracy KickとSpread Biasで揺らぎを表現
  • Projectile = Raycast:最も性能が良いが、弾速を見せたければLine Rendererで擬似化
  • ShieldとHPの分離:同じAttributeにしないのが肝心。UI表示も別バーに
  • ノックダウン:hp <= 0で即死ではなくKnockdown Status Effectに移行させるとチーム戦要素を入れやすい
  • Ammo Poolの同期:Magazine Sizeとは別に、Ammo Itemの所持量と矛盾しないか確認
  • 敵PerceptionのLuminance:暗所で発見しにくくするならUse Luminance ON、Dim Threshold 0.2推奨
  • 敵のRelay:連動が速すぎると理不尽。遅延0.5sを挟むと自然
  • カメラ酔い:Head Bobbing強すぎに注意。Intensityを小さく、ADS時は一旦OFFに
  • 60 FPS維持:敵PerceptionのUpdateをIntervalに、Spatial Hashで物理負荷を抑える
  • Quick Reload:グリーン枠を0.3〜0.4s、成功時のSEを明確に

応用アイデア

  • LocalizationでUI/武器名を多言語化
  • InventoryのSocketsでアタッチメント(スコープ/バレル/ストック)を武器に挿すシステム化
  • Behavior:GOAPでもっと賢いAI(Reload → Heal → Flankの自動計画)
  • Dialogueでキャンペーンモード(ミッション型)を追加
  • Questsで「10キル達成」「ヘッドショット5回」などデイリーミッション
  • Melee併用:近接武器(ハンマー)をMeleeモジュールで追加

公式リンク


まとめ

本記事では、Game Creator 2で「5つのジャンルのゲーム」を実装する手順を解説しました。

Core+Inventory+Dialogueの3モジュールだけで脱出ゲーム、Melee+Stats+Behaviorで格闘ゲーム、さらにQuests・Perception・Shooterを加えればRPG・サバイバル・FPSまで実現できます。

Game Creator 2はアセットベースの設計なので、各モジュールを段階的に追加していくことで、同じフレームワーク上でまったく異なるジャンルのゲームを構築できるのが最大の強みです。各レポートの実装順序に従い、最小構成から段階的に肉付けしていくアプローチを推奨します。

全記事一覧 ― Game Creator 2 完全ガイド シリーズ総合案内senkohome.com/gamecreator2-series-index/

それでは次の記事も閲覧いただけると幸いです。

📚 シリーズ:Game Creator 2 完全ガイド(16/16)