有时候一些重复工作很烦,比如,我们希望把一大堆东西加到数组里,但是我们又不希望程序运行的时候加,自己一个一个去拖,也很麻烦,这种时候,有一个不运行但是会执行的代码
[ExecuteInEditMode]??这个代码要放在所有脚本的前面
[ExecuteInEditMode]
public class NewBehaviourScript : MonoBehaviour{
void Start() {}
void Update() {}
}
之后,这个脚本只要挂在物体上,就会运行。
例:我现在想把界面里,所有按钮放到一个数组里
1.我给所有按钮加上标签button
2.把所有有标签的按钮放入数组
[ExecuteInEditMode]
public class NewBehaviourScript : MonoBehaviour
{
public GameObject[] button_all;
void Update()
{
button_all=GameObject.FindGameObjectsWithTag("button");
}
}
这时候我把写好的脚本,随便挂到一个物体上,就会发现button_all把所有按钮都挂进去了
(我懒只搞了一个)
注意:我这里是吧代码写在update里的,写在不同的脚本里,会有不同的效果
Start/Awake:脚本刚挂上去那一下执行
Update : 场景里你动了某个物体了,就会执行一遍脚本
应用场景: 如果现在有个物体,下面有10000个按钮,每个按钮上都要添加一个Button。
思路:1.在这个物体上挂一个脚本;2.用这个脚本获取这个物体上有几个孩子;3.给每个孩子添加上按钮
[ExecuteInEditMode]
public class NewBehaviourScript : MonoBehaviour
{
[SerializeField]
Transform[] button_all; //建一个数组获取物体下得所有孩子
void Update()
{
//给数组个长度,为孩子的数量
button_all = new Transform[transform.childCount];
for (int i = 0; i < transform.childCount;i++) {
//把孩子装进去
button_all[i] = transform.GetChild(i);
//为了防止手贱,有了还添,所以如果没有这个组件再添加
if (button_all[i].GetComponent<Button>() == null)
{
button_all[i].gameObject.AddComponent<Button>();
}
}
}
}
?来自博主的碎碎念:这里可能会觉得,直接全选添加更方便,可是这个代码可以保存下来重复使用,每次一拖一拽就行了,代码的优势在复用性强
|