【问题标题】:Unity 3D: C# NPC Colliding each otherUnity 3D:C# NPC 相互碰​​撞
【发布时间】:2016-09-27 21:22:15
【问题描述】:

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

【问题讨论】:

  • 你的意思是他们应该能够互相通过吗?还是完全避开?
  • 我的意思是对所有的NPC都设置了距离,并且与玩家保持距离,当他们接近玩家时,他们都会聚集在一起,我想尝试与玩家保持距离所有 NPC 和类似 1 的玩家你能帮忙吗? :)

标签: c# unity3d


【解决方案1】:

在您的 AI 游戏对象上找到碰撞器组件,然后将其移除或检查 IsTrigger 选项。

More on IsTrigger:

对撞机是触发器吗?

触发器不会记录与传入刚体的碰撞。相反,它会在刚体进入或退出触发体积时发送 OnTriggerEnter、OnTriggerExit 和 OnTriggerStay 消息。

【讨论】:

  • 感谢您的回复!我似乎仍然无法让它工作,我尝试在它们身上安装一个盒子对撞机,它们都被淘汰了......知道你的意思的教程吗?
  • 您是否尝试移除碰撞器?原始的统一游戏对象是使用对撞机创建的,因此您可能在 AI 或其子级上拥有一些。
【解决方案2】:

如果您将与玩家的距离和与其他 NPC 的距离设置为不相互碰撞的机制,它们可能会发生冲突。

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

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

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

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

然后,您可以在适当的时候调用每一个。如果您想确保 NPC 与玩家 NPC 和彼此之间始终保持最小距离,请记住冲突命令的逻辑问题。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 2019-11-11
    • 2013-04-24
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多