Unity3D Дублированные Агенты NavMesh не перемещаются - PullRequest
0 голосов
/ 05 мая 2019

В моей сцене у меня есть агент, который перемещается в определенное место назначения.Как только я пытаюсь продублировать его, чтобы создать второго агента, получающееся поведение довольно странное: агенты переносятся в противоположные углы карты и перестают двигаться.Кроме того, сетка навигации во время выполнения кажется измененной (как вы можете видеть на втором скриншоте).Как только я отключаю одного агента, другой начинает работать как положено.

РЕДАКТИРОВАТЬ: это код, который я использую для символа (как вы можете видеть, я управляю поворотом / переводом символа вручную, а не делегирую агента, что хорошо работает, пока я не назначу тот же сценарий второмусимвол, как упомянуто ранее).

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

public class AI_PlayerController : MonoBehaviour
{
    public Transform goal;
    bool isTracking = false;
    public float speed = 1.0f;
    Vector3 currentDirection;

    Animator anim;    
    NavMeshAgent agent;
    Vector2 smoothDeltaPosition = Vector2.zero;
    Vector2 velocity = Vector2.zero;

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
        agent = GetComponent<NavMeshAgent>();
        agent.SetDestination(goal.position);
        agent.updatePosition = false;
        agent.updateRotation = false;
    }
void Update ()
    {
        if (agent.remainingDistance > agent.radius) {
            Vector3 worldDeltaPosition = agent.nextPosition - transform.position;        
            worldDeltaPosition.y = 0;
            Quaternion rotation = Quaternion.LookRotation(worldDeltaPosition);
            transform.rotation = Quaternion.Slerp(transform.rotation, rotation, .1f);
            anim.SetBool("move", true);
        } else {
            anim.SetBool("move", false);
        }

    }

    void OnAnimatorMove ()
    {
        // Update position to agent position
        transform.position = agent.nextPosition;
    }
}

Only one active agent Both duplicated agent active

1 Ответ

0 голосов
/ 07 мая 2019

Вы очистили и повторно сделали navmesh? Я не уверен, что это сработает, но это может решить проблему. В противном случае попробуйте удалить и повторно добавить компонент NavMeshAgent на обоих из них. Если они являются префабами, то вы можете захотеть воссоздать их, а не копировать, чтобы нежелательные изменения не распространялись между ними случайно.

Редактировать: Трудно определить проблему, не увидев ваш код. Не могли бы вы загрузить скрипт навигации / перемещения?

Редактировать 2 Не могли бы вы попробовать заменить скрипт на обоих персонажах следующим скриптом движения? Логика анимации может быть добавлена ​​позже.

Если это не сработает, я бы порекомендовал проверить, правильно ли настроен NavMesh в вашей сцене (например, убедиться, что навигационные препятствия помечены правильно, а также очистить и повторно запустить NavMesh).

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

[RequireComponent(typeof(NavMeshAgent))]
public class AI_PlayerController : MonoBehaviour
{
    public Transform goal;
    public float speed = 3.0f;
    public float acceleration = 8.0f;

    NavMeshAgent agent;

    // Start is called before the first frame update
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        agent.speed = speed;
        agent.acceleration = acceleration;
        agent.SetDestination(goal.position);
    }
}
...