
注意到,如果我们每增加一个参数,所有物体的脚本中都要追加声明,看起来是一件十分麻烦的事情。
而在之前的教程中,我们学习了FindObjectOfType<>()方法来获取场景中的一个物体。
但是,我们注意到:

目前方法的关系
例如:
假设我们知道
1.场景中有"MainLine"物体。
2."MainLine"物体上有MainLine组件。
因为1,2的存在,我们有GameObject.FindObjectOfType<MainLine>().gameObject来获取"MainLine"这个物体。
我们获取了MainLine这个物体。
由此推出:
现在我们知道
1.场景中有"MainLine"物体。
2."MainLine"物体上有MainLine组件。
3.我想改变"MainLine"上MainLine组件的某一数值。
4.我可以获取"MainLine".
5.我需要一个方法,获取到"MainLine"(这是已知!)上的MainLine.
既然"MainLine"这个物体已知,我们就可以令物体类型数据x为"MainLine"物体。
GameObject x = GameObject.FindObjectOfType< MainLine >().gameObject; 然后使用本节新要介绍的重点
object.GetComponent<>() 来从一个物体上获取存在于该物体的组件。
例如我们可以:

获取
我们发现:
1.MainLine是一个物体类型。
2.MainLine类型的数据line被赋值了从x身上获取到的MainLine组件。
3.这意味着line与附着在x身上的MainLine组件有着相同的意义。
4.我们从如下语句中还可以发现:
GameObject x = GameObject.FindObjectOfType< MainLine >().gameObject; 既然FindObjectOfType<>()的尖括号中指定了一个类型,我们为什么要从GameObject绕弯子,而不直接获取这个类型的物体上面所附着的同名组件呢?
答案是肯定的。
显然,如果我们去掉该语句后面的.gameObject,会发现
它可以直接给相同物体类型的数据赋值。

获取物体的同时也为其同类型数据赋值
也就是说我们充分地发挥了它的效率:找到附着x组件的物体的同时我们并不需要该物体,而是直接把x组件赋给了与之有相同意义的x类型的数据。
这样,该物体类型数据有了组件的意义,就可以直接修改其中的值数据了:

获取并快捷修改其中数据
按照这样的理解:
只要场景中存在附着x组件的物体y
有以下几个相等的关系式:
y = GameObject.FindObjectOfType< x >().gameObject; //值为物体y
x = GameObject.FindObjectOfType< x >(); //值为组件x
x = y.GetComponent< x >(); //值为组件x
y = GameObject.FindObjectWithTag(""); //值为物体y 那么所有脚本中类似的关系,就可以互相替代简化了。
请仔细理解本节所有内容。