今回は、ゲームで道に迷った(哲学的な意味ではない)際の目安となる、目的地への道順を示す矢印の表示についてです。
ゲーム進行の矢印
2Dアクションゲームでも、3DRPGでも、目的地が何処にあるのか分からなくなると簡単にクソゲーなります。
ということで、出来る限りゲームをスムーズかつ簡単に体験して貰うために、道を示すというのは中々に悪くない選択肢です。多分。
まぁ、AAAなゲームではステージの配置やライティング、カットシーン等により「ユーザー自身の気づき」で移動先を見出すのが最もクールだと思いますが、ソレを見落として道に迷った末に止めたゲームを自分は何本か持っています。
矢印を示す方法は幾つかありますが、今回はプレイヤーの上に矢印を表示する方法について考えてみます。
方向を示す3つの方法
目的地までの移動先を示す方法ですが、ざっと考えて3つ思いつきました。
- ゴールの方向だけを見るするパターン
- 中間点の方向を示すパターン
- 経路を探索して方向を取得するパターン
実際にどんな内容か考えを詰めてみます。
ゴールに至る方向だけを示すパターン
まず思いついたのが、ゴールの方向を示すパターンです。
ルートに関わらず矢印だけを示すので、実は回り道するようなケースでは逆に惑わされる事もありますが、逆に考えれば「気付き」を与える機会でもあります。
凄くシンプルな表示ですが、無いよりは遥かに良いです。
実装は非常にシンプルです。とにかく、カーソルが対象を向けば良いのです。という事で、Lookatメソッドを使って強引に向けます。
中間点で方向を示すパターン
ゴールに至る方向だけを示すパターンでは、回り道のような道がある場合、道に迷うかもしれません。そこで、ゴールとスタートの間に中間点を設置し、中間点の位置へ向けて矢印を示すパターンを考えてみます。
中間点に近づいたら、次の中間点を示す感じで進むので、開発者敵に進む方向を提示しやすそうです。
これを少し応用してるのが、StandardAssetsのUtilityに含まれるWaypointシリーズかなと思います。あっちは目標点に向けて移動ですが。
経路を探索して方向を得るパターン
もう一つが、経路探索で最短経路を得るパターンです。経路探索で行うので、道順を間違えた場合でもルート再検索を行ってくれます。
但し、経路探索AIを動かすのでゲームによっては余計な負荷を生むかもしれません。また、Navmeshを設定できない所には移動出来ません。
これを行うには、幾つか設定する必要があります。
まずはNavmeshをベイクします。
次に、NavmeshAgentを用意します。基本的にNavmeshAgent自身に動させる事は無いので、streeting系のパラメータは全部0に設定しておきます。
後は経路探索で移動先を得て、向かうべき方向へ矢印を向けます。
NavmeshAgentは経路を更新してもらうために使っていいるので、移動や向きを変更する機能は使いません。よってupdateRotationやupdatePositionにfalseを設定して移動しないようにします。後、NavmeshAgentの基本位置を移動するため、nextPositionに常に現在地を流し込んでいます。
後はagent.steeringTargetで次の曲がり角の座標を取得し、ソコに向けて矢印を向けるだけです。