在真正能玩的遊戲場景中,很多腳本的執行是在不確定的遊戲對象上進項的,於是會考慮在父對象或者子對象上去寫腳本。這時,可能需要查找遊戲對象。那麼如何在腳本中找到父子游戲對象(gameObject)呢?
場景
如下圖所示,Windows
遊戲對象下面可能有很多不確定數量和位置的遊戲對象,需要操作它們。
在爲遊戲對象創建腳本的時候,這個腳本中的類會繼承自 MonoBehavior
:
using UnityEngine;
public class WindowUpdater : MonoBehaviour
{
void Start()
{
}
void Update()
{
}
}
找父組件/子組件
MonoBehavior
直接提供了查找父子組件的方法 GetComponent(s)
/ GetComponent(s)InParent
和 GetComponent(s)InChildren
,因此直接調用即可。對於泛型方法,每個子對象只會找到一個組件,所以通常適用於子組件非常簡單的場景。
var renderers = GetComponentsInChildren<Renderer>();
for (var i = 0; i < renderers.Length; i++)
{
var texture = textures[i];
renderers[i].material.mainTexture = texture;
}
找父對象/子對象
MonoBehavior
並沒有提供直接查找父子對象的方法。
但是 Transform
有!
所以,通過 Transform
可以間接獲取到子對象。GetChild()
GetChildCount
。
var transform = GetComponent<Transform>();
for (int i = 0; 0 < renderers.Length; i++)
{
transform.GetChild(i).gameObject.SetActive(true);
}
我的博客會首發於 https://blog.walterlv.com/,而 CSDN 會從其中精選發佈,但是一旦發佈了就很少更新。
如果在博客看到有任何不懂的內容,歡迎交流。我搭建了 dotnet 職業技術學院 歡迎大家加入。
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名呂毅(包含鏈接:https://walterlv.blog.csdn.net/),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫。