如何在 C# 中引用盒子碰撞器?

How to reference a box collider in C#?

我正在尝试关闭对象的盒子碰撞器,但我似乎没有正确引用盒子碰撞器。我想知道如何引用一个盒子对撞机,我不是在谈论脚本附加到的对象我在谈论引用任何可用游戏对象的任何盒子对撞机。这是我的脚本:

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

public class OpenDangerGate : MonoBehaviour
{
    [SerializeField]
    GameObject obj;
    [SerializeField]
    GameObject obj1;
    [SerializeField]
    GameObject invisibleWall;
    [SerializeField]
    GameObject invisibleWall1;
    public BoxCollider plank;
    void OnMouseDown()
    {
        obj.SetActive(false);
        obj1.SetActive(true);
        invisibleWall.SetActive(false);
        invisibleWall1.SetActive(false);
        plank.SetActive(false);
    }

我觉得你需要FindObjectsOfTypeAll

你会得到像这样的盒子碰撞器:

你可以设置一个public变量并在开头赋值:

public class OpenDangerGate : MonoBehaviour
{
     public BoxCollider[] allBoxColliders;

    void Start() {
        allBoxColliders = FindObjectsOfType<BoxCollider>();
    }
}

要遍历它们并禁用例如:

foreach (var collider in allBoxColliders) {
    collider.enabled = false; 
}

编辑。从场景中拖动盒子碰撞器的代码:

public class OpenDangerGate : MonoBehaviour
{
     [SerializeField]
     BoxCollider boxCollider;
     
     //for example to disable the collider
     void OnMouseDown()
     {
          boxCollider.enabled = false;
     }
}

如果禁用游戏对象,碰撞器也将禁用。