2017-07-19 78 views
0

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

回答

1

而不是在对象上使用触发器,使用Physics.OverlapSphere可以找到范围为的所有对象,当玩家按下键,然后在对象的脚本中执行一个函数。

触发事件:

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

1

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

+0

请参阅HTTPS ://sackoverflow.com/help/how-to-answer) 这个问题已经回答了,显然,你可以在这里添加你的答案。但是在回答之前你需要了解一些观点。首先,不要添加之前添加了相同代码或建议的答案。其次,如果用户非常具体地询问了问题以及他需要解决什么问题,请不要添加过于复杂的答案。第三,如果您想就回答或问题提出任何建议,您可以添加评论。 –