程序員常用的Unity3D核心類及方法
前言
創(chuàng)建、克隆、銷毀游戲?qū)ο?/strong>
01 創(chuàng)建游戲?qū)ο?/h1>
GameObject cube=GameObject.CreatePrimitive(PrimitiveType.Cube); Cube.name=”cube1”;//設(shè)定名字
Cube.renderer.material.color=Color.red;//設(shè)定對象的顏色
02 克隆對象:Instantiate();
GameObject obj=GameObject.Instantiate(cube);//創(chuàng)建一個
03 銷毀對象:Destroy();
Destroy(obj,1);//一秒后對象消失
把腳本添加到對象上:
一種是把腳本直接拖到對象上;另一種是通過代碼:cube.AddComponent(“script”);銷毀對象的腳本:Destroy(cube.GetComponent(“script”));
1、給游戲物體添加名為FoobarScript的腳本 GameObject.AddComponent ("FoobarScript");
2、給游戲物體添加剛體Rigidbody rb = GameObject.AddComponent ("Rigidbody"); 3、給游戲物體添加球體碰撞器SphereCollider sc = GameObject.AddComponent ("SphereCollider");
GameObject類
方法:Find()、FindWithTag()、FindGameObjectsWithTag()等
01 通過名稱來查找
GameObject player = new GameObject("Player"); GameObject go=GameObject.Find(“Player”);
02 通過tag標(biāo)簽獲取單個游戲?qū)ο?/h1>
GameObject go=GameObject.FindWithTag(“Player”);
GameObject go=GameObject..FindGameObjectWithTag (“Player”);
03 通過游戲標(biāo)簽獲取多組游戲?qū)ο?/h1>
GameObject[] go=GameObject.FindGameObjectsWithTag (“Player”);
組件引用函數(shù):
GetComponent 得到組件
GetComponents 得到組件列表(用于多個同類型組件的時候)
GetComponentInChildren 得到對象或?qū)ο笞游矬w上的組件
如: ScriptName other=GameObject.GetComponent();//在對象上添加腳本
print(other.name);//可以通過對象引用腳本中的名字
Time類
屬性:deltaTime
如1:
Float a=3.0f;
Void Update(){
?A-=Time.delatTime;//倒計時 Print(a);
}
如2:
按下A鍵,游戲物體向左移動;按下D鍵,游戲物體向右移動
float move_h=0;
if (Input.GetKey (KeyCode.A)) { move_h-=Time.deltaTime; }
if (Input.GetKey (KeyCode.D)) { move_h+=Time.deltaTime; }
transform.Translate(new Vector3(move_h,0,move_v));
協(xié)同程序(Coroutine)
協(xié)同程序,即在主程序運行時同時開啟另一段邏輯處理來協(xié)同當(dāng)前程序的執(zhí)行。換句話說,開啟協(xié)同程序就是開啟一個線程。
在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可開啟一個協(xié)同程序,也就是說該方法必須在MonoBehaviour或繼承于MonoBehaviour的類中調(diào)用。
在Unity3D中,使用StartCoroutine(string methodName)可以開啟一個線程。
Yield
Yield語句是一種特殊類型的Return(返回)語句,它可以確保函數(shù)在下一次被執(zhí)行時,不是從頭開始,而是從Yield語句處開始。
可以實現(xiàn)將一段程序延遲執(zhí)行或者將其各個部分分布在一個時間段內(nèi)連續(xù)執(zhí)行
void Start () {
print("Start開始"); StartCoroutine("Do"); print("Do調(diào)用后");
}
IEnumerator Do(){
print("Do開始");yield return ?new WaitForSeconds(3.0f); ?print("暫停3秒后");
}
運行結(jié)果為:Start開始--》Do開始---》Do調(diào)用后---》暫停3秒后
Random類(隨機(jī)數(shù))
float a=Random.value;
int b=Random.Range(0,100) 包括最大和最小
float c=Random.Range(0.0f,1.0f); 包括最小但不包括最大
消息傳遞函數(shù)
GameObject.SendMessage:向自身的腳本中發(fā)送消息 GameObject.BroadcastMessag:向自身及子類中發(fā)送消息
GameObject.SendMessageUpwards:向自身及父類中發(fā)送消息 如:
Sphere:
void Start () {
gameObject.SendMessageUpwards ("Do","向父對象發(fā)出信息"); } Cube:
void Do(string message){ print (message);
}
Math方法
Math.Repeat(float t , float leght); 返回t的值,而且t的值在0到legth之間,如果t的值大于length,則t=t%length(取余操作,始終讓返回的值小于length)
實例:Mathf.Repeat(Time.time, 3) //讓Time.time的數(shù)值除以3取余,得出的值不能大于3