Unity3d NavMesh работает странно, не могу понять почему - PullRequest
0 голосов
/ 28 октября 2018

Первая волна зеленого цвета идет направо (до первой путевой точки), но после удлинения туннеля вторая волна - это то, почему зеленый цвет теряет первую путевую точку и идет прямо ко второй.(И почему это каким-то окольным путем)

Извините за мой плохой английский.

Первая волна зеленого идет прямо (к первой путевой точке), но после удлинения туннеляВторая волна - это то, почему зеленый вы теряете первую путевую точку и идете прямо ко второй.(И почему это как-то окольным путем)

Собственно два вопроса: 1) как исправить первую путевую точку 2) почему так странно идти ко второй путевой точке

Вот кодврага, чтобы перебрать путевые точки.

using System;
using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class EnemyMovement : MonoBehaviour
{
    [SerializeField] public Transform[] points;
    [SerializeField] private int destPoint = 0;
    private NavMeshAgent agent;

    void Start()
    {        
        agent = GetComponent<NavMeshAgent>();
        agent.autoBraking = false;
        agent.destination = points[destPoint].position;
    }

    void GotoNextPoint()
    {        
        if(destPoint != points.Length)
        {
            agent.destination = points[destPoint].position;
        }
    }

    void Update()
    {
        if(agent.remainingDistance < 0.5f)
        {
            destPoint++;
            GotoNextPoint();
        }
    }

    private void OnDrawGizmos()
    {
        Gizmos.DrawLine(gameObject.transform.position, points[destPoint].position);
    }
}

1 Ответ

0 голосов
/ 24 января 2019

Было решено, что дело в том, что NavMesh создает большие плитки (NavMeshBuildSettings.tileSize), но я не мог изменить это, потому что использовал чужую работу (https://github.com/Unity-Technologies/NavMeshComponents/tree/mast… mples / Scripts).Итак, оказалось, что для изменения времени выполнения navMesh необходимо не только зарегистрироваться в коде изменения сетки, но и написать строку ( .overrideTileSize = true; )

var defaultBuildSettings = NavMesh.GetSettingsByID (0).overrideTileSize = true;

После этогоЯ смог изменить размер плитки, и выбор неправильного пути был остановлен.

...