Unity访问对撞机作为不同游戏对象上的公共变量

时间:2018-11-17 10:06:03

标签: c# unity3d

我创建了一个预制件的实例(它是两个矩形,中间有一个缝隙),如果玩家精灵与该缝隙中的对撞机碰撞,则得分会增加。

我在预制对象上有一个boxCollider2D,并且希望将此对撞机作为单独sprite上的公共变量,因此我可以在sprite上的脚本中访问它。

因此,col,当前是精灵与之交互的对撞机,

屏障(克隆)(UnityEngine.BoxCollider2D)

我的colliderBox是:

障碍(UnityEngine.BoxCollider2D)

所以唯一的区别是一个来自预制件,一个来自使用预制件创建的对象。

void OnTriggerEnter2D(Collider2D col){

    if (col.CompareTag ("barrier") && col != colliderBox) {
        Debug.Log (col);
        Debug.Log (colliderBox);
        SceneManager.LoadScene (mainMenu);
    }


}

1 个答案:

答案 0 :(得分:2)

如果我明白了,您希望将对撞机作为公共变量,请尝试以下操作:

public class PrefabObject: MonoBehaviour {

        public BoxCollider2D boxCollider;

        private void Start()
        {
            this.boxCollider = this.GetComponent<BoxCollider2D>();
        }
    }

    public class OtherObject: MonoBehaviour {

                public PrefabObject prefabObject;
                private BoxCollider2D boxCollider;
                private void Start()
                {
                    this.boxCollider = prefabObject.boxCollider;
                    //or also this.boxCollider = prefabObject.GetComponent<BoxCollider2D>(); 
                }
            }

如果没有附加到带有BoxCollider2D的GameObject的PrefabObject脚本,而仅附加了对撞机组件,则OtherObject将类似于:

public class OtherObject: MonoBehaviour {

                public GameObject prefabObject; //Here is the change!
                private BoxCollider2D boxCollider;
                private void Start()
                {
                    this.boxCollider = prefabObject.GetComponent<BoxCollider2D>();
                }
            }