Unity 同一物体上的多个碰撞器

问题描述 投票:0回答:4

我在同一个游戏对象上使用多个盒子碰撞器,问题是,是否可以使用
分别引用每个碰撞器 gameObject.getComponent().enabled = false;
请记住,我的碰撞器很少,我希望其中一些保持启用状态,而其他碰撞器将被禁用。

unity-game-engine unityscript unity3d-2dtools
4个回答
13
投票

我所做的是创建空的子游戏对象[每个碰撞器一个游戏对象]并为它们分配碰撞器,然后我会为这些子游戏对象分配标签[在您的情况下,它们可以是“AlwaysActive”和“SwitchingActive”或任何更好的名称可以想出]。

然后在父级中,我将使用

GetComponentsinChildren<Collider>
查找所有碰撞器,并检查游戏对象(相应碰撞器)的标签是否符合我的要求。如果是的话,我将完成我所需的任务,否则跳过它。

注意: 子游戏对象上的碰撞器不会在父脚本中调用

OnTriggerEnter
OnCollisionEnter
。我使用委托策略将子游戏对象的碰撞传递到父游戏对象中。


1
投票

您可以通过脚本生成所有碰撞器

var collider1 = gameObject.AddComponent<BoxCollider>();  
var collider2 = ...  
...  

然后您可以设置每个碰撞器的所有属性
https://docs.unity3d.com/ScriptReference/Collider.html
所以你可以根据需要使用每个碰撞器的变量


0
投票

旧但也许有帮助: 你可以在一个游戏对象中获取多个组件:

  Collider[] colls = GetComponents<Collider>();
             foreach(var col in colls){
                 col.isTrigger = false;
             }

0
投票

不管你信不信,这对我有用。您只需将播放器拖入公共变量引用槽并确保其上有 BoxCollision2d 即可。我确信你可以将它用于 3d,但你必须将 Collider2D 部分更改为“对撞机”或其他东西(我猜)。

数组中的数字从 0 开始,对应于右侧检查器中的第 0 个、第 1 个和第 2 个 BoxCollider,您可以将数字更改为您需要的任何碰撞体。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class ur_scriptName: MonoBehaviour
{
   public Collider2D[] colliders;
   public GameObject player;

   void Start()
        {
        colliders = gameObject.GetComponents<Collider2D>();
        }

   void Update()
        {

        }

   void OnTriggerEnter2D(Collider2D other)
        {
            if (colliders[2].IsTouching(player.GetComponent<Collider2D>()))
            {
            Debug.Log("player touching collider 2");
            }
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.