在同一预制件上需要碰撞和触发

时间:2017-07-19 19:21:14

标签: unity3d

当玩家在靠近物体时击中某个键时,我需要在每个预制件上设置一个触发器。我还需要在预制件和播放器的每个实例之间发生碰撞。当触发"触发时,我似乎只能找到一个工作。在预制件上选择。处理这个问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以在玩家关闭时使用对象上的界面并点击某个键。碰撞可以由物体对撞机处理,是否有特定的原因需要它作为触发器?检查this,可能会清除一些isTrigger问题。

答案 1 :(得分:1)

不使用对象上的触发器,而是使用Physics.OverlapSphere在播放器按下键时查找范围内的所有对象,然后在对象的脚本中执行函数。 / p>

触发事件:

void Update() {
    if (Input.GetKeyDown("space"))
    {
        ApplyEffect(transform.position, RADIUS);
    }
}

RADIUS是与播放器的理想距离

方法1:

void ApplyEffect(Vector3 center, float radius)
{
    Collider[] hitColliders = Physics.OverlapSphere(center, radius);
    int i = 0;
    while (i < hitColliders.Length)
    {
        hitColliders[i].gameObject.GetComponent<SCRIPT_NAME>().EFFECT_FUNCTION();
        i++;
    }
}

SCRIPT_NAME是目标对象上脚本的名称。
EFFECT_FUNCTION是脚本中函数的名称。

方法2:
使用消息传递系统在对象上执行类似于文档示例中显示的功能的功能: https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html