質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

10756閲覧

Unityで障害物をよけながら逃げる敵

natsume13

総合スコア11

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2017/05/01 15:51

現在Unityを使いPlayerが近づくと逃げる敵を作成しています。

現在ステージ上には、
◦NavMeshを持った敵
◦操作できるplayer
◦最短距離で進むことを遮る障害物
◦1つ1つ違うTagで、Triggerによる当たり判定を持ったチェックポイントが数個(空のオブジェクトによる見えずにすり抜ける当たり判定)
があります。

私は敵が逃げるような挙動をさせるために、巡回するNPCなどをヒントに
Playerが、あるチェックポイントに触れるたびに、それに対応するチェックポイント(playerから逃げれる方向にあるチェックポイント)
を目的地として毎回設定するようにしたところ、結果敵が障害物を避けながらpalyerから逃げるような挙動にすることができました。

しかしこれだと、ステージを大きくしたとき今以上に大量のチェックポイントが必要になると予想できます。
もちろんそのまま、工夫をせずにごり押しで作成することもできますが、できるのであればもう少しスマートに作成をしたいです。

もっと工夫された敵の作り方のアイデアはないでしょうか?

例えば、逃げるNPCに関して便利な関数がる、だとか、そもそもNavMeshをつかわなくてもこれを使えば障害物をよけながら逃げるNPCは作れるだとか。。。。。

ちなみに私が考えたのは、playerの位置を参照し反対の方向に進むというものでしたが障害物を避けることができず。。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

障害物を避けながら移動させるには、どうしてもベースとなる仕組みから実装しないとならないのですぐにはむずかしいと思います。

ちなみに現状の実装では、とあるチェックポイントを通ったときに、そのチェックポイントに登録されている「逃げるポイント」を参照して、逃げる場所を定義している感じでしょうか?

おそらく懸念されているのは、こうしたポイントが増えたときに、設定項目が爆発的に増えることですよね。

シンプルに考えるなら、プレイヤーと敵キャラの距離が一定範囲に近づいたら、逃げるようにプログラムすることかなと思います。
その際、問題になるのは「どこに逃げるか」ですが、この「どこに逃げるか」を小さく分解して考えてみてはどうでしょうか。

例えば、

  1. プレイヤーから一番遠いポイントを計算し、そこに逃げる
  2. プレイヤーの向いている方向から反対の方向に存在するポイントを優先的に選択する

という具合です。

こうしたことをプログラムの計算だけで実行しておけば、今後チェックポイントが増えたとしても、算出の計算時間はかかるものの、開発者自身の手でポイントを登録する必要がなくなります。

もちろん、より高度なAIを構築するのであれば上記だけではシンプルすぎてあまりおもしろくないかもしれませんが、結局のところ、この「算出するポイントがいかに人間らしいか」を突き詰めていけば高度なAIにります。

まずはシンプルに実装してみて、徐々に複雑なロジックを入れていくといいのではないかと思います。

投稿2017/05/02 02:58

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

natsume13

2017/05/02 14:02

>設定事項が爆発的に増える まさに言いたかったことです。 1、2はまだ力量不足なので、パッとコードは思いつきませんが試行錯誤をしながら検証していきたいと思います。 「人間らしいAI」というのは自分の頭の中になかったものだと感じました。 永遠に逃げ続けるのではなく、例えばチェックポイントをランダムで選びそこへ向かっていくという風にするとか、逃げるうえで最適な動きをしないのは、プレイする側にしてみれば予想できないので面白くなるポイントでもないかなと感じました。 新しいアイデアもいろいろ思いつきそうです。回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問