FindObjectOfType<>() 是按類型查找游戲對象.<>里面填寫類型,那要是有多個這種類型的呢?來試一下.
1.
新建一個場景,新建一個Test.cs腳本,內容隨便,再新建一個Test02.cs腳本,內容如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test02 : MonoBehaviour { public Test test; // Use this for initialization void Start () { test = GameObject.FindObjectOfType<Test>(); } // Update is called once per frame void Update () { } }
2.
在場景中新建4個Cube,順序打亂.
3.
把4個Cube弄成下圖那樣:
4.
把Test02掛到相機上,把Test掛到Cube01上運行,Main Camera 的inspector面板的Test02中Test顯示的是Cube01;
再在Cube04上掛一個Test運行試一下,再在Cube03上掛一個Test運行試一下,再在Cube02上掛一個Test運行試一下,
此時共掛了4個,掛的順序是01-04-03-02,可以看出來總是最后掛的那個被Test02腳本的FindObjectOfType找到.
5.
把Cube02取消激活再運行試一下,再把03取消激活試一下,再把04取消激活試一下.
可以發現系統好像有一個列表掛上Test的就加到列表里,列表里存着所有Test的激活的游戲對象,FindObjectOfType獲得的是列表的最后一個,也就是最后一個掛上Test的游戲對象.,而不是任意獲取一個.
系統內部具體怎么樣不清楚,但根據測試來看好像是這么回事.