分類:Unity、C#、VS2015 函數
建立日期:2016-04-16 spa
在遊戲開發過程當中,腳本不但須要訪問腳本所在的遊戲對象的組件,還常常須要訪問和控制真他遊戲對象。另外,根據項目需求,還可能須要經過腳本建立對象。 設計
本節示例的最終運行效果以下: 3d
在Unity腳本中,開發人員能夠經過下面量的方式來訪問遊戲對象。 code
一、經過名稱字符串來查找 orm
使用函數GameObject.Find()查找在參數中指定的遊戲對象。若是場景中存在指定名稱的遊戲對象,則返回該對象的引用,不然返回null。若是存在多個重名的對象,該方法僅返回第一個對象的引用。 對象
例如: blog
private GameObject obj; 遊戲
void Start() 圖片
{
//尋找整個場景中名爲Cube的遊戲對象並賦予obj變量
obj = GameObject.Find("Cube");
}
二、經過標籤(Tag)來查找
使用函數GameObject.FindWithTag()查找在參數中指定的遊戲對象。若是場景中存在指定標籤的遊戲對象,那麼返回該對象的引用,不然返回null。
例如:
GameObject player=GameObject.FindWithTag("player");
三、注意的問題
獲取遊戲對象或組件的函數都比較耗時,所以,通常不要在Update()方法中去獲取這些對象,而是應該在Start()方法中查找並將其保存到聲明的字段變量中,而後再在Update()方法中使用這些組件或對象。
除了查找場景中的遊戲對象外,固然也能夠直接用腳本建立對象並將其添加到場景中。具體用法見接下來介紹的示例。
在實際項目中(包括遊戲項目、虛擬現實VR項目,加強現實AR項目、……),這些場景中動態添加、修改或者刪除的對象都須要經過腳原本控制。
一、在Unity的Project中Assets文件夾下添加一個名爲「6.3」的子文件夾,而後在該文件夾下建立一個名爲「Scene6_3.unity」的場景。
二、向場景中添加一個Plane,設置(復位)其位置:
三、向場景中添加一個Cube。
四、調整攝像機以及Cube的參數,使其方便地可看到:
其中,Cube的參數以下:
Main Camera的參數以下:
五、向場景中添加一個空GameObject,並將其換名爲manager:
六、切換到VS2015,在6.3子文件夾下添加一個名爲「Demo3_1.cs」的腳本文件:
添加後看到的結果以下:
七、將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; } } }
八、切換到Unity,向6.3子文件夾下拖放一個圖片(隨便選一個圖片就行):
九、在層次視圖中選中manager,而後將Demo3_1拖放到檢視圖中,再將圖片拖放到檢視圖腳本下的Texture上(賦初值):
十、按【播放】按鈕進入預覽模式,便可看到下面的運行界面:
單擊【建立立方體】按鈕,會看到下落的立方體(由於代碼中添加了剛體因此會自動下落),可是下落到Plane上後就停下來了:
單擊【建立球體】按鈕,這個球會下落到立方體的上面停下來:
單擊【添加顏色】按鈕,就會給左邊那個立方體換色:
單擊【添加紋理】按鈕,就會給左邊那個立方體貼圖:
哈哈,好玩吧。