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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

2回答

5445閲覧

[Unity]NavMeshを用いて自動追尾する敵を作りたい

Futahei

総合スコア80

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2018/03/03 14:13

編集2018/03/05 03:26

前提・実現したいこと

Unityでプレイヤーを追ってくる敵を作成しようとNavMeshの機能を用いることにしました。ステージをstaticに設定し、Navigationウィンドウから適切なAgent Sizeを決めてからBakeしました。
Unity標準のCylinderにNavMeshAgentコンポーネントを追加して、Sizeを整えた後
以下のスクリプトを追加しました。

c#

1public class Enemy : MonoBehaviour { 2 public NavMeshAgent agent; 3 public GameObject target; 4 void Start () { 5 agent = GetComponent<NavMeshAgent>(); 6 } 7 8 void Update () { 9 agent.destination = target.transform.position; 10 } 11}

targetに、ステージに置いたGameObjectを設定してゲームを実行しましたがエラーメッセージがでてうまく動きません。

発生している問題・エラーメッセージ

"SetDestination" can only be called on an active agent that has been places on NavMesh

Update毎にエラーが発生してます。

試したこと

NavMeshを焼き直したり、AgentやTargetの位置を高くしたり低くしたりしました。
StageはNavigation Staticになっています。
Unityの再起動も行いました。

補足情報

Unity 2017.3.0f3(64bit)
ステージ外観
イメージ説明

###追記
単純に、経路探索がうまくいくまで待つ方法が分からないということではなく、いつまでも経路が発見されず、エージェントが動かないということです。
Navigation窓

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

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

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

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

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

guest

回答2

1

まずはエラー文をそのままググってみましょう。

Unityで *** can only be called on an active agent that has been placed on a NavMesh.とか言われる時の対処法 - Qiitaより引用

if(navMeshAgent.pathStatus != NavMeshPathStatus.PathInvalid) { //navMeshAgentの操作 }

投稿2018/03/04 10:38

sakura_hana

総合スコア11425

Futahei👍を押しています

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

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

Futahei

2018/03/04 12:53

ご回答ありがとうございます。 もちろん調べております。挙げてくださったサイトも見ております。 ですが、そこで書かれているのは経路探索可能な状況になったらエージェントが動くようにして、エラーを回避(表示されないように)しているにすぎません。 私が質問しているのは、なぜいつまでも経路探索がうまくいかないのかということです。
sakura_hana

2018/03/05 02:27

実働テストさせましたが、問題無く動作しました。 一応確認ですが、ターゲットとなるCubeを置いた状態でNavMeshのベイクをしているということはありませんか?
Futahei

2018/03/05 03:25

わざわざテストしていただいてありがとうございます。 Cubeを置いた状態でBakeはしていましたがstaticにはしていなかったので影響はないかなと思いました。一応取り除いてからBakeしなおしましたが結果は変わりませんでした。 Navigationウィンドウを開いた状態のシーン画面も追記に置いておきます。
guest

0

自己解決

とりあえず解決?したので報告させていただきます。
Agent Typeを新しく作って、それを設定していたのですが、最初から用意されているAgent Typeを使うと動作しました。
ですが設定ミスというわけではなく、標準の設定と全く同じ設定で新しく作っていました。

ちなみに標準のAgent Typeの設定をいじっても動作しました。
イメージ説明

投稿2018/03/05 05:25

編集2018/03/05 05:25
Futahei

総合スコア80

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

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

sakura_hana

2018/03/05 06:14

なるほど、AgentTypeは切り替えたことが無かったので知りませんでした。 気になったので調べたところ、公式の情報見付かりました。 https://issuetracker.unity3d.com/issues/custom-navmesh-agent-type-causes-an-error-failed-to-create-agent-in-the-console Google翻訳 > すべてのエージェントタイプには、独自の別々のNavMesh(ヒューマノイドの場合は1つ、ロボットの場合は1つ)が必要です。 > 他のエージェントタイプのためにNavMeshesをベイクするには、公式のGitHubリポジトリhttps://github.com/Unity-Technologies/NavMeshComponentsからダウンロードできるNavMeshSurfaceコンポーネントを使用する必要があります。このトピックのマニュアルのセクションを読んで、https://docs.unity3d.com/2017.2/Documentation/Manual/NavMesh-BuildingComponents.htmlを設定する方法についての詳しい情報をお読みください。
Futahei

2018/03/05 06:26

調べていただいてありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

同じタグがついた質問を見る

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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