(Unity C#) NPC не движется по траве и другой местности.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 (Unity C#) NPC не движется по траве и другой местности.

Сообщение Anonymous »

Я создал NPC, который следует за основным игроком. Когда игрок находится в определенном диапазоне от NPC, NPC должен ходить, бегать и атаковать в зависимости от расстояния между игроком и NPC. К NPC прикреплены аниматор, коллайдер, агент Nav Mesh, аниматор врагов и скрипт контроллера врагов. Настройки такие:

Моя проблема в том, что NPC не преследует игрока, если на местности есть какая-то трава или папоротник.

NPC настроен на прохождение всех типов местности с помощью Nav Mesh Agent, более того, настройки запекания такие же, как на изображении. Видео проблемы можно посмотреть здесь.

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

Код: Выделить всё

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

public enum EnemyState
{
PATROL,
CHASE,
ATTACK
}

public class EnemyController : MonoBehaviour
{

private EnemyAnimator enemy_Anim;
private NavMeshAgent navAgent;

private EnemyState enemy_State;

public float walk_Speed = 0.5f;
public float run_Speed = 4f;

public float chase_Distance = 7f;
private float current_Chase_Distance;
public float attack_Distance = 1.8f;
public float chase_After_Attack_Distance = 2f;

public float patrol_Radius_Min = 20f, patrol_Radius_Max = 60f;
public float patrol_For_This_Time = 15f;
private float patrol_Timer;

public float wait_Before_Attack = 2f;
private float attack_Timer;

private Transform target;

public GameObject attack_Point;

//private EnemyAudio enemy_Audio;

void Awake()
{
enemy_Anim = GetComponent();
navAgent = GetComponent();

target = GameObject.FindWithTag(Tags.PLAYER_TAG).transform;

//  enemy_Audio = GetComponentInChildren();

}

// Use this for initialization
void Start()
{

enemy_State = EnemyState.PATROL;

patrol_Timer = patrol_For_This_Time;

// when the enemy first gets to the player
// attack right away
attack_Timer = wait_Before_Attack;

// memorize the value of chase distance
// so that we can put it back
current_Chase_Distance = chase_Distance;

}

// Update is called once per frame
void Update()
{

if (enemy_State == EnemyState.PATROL)
{
Patrol();
}

if (enemy_State == EnemyState.CHASE)
{
Chase();
}

if (enemy_State == EnemyState.ATTACK)
{
Attack();
}

}

void Patrol()
{

// tell nav agent that he can move
navAgent.isStopped = false;
navAgent.speed = walk_Speed;

// add to the patrol timer
patrol_Timer += Time.deltaTime;

if (patrol_Timer > patrol_For_This_Time)
{

SetNewRandomDestination();

patrol_Timer = 0f;

}

if (navAgent.velocity.sqrMagnitude > 0)
{

enemy_Anim.Walk(true);

}
else
{

enemy_Anim.Walk(false);

}

// test the distance between the player and the enemy
if (Vector3.Distance(transform.position, target.position) 

Подробнее здесь: [url]https://stackoverflow.com/questions/60651145/unity-c-npc-not-moving-on-grass-and-other-terrain[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»