TopDownEngine
Unity の重量級フレームワーク、TopDownEngineのドキュメントメモ
Corgi Engineで有名な所の作った見下ろし視点向けフレームワーク
リンク集
アセットストア
開発元
拡張機能リポジトリ
リリースノート
APIドキュメント
動画チュートリアル
ドキュメント
https://topdown-engine-docs.moremountains.com/index.html
目次
概要
導入
インストール方法
資産の内容
シーンの最小要件
良くある質問
レシピ
エージェント(キャラクターに関して)
キャラクターを作成するには?
シーンにキャラクターを追加する
キャラクタークラス
キャラクターの能力
体力とダメージ
アニメーション
高度なAI
兵器
在庫(インベントリ)
一般的な
自分だけのゲームを作る
入力
シーン
マネージャー
衝突
リスポーン
戦利品
マルチプレイヤー
客室(ルームシステム)
移動プラットフォーム
フィードバック
インターフェース
イベント
実績
カメラ
鍵、ドア、チェスト
保存と読み込み
ーーー
概要
導入
https://topdown-engine-docs.moremountains.com/index.html
インストール方法
https://topdown-engine-docs.moremountains.com/install.html
KoalaとGrasslandsのデモで2DExtraとTilemapを使用しているため、無ければ必要になる
資産の内容
https://topdown-engine-docs.moremountains.com/contents-of-the-asset.html
基本的にはTopDownEngineの内容物は編集しない方が望ましい
Common
一般的な物、特にUIに関する物が入っている
Demos
各種デモ
ThirdParty
TopDownEngine直接固有ではないスクリプト群(ストアで切り出されて配布されてたりするもの
InventoryEngine:インベントリ機能
MMFeedback:エフェクト機能
MMInterface:UI作成機能
MMtools:おやくだち機能集。なんかいっぱい機能がある・・・
MMBezierLineRenderer
MMControls
MMDebugMenu
MMFollowTarget
MMGhostCamera
MMGizmos
MMObservable
MMPrototypeTextures
MMRadio
MMSceneLoading
MMTween
シーンの最小要件
GameManagerコンポーネント
SoundManagerコンポーネント
LevelManagerコンポーネント
TimeManagerコンポーネント
カメラ
レベル(ステージの事)
良くある質問
https://topdown-engine-docs.moremountains.com/faq.html
レシピ
色々な物の作り方の紹介
重要そうな物をいくつかピックアップ
基本的な2Dプレイ可能なキャラクターの作成
基本的な2.5Dプレイアブルキャラクターの作成(ペーパーマリオ風)
基本的な3Dプレイ可能なキャラクターの作成
シンプルな近接武器の作成
チェックポイントの設定
シンプルな発射武器とその発射物の作成
鍵が必要なドアを作る
タッチ時のダメージを設定する
プレイヤーを追いかけて攻撃する敵を作成する
新しい読み込み画面を作成する
新しいレベルをロードするためのポータルを設定するにはどうすればいいですか?
エージェント
ゲームに登場するキャラクターに関する情報
キャラクターを作成するには?
基本的な2Dプレイ可能なキャラクターの作成
空のゲームオブジェクトを作成し、「Test」と名付ける
スプライトオブジェクトを作成し、「Model」と名づけ「Test」の子にする
「Test」にCharacterコンポーネントを追加し、AutoBuild Player Character 2Dを押す
「Model」をCharacterModelスロットに登録する
CharacterOrientation2Dコンポーネントで、向きモードをMovementDirectionに設定し、Model Should Flipを有効化する
コアラのプレハブを開き、足跡ノードをコピー。「Test」の子にする
エージェントに関する重要なコンポーネント
Characterコンポーネント:関連クラスをリンクするハブになる。このエージェントが、プレイヤーかAIかを定義したりする
CharacterMovement:移動速度や移動方向の制限(4方向にしか動けないなど)が設定できる。また、これが無いと入力を受け付けない
TopDownControllerコンポーネント:衝突検出、重力の設定、現在速度の保存など、移動に関する情報を保持する
プレハブのツリー構造について
ルートオブジェクトにロジック系を、直下の子オブジェクトにビジュアルを配置するのを推奨
Characterコンポーネントにビジュアル担当のオブジェクトを登録する
最小構成のキャラクターを手作りする場合
ルートのオブジェクトを作成し、子に外見のオブジェクトを作成する。
プレイヤーの場合は、ルートのタグをPlayerに設定する(そうでない場合は任意で良い
ルートに各種コンポーネントを設定する。
2Dの場合 Box Collider 2D, RigidBody 2D, TopDownController 2D, Character
3Dの場合 Cupsule Collider, RigidBody, TopDownController 3D, CharacterController, Character
必要に応じて各種Abillities, Health等を設定する
例えば、キー入力に応じて動かすにはCharacterMovementなど
シーンにキャラクターを追加する
プレイヤーの追加
プレイヤーに関する情報はLevelManagerが司っている。
LevelManager.PlayerPrefabsに操作可能キャラのプレハブを登録する事で、プレイヤーを設定できる
プレハブではなくシーン上のキャラクタを設定したい場合は、LevelManager.SceneCharacterに登録する
その他のキャラクター
シーンに置くだけで良い
マルチプレイヤー
省略
スクリプト経由でのプレイヤーへのアクセス
code:sample
LevelManager.Instance.Players0;
// ex) sets the main character's max Health to 50
LevelManager.Instance.Players0.gameObject.MMGetComponentNoAlloc<Health>().MaximumHealth = 50;
キャラクタークラス
2D特有のコンポーネント
Rigidbody2D:設定値をDynamic, Continuous Collision Detection, Start Awake, Interpolateにする
Gravity Scaleも0にしておかないとゆっくり落ちる
BoxCollider2D:非トリガー。範囲は、キャラクターの頭を出すよう、体だけにすると体験が良くなっておすすめ
SortingGroup:ProjectSettings->Graphics->Transparency Sort Mode / Axisの設定により、描画順がY座標依存になっている。このためルートにSortingGroupを設定する事で理想的なソート順になる
3D特有のコンポーネント
Rigidbody
Character Controller
TopDownControllerコンポーネント
RigidBodyを駆動するラッパー
設計上、3Dでルートモーションが利用できない
設定できるのは重力に関する事と、壁や穴、障害物と扱うレイヤーマスクの定義など
Characterコンポーネント
キャラクタの各コンポーネントへアクセスするためのハブになる
プレイヤーキャラクタの場合、特にPlayerIDが重要で、InputManagerからの入力を受け取るキーとして扱われる
特に、Character AnimatorとModelに外見オブジェクトの登録を忘れないように
Healthコンポーネント
ダメージ、ヘルスの増減、死(および再生)を司る
Character Abillites
各キャラクターが、何が出来るのかを司るコンポーネント群
キャラクターの能力
キャラクターに出来る事を定義する
プレイヤーに出来る事の開発はアビリティの開発と同意と捉えて差し支えない
table:標準で用意されている物
CharacterButtonActivation ゲーム内に配置されているボタン等にアクセスできる
CharacterConeOfVision キャラクターの周囲に視野の円錐を投影する。ターゲット検出や装飾に
CharacterCrouch しゃがみができる
CharacterDash2D/3D ダッシュできる
CharacterDamageDash2D/3D 攻撃判定のあるダッシュを行う。既存機能の拡張のサンプル
CharacterDirectionMarker キャラクターの進行方向/回転方向にオブジェクトを沿わせる。向きのマーカー表示用
CharacterFallDownHoles2D 穴レイヤーマスクによって定義された「穴」にキャラクターを落とす
CharacterGridMovement グリッド単位での移動になる
CharacterHandleWeapon 武器を装備して使用できるようになる
CharacterSecondaryWeapon 二つ目の武器装備スロット
CharacterInventory インベントリから武器の装備が出来るようになる
CharacterJump2D/3D キャラクターがジャンプできるようになる。色々設定が必要?
CharacterMovement WASDで移動できる
CharacterOrientation2D/3D Y軸回転やフリップでキャラクターを移動方向に向ける
CharacterPathfinder3D 3D向け。navmeshを利用できる
CharacterPathfindToMouse 3D向け。マウスクリックした所へ移動する。Loft3DのLoftSuspendersMouseDrivenプレハブ参照
CharacterPause ESCでポーズ出来る
CharacterPersistence 新しいシーンに移動する時、キャラクターの状態を維持する
CharacterPush3D 3D向け。RigidBodyを押せるようになる
CharacterRagdollOnDeath 3D向け。死んだときにラグドールになる
CharacterRotateCamera M, Lキーでカメラを回転出来る
CharacterRotate2D 移動方向に応じてModelが回転する。NovaDriftみたいな動き
CharacterRun 左Shiftで走れる
CharacterStun スタンできる(される)ようになる
CharacterSurfaceSounds 地形毎に足音を変える
CharacterSwap プレイヤーキャラクタを切り替える。Minimal2DCharacterSwapデモ参照
CharacterSwitchModel Model(外見GameObject)を切り替える
CharacterTimeControl Kキーでスロー
CharacterAbilityNodeSwap アビリティをまとめたGameObjectを切り替える
能力(Ability)クラスの概要
全てのAbilityはCharacterAbilityを継承して作る
table:主なオーバーライドメソッド
Initialization 各コンポーネント取得など
InitializeAnimatorParameters アニメーションパラメタの初期化
UpdateAnimator アニメーションパラメタの更新
HandleInput パッドからの入力受付
EalyProcess / Process / LateProcess Update毎にステートマシンから呼び出される
Reset キャラクターが死亡した時に呼び出される。カウンタのリセットなどに使う
Play Sfx / Stop Sfx サウンドのトリガーに使用する。
各アビリティコンポーネントは、基本的にはキャラクターのルートに設定する。また、AdditionalAbillityNodesに登録したオブジェクトにも、コンポーネントを設定できる
ステートマシン
Characterコンポーネントは、配下の各アビリティを実行する責任を持つ。これはステートマシンによって行われており、現在の状態から実行するアビリティを決定する。
先ずシーンの開始時に全てのアビリティを初期化する
その後、フレーム毎にEalyProcess/Process/LateProcessを実行し、最終的にDeathでこれらをリセットする
機能制限
例えば、空中に居る時はジャンプが出来ないなど、各Abillityは実行制限を設けられる。
実行制限はプログラムで設定するほか、インスペクタからも設定できる
能力の作成
独自のAbillityを作成する時は、CharacterAbillityを拡張する。
アビリティのために新しい状態が必要な場合は、CharacterStates.csを書き換える
アビリティ拡張のサンプル
体力とダメージ
ヘルスコンポーネント
任意のオブジェクトに対して、ダメージを受ける、破壊される機能を取り付ける
table:主なインスペクタ
Binding 死亡時に一緒に無効化するオプションのモデル
Status 現在の状態と、ダメージを受け得るかを示すフラグ
Health 初期化された時の現在体力と最大体力
Damage ダメージに対する反応、耐性、フィードバックの定義
Knockback ノックバックに対する耐性と力の乗数(0.5でノックバックしづらくなる
Death 死亡時に起きる事の制御、実際に破壊されるまでの遅延など
Shared Health and Damage Resistance マスターヘルスの設定。部位ダメージの実装などに使う
Animator パラメータを更新するアニメータを設定する(?)
DamageOnTouchコンポーネント
接触時にヘルスコンポーネントにダメージを与えるコンポーネント
table:主なインスペクタ
Targets ダメージを与えるレイヤーマスクを選択する
DamageCaused 与ダメ数値、ダメージタイプ、ノックバック強度など、与えるダメージ側の設定
DamageTaken ダメージを与えた時、自身が受けるダメージの設定。自傷攻撃など
Feedback ダメージを与える物、与えられない物、何か・・・に当たった時に再生するフィードバックの設定
ヘルスAPI
API経由でのダメージ操作は、HealthコンポーネントのAPI経由で行う
APIドキュメント参照
ヘルスバー
HPの参照はAPI経由で行えるので、自由に作成できる一方、エンジンに付属するMMHealthBar ヘルパーを使用することもできる。
このヘルスバーは、ユニットの頭の上に出てくるタイプのもの
設定サンプルのSortingLayerNameのAboveは、Charaより手前
HealthBarインスペクタから外観などを設定できる。Always VisibleをOFFにすれば、被ダメ時だけバーを表示したりできる
組み込みのヘルス操作コンポーネント
Stimpack:拾うと回復出来るシンプルなアイテム。Loft3Dのデモで確認できる
Health Auto Refill:HealthAutoRefillコンポーネントを追加すると、選択した設定にもどついて自動回復する
InventoryEngineHealth:インベントリに入る回復アイテムの例。KoalaDungeonで確認できる。
InventoryItemを継承してUse関数に使用した時に起きる処理を書いている
ダメージの種類
所謂攻撃属性。火、魔法、毒のサンプルがある
新規に作成する場合は ProjectタブでCreate>MoreMountain>TopDownEngine>DamageTypeを選択する
作成した攻撃属性はDamageOnTouchやDamageAPIのOthersなどで使用できる
ダメージ耐性
所謂防御属性。と言うか、攻撃属性自体にはマーカーとしての役割位しか無く、むしろこちらが本体
Healthコンポーネントの子オブジェクトにTargetDamageResistanceProcessorコンポーネントを設定し、Healthコンポーネントに登録する
毒については、継続ダメージを与えてる実態は弾の方(DamageOnTouch)にある。DamegeTypeは演出にのみ絡んでいる
選択可能なダメージ耐性
アイテムを拾ったらダメージ耐性を獲得する系のものは、PickableDamageResistanceを使用する。KoalaHealthにサンプルがある
アニメーション
TopDownEngineでは、アニメーションについてはパラメータの送信関係のみ実装している。その他のアニメーションは生のUnityを利用できる
アニメーションを設定するには"アニメーションコントローラ"が必要だが、TopDownEngineではセットアップ済みのものを流用して作るのが便利。Koalaを出発点とすることをおすすめ
とはいえ、"極めて単純"に作られているので、大規模なカスタマイズを推奨との事
スクリプトからのアニメーションパラメータ操作
Unityの組み込みメソッドを使っても良いし、TopDownEngineのAPIを使っても良い
通常は、アビリティクラスで作業することになる。
先頭で、アニメーションパラメータ毎に2つの変数(constなパラメタ名、パラメタ値)を宣言する
InitializeAnimatorParametersメソッド内でRegisterAnimatorParameterを呼びだし、初期値を設定する
UpdateAnimatorが毎フレーム呼び出されるので、この中で更新する
MMAnimatorExtensions.UpdateAnimatorBool()とかが使える
新しいアニメーションの追加
これに関してTopDownEngineは手を出していないので、Unityで行う
対応するパラメタも上記の方法でInitializeAnimatorParametersで初期化する
組み込みのアニメーションパラメータ
(新しいコントローラに)組み込みのパラメタを登録するのが面倒な場合は、CharacterAnimationParamerersInitializerコンポーネントを追加して、AddAnimationParametersボタンを押す。その後このコンポーネントを削除する
table:animation parameter
パラメタ名 Abilityクラス 型 概要
Alive Character bool 生きている間True(Healthの話ではない)
Grounded Character bool 地面に触れている間True
xSpeed Character float X方向の速度
ySpeed Character float Y方向の速度
zSpeed Character float Z方向の速度
RelativeForwardSpeed Character float 相対的な前方向の速度
RelativeLateralSpeed Character float 相対的な横方向の速度
RelativeForwardSpeedNormalized Character float 相対的な前方向の速度(正規化)
RelativeLateralSpeedNormalized Character float 相対的な横方向の速度(正規化)
Idle Character bool アイドル状態の時True
Random Character float 0f~1fの間頻繁に更新される乱数
RandomConstant Character int Object生成時に抽選する乱数。個性付けに利用する
HorizontalDirection CharacterOrientation2D float X軸における方向
VerticalDirection CharacterOrientation2D float Y軸における方向
FacingDirection2D CharacterOrientation2D float 現在の向き。0=West,1=North,2=East,3=South
FallingDownHole CharacterFallDownHoles2D bool キャラクターが穴に落ちている間True
RemappedForwaedSpeedNormalized CharacterOrientation3D float 0から最大走行速度までの間の前方向の速度
RemappedLateralSpeedNormalized CharacterOrientation3D float 0から最大走行速度までの間の横方向の速度
YRotationSpeed CharacterOrientation3D float モデルの瞬間回転速度(デルタ?)
YRotationOffset CharacterOrientation3D float 現在の角度と目標の角度の間のオフセット
Activating CharacterButtonActivation bool ボタンをアクティブにしている間True
Crouching CharacterCrouch bool しゃがんでる時True
Crawling CharacterCrouch bool 這っている時True
Damage Health trigger ダメージを受けた時起動
Death Health trigger 死亡した時起動
Dashing CharacterDash bool ダッシュ中True
DashStarted CharacterDash bool このフレームでダッシュ開始した場合True
DamageDashing CharacterDamageDash bool ダメージダッシュ中True
WeaponEquipped CharacterHandleWeapon bool 武器装備中True
WeaponEquippedID CharacterHandleWeapon int 装備した武器のID、未装備の時-1
Jumping CharacterJump bool ジャンプ中True
DoubleJumping CharacterJump bool ダブルジャンプ中True
HitTheGround CharacterJump bool このフレームで地面にぶつかった場合True
Speed CharacterMovement float 現在の水平速度
Walking CharacterMovement bool 歩いている間True
Running CharacterRun bool 走っている間True
Pushing CharacterPush3D bool 何かを押している間True
Stunned CharacterStun bool スタン状態の場合True
CharacterHandleWeapon には、さらに武器側のアニメーションを制御する各種パラメタが定義されている。
https://topdown-engine-docs.moremountains.com/animations.html#animation-parameters
流石に割愛。キャラ向けによく似ている
2Dの詳細