分類:Unity、C#、VS2015
創建日期:2016-04-16
一、簡介
在游戲開發過程中,腳本不但需要訪問腳本所在的游戲對象的組件,還經常需要訪問和控制真他游戲對象。另外,根據項目需求,還可能需要通過腳本創建對象。
本節示例的最終運行效果如下:
二、查找場景中的游戲對象
在Unity腳本中,開發人員可以通過下面量的方式來訪問游戲對象。
1、通過名稱字符串來查找
使用函數GameObject.Find()查找在參數中指定的游戲對象。如果場景中存在指定名稱的游戲對象,則返回該對象的引用,否則返回null。如果存在多個重名的對象,該方法僅返回第一個對象的引用。
例如:
private GameObject obj;
void Start()
{
//尋找整個場景中名為Cube的游戲對象並賦予obj變量
obj = GameObject.Find("Cube");
}
2、通過標簽(Tag)來查找
使用函數GameObject.FindWithTag()查找在參數中指定的游戲對象。如果場景中存在指定標簽的游戲對象,那么返回該對象的引用,否則返回null。
例如:
GameObject player=GameObject.FindWithTag("player");
3、注意的問題
獲取游戲對象或組件的函數都比較耗時,因此,一般不要在Update()方法中去獲取這些對象,而是應該在Start()方法中查找並將其保存到聲明的字段變量中,然后再在Update()方法中使用這些組件或對象。
三、創建游戲對象
除了查找場景中的游戲對象外,當然也可以直接用腳本創建對象並將其添加到場景中。具體用法見接下來介紹的示例。
在實際項目中(包括游戲項目、虛擬現實VR項目,增強現實AR項目、……),這些場景中動態添加、修改或者刪除的對象都需要通過腳本來控制。
四、本節例子的設計步驟
1、在Unity的Project中Assets文件夾下添加一個名為“6.3”的子文件夾,然后在該文件夾下創建一個名為“Scene6_3.unity”的場景。
2、向場景中添加一個Plane,設置(復位)其位置:

3、向場景中添加一個Cube。
4、調整攝像機以及Cube的參數,使其方便地可看到:
其中,Cube的參數如下:

Main Camera的參數如下:
5、向場景中添加一個空GameObject,並將其換名為manager:

6、切換到VS2015,在6.3子文件夾下添加一個名為“Demo3_1.cs”的腳本文件:
添加后看到的結果如下:

7、將Demo3_1.cs文件改為下面的內容並保存:
using UnityEngine; using System.Collections; public class Demo3_1 : MonoBehaviour { public Texture texture; private GameObject obj; private Renderer render; void Start() { //獲取游戲對象 obj = GameObject.Find("Cube"); //獲取該對象的渲染器 render = obj.GetComponent<Renderer>(); } void OnGUI() { if (GUILayout.Button("創建立方體", GUILayout.Height(50))) { //設置該模型默認為立方體 GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); //為對象添加一個剛體,賦予物理屬性 obj.AddComponent<Rigidbody>(); //賦予對象的材質紅色 obj.GetComponent<Renderer>().material.color = Color.green; //設置對象的名稱 obj.name = "Cube"; //設置此模型材質的位置坐標 obj.transform.position = new Vector3(0, 5f, 0); } if (GUILayout.Button("創建球體", GUILayout.Height(50))) { //設置該模型默認為立方體 GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); //為對象添加一個剛體,賦予物理屬性 obj.AddComponent<Rigidbody>(); //賦予對象的材質紅色 obj.GetComponent<Renderer>().material.color = Color.red; //設置對象的名稱 obj.name = "Sphere"; //設置此模型材質的位置坐標 obj.transform.position = new Vector3(0, 5f, 0); } if (GUILayout.Button("添加顏色", GUILayout.Width(100), GUILayout.Height(50))) { //修改渲染顏色為紅色 render.material.color = Color.red; } if (GUILayout.Button("添加貼圖", GUILayout.Width(100), GUILayout.Height(50))) { //添加組件貼圖 render.material.mainTexture = texture; } } }
8、切換到Unity,向6.3子文件夾下拖放一個圖片(隨便選一個圖片就行):

9、在層次視圖中選中manager,然后將Demo3_1拖放到檢視圖中,再將圖片拖放到檢視圖腳本下的Texture上(賦初值):
10、按【播放】按鈕進入預覽模式,即可看到下面的運行界面:

單擊【創建立方體】按鈕,會看到下落的立方體(因為代碼中添加了剛體所以會自動下落),但是下落到Plane上后就停下來了:
單擊【創建球體】按鈕,這個球會下落到立方體的上面停下來:

單擊【添加顏色】按鈕,就會給左邊那個立方體換色:
單擊【添加紋理】按鈕,就會給左邊那個立方體貼圖:

哈哈,好玩吧。