Unity 3D 實(shí)踐案例一

2021-06-25 14:25 更新

游戲場(chǎng)景中出現(xiàn)的所有物體都屬于游戲?qū)ο?,游戲?qū)ο笾g的交互可通過(guò)腳本的控制來(lái)實(shí)現(xiàn)。

創(chuàng)建游戲?qū)ο蟮姆椒ǎ?/p>

  1. 將物體模型資源由 Project 視圖直接拖拽到 Hierarchy 面板中。
  2. 在 Unity 3D 菜單 GameObject 中創(chuàng)建 Unity 3D 自帶的游戲?qū)ο?,?Cube、Camera、Light 等。
  3. 利用腳本編程,動(dòng)態(tài)的創(chuàng)建或刪除游戲?qū)ο蟆?/li>

本案例使用第三種方法進(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í)施

  1. 使用 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)建 CubeSphere 游戲?qū)ο?,并且為這兩個(gè)游戲?qū)ο筇砑觿傮w、顏色以及位置屬性。

  1. 使用 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>

  • 創(chuàng)建預(yù)制體

首先在場(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ù)制體實(shí)例化

將預(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é)合使用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)