我知道如何阻止我的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)
在AI GameObject上找到对撞机组件,然后将其删除或检查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之间总是保持最小距离,请记住冲突命令的逻辑问题。