버그 해결을 위한 모든 질문을 던져
0 votes
171 views
//맵 생성 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Map_Ground : MonoBehaviour
{

    [Header("블록")] // 인스펙터 창에 블록이란 이름을 가진 머리말을 만듭니다.
    public GameObject G_BlockPrefabs;
    public GameObject W_BlockPrefabs;
    [Header("크기 및 위치")]
    public int Width_X = 0;
    public int Width_Z = 0;
   

  

    // 각 블록(게임 오브젝트)들을 연결해주기 위해 public으로 열어두고 알맞게 이름 지어줍니다.

    void Awake()
    {
        
        for (int x = 0; x < Width_X; x++)
        {
            for (int z = 0; z < Width_Z; z++)
            {
               
                 Instantiate(G_BlockPrefabs, new Vector3(x, 0, z), Quaternion.identity);
              
                if (x == 0 || z == 0 || x == Width_X - 1 || z == Width_Z - 1)
                {
                     Instantiate(W_BlockPrefabs, new Vector3(x, 1, z), Quaternion.identity);
                     Instantiate(W_BlockPrefabs, new Vector3(x, 2, z), Quaternion.identity);
                 
                }
                if ((int)Random.Range(0, 10) == 1)
                {
                    Instantiate(W_BlockPrefabs, new Vector3(x, 1, z), Quaternion.identity);
                    Instantiate(W_BlockPrefabs, new Vector3(x, 2, z), Quaternion.identity);
                   
                }
            }
        }
        NavMeshSurface[] surfaces = gameObject.GetComponentsInChildren<NavMeshSurface>();
        foreach (var s in surfaces)
        {
         
            s.BuildNavMesh();
        }
     
    }

}

 

//AI몹 생성코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class EnemyMoveFollow : MonoBehaviour
{
    bool IsStart = false;
    Transform destination;
    NavMeshAgent nav;
    // Start is called before the first frame update
    void Start()
    {
      
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            destination = GameObject.Find("Destination").transform;
            nav = GetComponent<NavMeshAgent>();
            IsStart = true;
        }
        if (IsStart)
        {
            nav.SetDestination(destination.position);
        }
    }
}

 

 

Nav Mash Components 를 Asset에 넣고 프리팹에 스크립트 적용시켰습니다. 위처럼 맵을 생성하고 그 맵을 bake 하여 목적지까지 가게 하고 싶은데, 아래와 같은 경고 및 에러가 뜹니다.

 

[Failed to create agent because it is not close enough to the NavMesh]

 

아래 에러는 P 눌러서 nav 설정할때 납니다. 어떻게 고치면 좋을까요 ㅠㅠ

["SetDestination" can only be called on an active agent that has been placed on a NavMesh.]

참고로 enemy라 해봐야 Sphere 에 콜라이더 넣은거 하나이고, 목적지도 capsule 오브젝트에 콜라이더 넣은게 다입니다. 위치는 Instantiate되는 오브젝트 위이고 ,구현 순서의 문제인가 해서 Start와 Awake로 나눠서 bake -> nav mesh agent / nav mash agent -> bake 시도해봤는데 똑같은 에러가 나올 뿐입니다. 혹시나 해서 update에 p키 입력을 받아서 작동하는거로 해봐도 똑같네요 ㅠㅠ
asked (2 point) , 171 views

질문에 대한 답변을 하려면 로그인 또는 가입해야합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

507 질문
656 answers
643 댓글
118,128 users