キャラクターの移動の実装 in Unity
今回の記事は上の動画シリーズの備忘録
まじで大事なyield returnとIEnumrator
フレームごとにだんだん遷移していくような処理はたいていIEnumratorで拡張しつつ書いていくと綺麗に実装できる
StartCoroutineとIEnumratorのウロボロス
StartCoroutine(PerformPlayerturn)
PerformPlayerTurnがStartCoroutine(PerformEnemyTurn)を呼び出す
PerformEnemyTurnがStartCoroutine(PerformPlayerTurn)を呼び出す
それぞれの処理の中には多くのyield return IEnumratorやyield return WaitForSeconds()が...
ゲームって非同期処理が要なのね。面白いなあ
簡単な動きのIEnumratorの実装例
IEnumrrator(Vec3 targetPos)
{
(必要があれば)isMovingをtrueにする
if(targetpos != transform.pos)
{
フレームごとの処理
yield return null
}
transform.pos = targetPos
(必要があれば)isMoving = false
yield return null
}
IsWalkable関数などで呼び出し元から移動可能かどうかを判定してから呼び出すのがわかりやすい。
ターンベースバトルの実装
ゲームのステートが定義されていることを前提とする。
まず、ステートを変更して初期化する関数を実装する
マネージャーオブジェクトはそれぞれのステートごとに分岐して別々の処理を行う。
それぞれのステートごとの処理は関数にわけて実装するとクリーンになる。
ScriptableObject
アセットとしてすぐ作れる機能が便利そう。詳しい使い方とか設計理念はしらん。