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

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

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

Q&A

解決済

1回答

3229閲覧

navmesh2dでゲームスタートすると画像が消える

shiwasuke12

総合スコア9

0グッド

0クリップ

投稿2020/04/01 07:43

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

navmesh2d

これが出る

Failed to create agent because there is no valid NavMesh

補足情報(FW/ツールのバージョンなど)

unity2019.3.1f3
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

姿勢の制御はNavMeshAgent任せでしょうか?
【Unity】NavMeshComponentsに2D対応ブランチが追加されていたので試してみた - テラシュールブログの解説記事の末尾に...

NavMeshAgentはパスを3Dの物と認識しているので注意が必要です。NavMeshAgentを使用したい場合、座標だけ同期して実際の描画は別のGameObjectで行う等が楽で良いです。

との注意書きがあります。それに従ってNavMeshAgentは補助的に使うだけにし、実際の鳥の位置・姿勢は独自に制御するのがいいかもしれません。

あるいは、NavMeshAgentが設定した姿勢を後から書き換えてやってもいいと思います。試しに「鳥が卵を追いかける」というシチュエーションでプロジェクトを作成し、鳥のスクリプトを下記のようにしたところ...

C#

1using System.Collections; 2using UnityEngine; 3using UnityEngine.AI; 4 5[RequireComponent(typeof(NavMeshAgent))] 6public class BirdController : MonoBehaviour 7{ 8 [SerializeField] private Transform egg; 9 private NavMeshAgent agent; 10 11 private void Awake() 12 { 13 this.agent = this.GetComponent<NavMeshAgent>(); 14 } 15 16 // 「Failed to create agent because there is no valid NavMesh」のメッセージは 17 // おそらくNavMeshBuilder2Dがメッシュを作成するよりも早くNavMeshAgentが動作を 18 // 始めようとしているためではないかと思われます 19 // そこで、インスペクター上ではNavMeshAgentを無効化しておき、ちょっとタイミングを 20 // 遅らせて有効化してみてはいかがでしょうか? 21 private IEnumerator Start() 22 { 23 yield return new WaitForEndOfFrame(); 24 25 this.agent.enabled = true; 26 if (NavMesh.SamplePosition(this.transform.position, out var hit, float.MaxValue, NavMesh.AllAreas)) 27 { 28 this.agent.Warp(hit.position); 29 } 30 } 31 32 // 鳥の挙動は、さしあたりひたすら卵を目標に移動するだけとしました 33 private void Update() 34 { 35 if (this.agent.isActiveAndEnabled && (this.egg != null)) 36 { 37 this.agent.SetDestination(this.egg.position); 38 } 39 } 40 41 // 鳥の姿勢はNavMeshAgentによってコントロールされており、Z軸が前方だという 42 // 前提の姿勢になってしまうので、LateUpdateタイミングで姿勢を修正してみました 43 private void LateUpdate() 44 { 45 var forward = this.transform.forward; 46 if (forward.z < 0.5f) 47 { 48 this.transform.rotation = Quaternion.LookRotation(Vector3.forward, forward); 49 } 50 } 51}

下図のような挙動になりました。

図

投稿2020/04/03 08:58

Bongo

総合スコア10807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問