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