2.5D Platformer Rails for Unity
前に2.5Dプラットフォーマー向けのキャラクター制御について紹介しましたが,扱いづらい点もありました.
- 動的に経路の追加・削除ができない
- GC Allocがデカイ
これを直そうとしたら結局ほとんどを書き直すことになった. いい感じにコードを整理できてしまったので公開します.
Unity 2018.2.3f1で動いてます.
できること
- 曲がった経路に沿った移動
- 経路の分岐
- 重力方向の変更
- 経路に沿ってメッシュを変形
- 動く足場
- 他のキャラクターに乗った経路
- 場所に応じた奥行きの切り替え
つかいかた
経路のことをレールと呼んでます. 下記の5つのMonoBehaviourがレールの定義に使えます.
- InvolutePath
- LineRail
- LiftRail
- GravityPointRail
- ConveyorRail
これらのスクリプトがシーン内でアクティブなときに経路として機能します. また,RailBehaviourを継承すれば新しい挙動のレールを作れます.
キャラクターにはColliderとMoverOnRailsをアタッチします.MoverOnRailsのVelocityを弄ってやれば経路に沿って動きます. キャラクターは最も近いレールに沿って動くので,キャラクターがジャンプする場合はレールを上下方向に2つ配置してやれば分岐が表現できます.
緑色のGizmoがレールです.キャラクターじゃ上の足場にジャンプして飛び乗れば赤い経路に沿って,乗らなければ青い経路に沿って動く.
RailMeshコンポーネントは指定したレールに沿ってメッシュをたくさん並べて変形するものです.シーン開始時に生成したメッシュをMeshFilter(あればMeshColliderも)にセットします.
この例ではUnityビルトインのCubeをたくさん並べて足場にしています.
しくみ
この記事で紹介しています.