2.5D Platformer Rails for Unity

前に2.5Dプラットフォーマー向けのキャラクター制御について紹介しましたが,扱いづらい点もありました.

  • 動的に経路の追加・削除ができない
  • GC Allocがデカイ

これを直そうとしたら結局ほとんどを書き直すことになった. いい感じにコードを整理できてしまったので公開します.

Unity 2018.2.3f1で動いてます.

できること

  • 曲がった経路に沿った移動
  • 経路の分岐
  • 重力方向の変更
  • 経路に沿ってメッシュを変形

f:id:FriendSea:20181203181038g:plain

f:id:FriendSea:20181203205253g:plain

  • 動く足場
  • 他のキャラクターに乗った経路

f:id:FriendSea:20181203181334g:plain

  • 場所に応じた奥行きの切り替え

f:id:FriendSea:20181203181416g:plain

つかいかた

経路のことをレールと呼んでます. 下記の5つのMonoBehaviourがレールの定義に使えます.

  • InvolutePath
  • LineRail
  • LiftRail
  • GravityPointRail
  • ConveyorRail

これらのスクリプトがシーン内でアクティブなときに経路として機能します. また,RailBehaviourを継承すれば新しい挙動のレールを作れます.

キャラクターにはColliderとMoverOnRailsをアタッチします.MoverOnRailsのVelocityを弄ってやれば経路に沿って動きます. キャラクターは最も近いレールに沿って動くので,キャラクターがジャンプする場合はレールを上下方向に2つ配置してやれば分岐が表現できます.

f:id:FriendSea:20181203215002p:plain

緑色のGizmoがレールです.キャラクターじゃ上の足場にジャンプして飛び乗れば赤い経路に沿って,乗らなければ青い経路に沿って動く.

RailMeshコンポーネントは指定したレールに沿ってメッシュをたくさん並べて変形するものです.シーン開始時に生成したメッシュをMeshFilter(あればMeshColliderも)にセットします.

f:id:FriendSea:20181203215700p:plain

この例ではUnityビルトインのCubeをたくさん並べて足場にしています.

しくみ

この記事で紹介しています.

friendsea.hateblo.jp