動態向多個unity物體新增自定義指令碼
阿新 • • 發佈:2019-02-19
向多個物體新增自定義指令碼,一個一個拖拖得我頭疼,然後就想辦法寫了個指令碼,可以再執行的時候動態向物體新增元件
首先需要一個需要新增指令碼的父物體,給所有的子物體新增指令碼的方式是迴圈遍歷所有的子物體,然後依次給所有的子物體新增上指令碼,注意,新增完指令碼的時候需要手動設定他的enable為false一次,然後在接下來的協程中在設定enable為true,否則的話該指令碼不會觸發enable方法,對下面手動新增的變數元件也就無效了。
具體的程式碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AddComponent : MonoBehaviour { public GameObject go ; //給所有的子元素的物體新增一個指令碼 該物體是所有元素的父元素 private int count; //計算所有子元素的個數 // Use this for initialization void Start () { count = go.transform.childCount; //獲取所有子物體的個數 for (int i = 0; i < count; i++) { //給所有的子物體新增上interavtive指令碼 go.transform.GetChild(i).gameObject.AddComponent<Peter_InteractiveObj>(); //給所有的子元素新增objplay指令碼 go.transform.GetChild(i).gameObject.AddComponent<Peter_ObjPlay>(); } for (int i = 0; i < count; i++) { //給指令碼中的變數賦值 go.transform.GetChild(i).gameObject.GetComponent<Peter_ObjPlay>().m_InteractiveObj = go.transform.GetChild(i).gameObject.GetComponent<Peter_InteractiveObj>(); } for (int i = 0; i < count; i++) { //使指令碼的enable設定為false,因為如果在start中就直接enable,會導致接下來的物體賦不上 go.transform.GetChild(i).gameObject.GetComponent<Peter_ObjPlay>().enabled = false; } StartCoroutine(Enable()); //啟動協程 } IEnumerator Enable() { //協程,enable指令碼 for (int i = 0; i < count; i++) { go.transform.GetChild(i).gameObject.GetComponent<Peter_ObjPlay>().enabled = true; } yield return null; } // Update is called once per frame void Update () { } }
該指令碼被寫死了,可以修改一下自定義新增的指令碼