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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

2回答

9906閲覧

【Unity】NavMeshで目的地に移動できない場合にそれを判断する方法

Akagi.S.

総合スコア40

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

1グッド

0クリップ

投稿2015/12/14 16:39

編集2015/12/14 16:45

Unityもプログラムも勉強を始めて2ヶ月足らずの初心者です。
Unity 5.2.3.パーソナル版でゲームを作ろうとしています。

迷路のようなステージ上で、敵がPLを追いかけてくる、というものです。
NavMeshの機能を使い、複雑な迷路でもちゃんとPLを追ってくる敵を作ることができました。

敵の動きは主に以下の2つです。
・徘徊モード:フラフラとランダムに歩き回る。PLが視界に入ると追跡モードになる
・追跡モード:PLを追ってくる。一定時間PLが視界から見えない状態が続くと徘徊モードに戻る

そこで困ったことができたので質問させてください。
「PLは通ることができるが敵は通れない場所」があり、そこはNavMeshの移動できる範囲からも外れているのですが、
そこにPLが逃げ込むと敵が止まってしまうようになりました。

コードを見直すと、それは当然で、追跡モード時には「PLの座標を目指す」という命令になっています。
目指せないので止まってしまうというわけです。
しかし突然動かなくなる敵は不自然なので、PLの座標に行くことができない場合は
他の行動(徘徊モードに戻るなど)をさせたいと思うのですが
その方法がわからなく、質問させていただこうと思いました。

if(PLの座標に行けなければ)

みたいな条件分岐ができれば良いのですが…
良い解決方法がわかる方おられましたら、お知恵をお借りできれば助かります。
いろいろ初心者なので、分かりやすい言葉で教えていただけるとなお助かります。

paypay👍を押しています

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

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

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

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

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

guest

回答2

0

使った事ないですが、NavMeshAgentのhasPathはどうでしょうか?

エージェントが経路を持っているかどうか(読み取り専用)

エージェントが計算された経路を持っている場合は true、そうでない場合は false になります。

http://docs.unity3d.com/ja/current/ScriptReference/NavMeshAgent-hasPath.html

投稿2015/12/15 06:56

buibui80

総合スコア1033

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

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

Akagi.S.

2015/12/15 13:53

回答をありがとうございます。 説明を読むとそれっぽい気もするのですが… しかし、使い方が間違っているのかうまくいきませんでした。 if (hasPath == true) なら追いかける…というふうに組んでみましたが、PLを見つけた瞬間から ずっとelseの方の分岐にしか行きません(すぐ目の前にいても) 単に「NavMeshで追いかけることができる」=「計算された経路を持っている」では ないようです。
buibui80

2015/12/17 02:29

違いましたか。 リファレンスにそれらしいpathStatusやpathPendingもありますね。 http://docs.unity3d.com/ja/current/ScriptReference/NavMeshAgent.html 処理が重くなるかもしれませんが、NavMeshAgent.CalculatePathはどうでしょうか? > エージェントが目標値までにたどり着く道程を計算し、path 引数に格納します。 > パスが見つかった場合は true http://docs.unity3d.com/ja/current/ScriptReference/NavMeshAgent.CalculatePath.html
Akagi.S.

2015/12/21 16:46

ありがとうございます。 いろいろありますね! ここのところなかなか時間が取れないのですが、試してみます(また結果を書きます)
guest

0

※タイトルを間違えたので修正しました

投稿2015/12/14 16:41

編集2015/12/14 16:58
Akagi.S.

総合スコア40

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問