2016-09-27 2 views
0

Я знаю, как остановить мой NPC на игрока, я просто не могу понять, как я могу заставить их перестать сталкиваться друг с другом, а также с игроком?Unity 3D: C# NPC, сталкивающиеся друг с другом

У NPC есть метка «AI», я пробовал несколько вещей сейчас, но я действительно не могу понять это?

Вот мой код, любая помощь приветствуется.

using UnityEngine; 
using System.Collections; 

public class AI : MonoBehaviour { 
public Transform target; 
public int moveSpeed = 5; 
public int rotationSpeed = 2; 
public Transform myTransform; 
public float minDistance = 0.1f; 


void Awake() 
{ 
    myTransform = transform; 
} 

void Start() 
{ 
    target = GameObject.FindWithTag ("Player").transform; 
} 

void Update() 
{ 
    Vector3 Distance = target.position - myTransform.position; 

    if(Distance.sqrMagnitude>minDistance*minDistance) 
    { 
     myTransform.rotation = Quaternion.Slerp (myTransform.rotation, Quaternion.LookRotation (target.position - myTransform.position), rotationSpeed * moveSpeed * Time.deltaTime); 
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; 
    } 
+0

Вы имеете в виду, что они должны быть способны пройти через друг друга? Или вообще избегайте друг друга? –

+0

Я имею в виду дистанцию, установленную на всех NPC, а также расстояние от игрока, когда они приближаются к игроку, все они собираются близко друг к другу, я хочу попытаться получить дистанцию ​​от всех NPC и игроков like 1 Вы можете помочь? :) –

ответ

0

Найти компонент коллайдера на вашем AI GameObject и либо удалить его, либо проверить параметр IsTrigger.

More on IsTrigger:

ли коллайдер триггер?

Триггер не регистрирует столкновение с входящим Rigidbody. Вместо этого он отправляет сообщения OnTriggerEnter, OnTriggerExit и OnTriggerStay, когда жесткое тело входит или выходит из уровня триггера.

+0

Спасибо за ваш ответ! я все еще не могу заставить это работать, я попробовал иметь коробку с коллайдером на них, и все они выскочили ... знаете, что вы имеете в виду? –

+0

Вы пытались удалить коллайдеры? Первоначальное единство GameObjects создается с коллайдерами, поэтому у вас могут быть некоторые из AI или его детей. – CaTs

0

Если вы установили расстояние от игрока и расстояние от других NPC, как механизм не сталкиваясь друг с другом, они могут конфликтовать.

Например, NPC может сказать, что код будет двигаться дальше от игрока, это может означать перемещение слишком близко к другому NPC, поэтому обе команды конфликтуют друг с другом.

Более модульный подход может разделить команды на методы:

AvoidPlayer() 
{ 
    // Code here to move away from player. 
} 

AvoidNPC() 
{ 
    // Code here to move away from NPC. 
} 

Вы можете позвонить каждый, когда это необходимо. Если вы хотите, чтобы всегда существовало минимальное расстояние между NPC и игроками и NPC и друг с другом, имейте в виду логическую проблему конфликтующих команд.

Смежные вопросы