W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
游戲場(chǎng)景中出現(xiàn)的所有物體都屬于游戲?qū)ο螅螒驅(qū)ο笾g的交互可通過(guò)腳本的控制來(lái)實(shí)現(xiàn)。
創(chuàng)建游戲?qū)ο蟮姆椒ǎ?/p>
本案例使用第三種方法進(jìn)行講解。即利用腳本動(dòng)態(tài)創(chuàng)建游戲?qū)ο蟆?利用腳本動(dòng)態(tài)創(chuàng)建游戲?qū)ο蟮姆椒ㄓ址譃閮煞N。
CreatePrimitive
方法創(chuàng)建 Unity 3D 系統(tǒng)自帶的基本游戲?qū)ο蟆?/li>
Instantiate
實(shí)例化方法將預(yù)制體實(shí)例化為對(duì)象。案例設(shè)計(jì)
本案例通過(guò) C# 腳本在 Unity 3D 中創(chuàng)建一個(gè) Cube 模型和一個(gè) Sphere 模型,通過(guò)屏幕左上角按鈕進(jìn)行創(chuàng)建操作。
案例實(shí)施
CreatePrimitive
方法創(chuàng)建 Unity 3D 系統(tǒng)自帶的基本游戲?qū)ο螅瑒?chuàng)建空白腳本寫(xiě)入代碼。 using UnityEngine;
using System.Collections;
public class CreatePrimitive:MonoBehaviour{
void OnGUI(){
if(GUILayout.Button("CreateCube", GUILayout.Height(50))){
GameObject m_cube=GameObject.CreatePrimitive(PrimitiveType.Cube);
m_cube.AddComponent<Rigidbody>();
m_cube.GetComponent<Renderer>().material.color=Color.blue;
m_cube.transform.position=new Vector3(0, 10, 0);
}
if(GUILayout.Button("CreateSphere", GUILayout.Height(50))){
GameObject m_cube=GameObject.CreatePrimitive(PrimitiveType.Sphere);
m_cube.AddComponent<Rigidbody>();
m_cube.GetComponent<Renderer>().material.color=Color.red;
m_cube.transform.position=new Vector3(0, 10, 0);
}
}
}
在上述 OnGUI()
函數(shù)中,單擊 CreateCube
按鈕或 CreateSphere
按鈕后,將分別調(diào)用 CreatePrimitive
方法,從而創(chuàng)建 Cube
和 Sphere
游戲?qū)ο?,并且為這兩個(gè)游戲?qū)ο筇砑觿傮w、顏色以及位置屬性。
Instantiate
實(shí)例化方法將預(yù)制體實(shí)例化為對(duì)象。當(dāng)制作好了游戲組件(場(chǎng)景中的任意一個(gè) GameObject)后,將它制作成一個(gè)組件模板,用于批量的套用工作,例如場(chǎng)景中“重復(fù)”的東西—— “敵人”、“士兵”、“子彈”……稱為預(yù)制體。
默認(rèn)生成的預(yù)制體其實(shí)就像克隆體,其內(nèi)儲(chǔ)存著一個(gè)游戲?qū)ο螅ㄓ螒驅(qū)ο蟮乃薪M件及其下的所有子游戲?qū)ο蟆?/p>
首先在場(chǎng)景中創(chuàng)建一個(gè)立方體,然后在 Project 面板中單擊 Create
菜單的下拉三角,在出現(xiàn)的對(duì)話框中選擇 Prefab
創(chuàng)建一個(gè)預(yù)制體,并為其命名為 MyCube
。
然后在 Hierarchy 視圖中將立方體拖曳至 Project 視圖中的 MyCube
,完成預(yù)制體的制作并與立方體 Cube
關(guān)聯(lián)。在 Hierarchy 視圖中與預(yù)制體關(guān)聯(lián)的游戲?qū)ο鬄樗{(lán)色。
將預(yù)制體復(fù)制一份到場(chǎng)景里的過(guò)程叫實(shí)例化,在 Project 面板中將預(yù)制體拖曳到 Inspector 面板中可以實(shí)例化一個(gè)對(duì)象。
預(yù)制體的實(shí)例化不是普通的復(fù)制,預(yù)制體實(shí)例化后產(chǎn)生的新游戲?qū)ο笠廊槐3种c預(yù)制體的關(guān)聯(lián),也就是預(yù)制體進(jìn)行添加組件、修改組件屬性等改變,預(yù)制體實(shí)例化產(chǎn)生的游戲?qū)ο笠矔?huì)發(fā)生相應(yīng)的改變。
if(Input.GetButtonDown("Fire1")){
Instantiate(newObject, transform.position, transform.rotation);
}
上述代碼中調(diào)用 Instantiate
方法實(shí)例化游戲?qū)ο笈c調(diào)用 CreatePrimitive
方法創(chuàng)建游戲?qū)ο蟮淖罱K結(jié)果是完全一樣的,實(shí)例化游戲?qū)ο髸?huì)將對(duì)象的腳本及所有繼承關(guān)系實(shí)例化到游戲場(chǎng)景中。
Instantiate
實(shí)例化方法比創(chuàng)建物體的 CreatePrimitive
方法執(zhí)行效率要高很多。
在開(kāi)發(fā)過(guò)程中通常會(huì)使用 Instantiate
方法實(shí)例化對(duì)象,Instantiate
方法調(diào)用時(shí)一般與預(yù)制體 Prefab
結(jié)合使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: