Unity 3D: c# NPC相互碰撞
本文关键字:碰撞 NPC 3D Unity | 更新日期: 2023-09-27 18:09:02
我知道如何阻止NPC撞到玩家,但我似乎不知道如何让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;
}
在你的AI GameObject上找到碰撞器组件,要么删除它,要么检查itrigger选项。
更多关于IsTrigger:
对撞机是触发器吗?
触发器不注册与传入刚体的碰撞。相反,当刚体进入或退出触发卷时,它会发送OnTriggerEnter, OnTriggerExit和OnTriggerStay消息。
如果你设置了与玩家的距离以及与其他npc的距离作为避免相互碰撞的机制,那么它们可能会发生冲突。
例如,代码可能会告诉NPC远离玩家,这可能意味着要移动到离另一个NPC太近的地方,所以这两个命令会相互冲突。
更模块化的方法可能是将命令分成方法:
AvoidPlayer()
{
// Code here to move away from player.
}
AvoidNPC()
{
// Code here to move away from NPC.
}
您可以在适当的时候调用它们。如果你想确保npc与玩家之间、npc与玩家之间保持最小距离,就要牢记冲突命令的逻辑问题。