定番のギミックを移植しました.
.次にやりたい候補が,
- キャラクターのアクションの実装
- キャラクターのパラメータの設定
あたりなのですが,ここでこれらを設定するにはGAS周りを勉強してそれに合った設計にすることが必要だと気づきます.またそもそも一部のアクションにはアニメーションがないのでそれも用意する必要があります.ここはキャラクターが含まれないものを優先して作っていくことにします.
と思ったら意外と種類がなくて,実はダメージ系のものはダメージの受け方が決まっていないと作れないので,動く床系しか無さそう.どこから手を付けるのがラクかというのもまた難しい.インターフェースを使えば相手は気にしなくてよいのですが,そのインタフェースが決まっていませんでした.既存のものを使う手もあるか・・・ぐぬぬ.
というわけで今回は自動で動く床と乗ったら動く床,そして自動ブランコの3つを移植していくことにしました.動く床はアンリアルクエストシリーズおなじみで主に横スクロールアクションの3からとってきていますが,TPSスタイルでも内容はそんなに変わりません.
まずは動く床から.動く床は最近はTimelineとSetRelativeLoacationの組み合わせをよく使っています.タイムライン自体は1にしてかけるVectorに移動距離をあてると汎用性が高くなるかなと思っています.
タイムラインは10秒ループで5秒折り返し,値は3軸とも1.0に設定します.
また,レベルデザインの時にわかりやすくするため,Arrowコンポネントを追加し移動する位置を可視化しています.Playrateも設定できるようにすると床の移動速度も調整できるので,だいぶ調整が楽です.
下の図のように移動位置に対して矢印が出るようになります.色を変えられるようにするとさらに調整しやすいかも.
続いて,上に乗った時だけ移動する床も追加します.これは床の上にBoxコリジョンを置けばOKです.ミスってルートいかに配置して床とBoxが並列関係になってしまうと移動したときにキャラクターがコリジョンを抜けて途中で止まるようになってしまいます.(1敗)
タイムラインへの入力をキャラクターが入ったり出たりするときに繋ぎ変えれば完了です.厳密にはこれだと複数人が入ったり出たりするときにおかしくなるのですが,ひとまずはこの実装で良しとします.複数人に対応させるためには配列なども活用する必要がありそうです.
タイムラインは人が降りたときに戻ってほしいのでループは切,片道分のみに変更しました.
ブランコも作ります.ブランコは軸を中心に回転させることで作れます.こちらもArrowコンポネントで可動域を表示できるようにしています.
最大回転角と,何秒で1往復するかを設定できるようにして,例によってConstructionScriptとTimelineで調整可能にしました.
回転角についてはArrowの向きと振り子の初期状態がちょうど90度ズレているので,ズレの分の角度を補正する必要がありました.
揺れについては三角関数を使いました.
数式的には (回転角)=(最大角)sin(2π*t/T)でSin関数が0→1→0→-1→0の周期関数であることを使っています.
というわけで,簡単なレベルデザインができる移動系のギミックを移植することができました.振り子のArrowはもともとはついていなかったのでそこは進歩といえるかもしれません.乗ると動く床については今回2人で乗る可能性があるのであとで調整が必要かもしれませんが,NavigationVolumeやAI周りの調整も必要そうなので,この段階では仕様が定まらなさそうでした.
そういえば,リビジョンコントロールしてなかったので登録しておきました.なんだかんだ使い慣れているGit管理にしましたが,別のでもよかったかも・・・?今回は複雑になりそうなので,安全なところまで戻る保険としての運用がメインになりそうです.
コメント