Unity 3D:C#NPC相互碰撞

时间:2016-09-27 04:12:26

标签: c# unity3d

我知道如何阻止我的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;
    }

2 个答案:

答案 0 :(得分:0)

在AI GameObject上找到对撞机组件,然后将其删除或检查IsTrigger选项。

More on IsTrigger:

  

对撞机是否是触发器?

     

触发器不会记录与传入Rigidbody的冲突。相反,它会在刚体进入或退出触发器卷时发送OnTriggerEnter,OnTriggerExit和OnTriggerStay消息。

答案 1 :(得分:0)

如果您设置距离玩家的距离以及与其他NPC的距离作为不相互碰撞的机制,则可能会发生冲突。

例如,代码可能会告诉NPC远离玩家,这可能意味着移动得太靠近另一个NPC,因此这两个命令相互冲突。

更模块化的方法可能是将命令分离为方法:

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

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

然后,您可以在适当的时候调用每个人。如果你想确保NPC与播放器 NPC之间总是保持最小距离,请记住冲突命令的逻辑问题。