国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第十六章 Unity 預制件prefab(上)

這篇具有很好參考價值的文章主要介紹了第十六章 Unity 預制件prefab(上)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本章節(jié)我們介紹一下“預制件”,也有人叫“預制體”,也就是Prefab。在游戲世界中,那些自然環(huán)境的游戲?qū)ο?,我們可以提前?chuàng)建在場景中,這個大家能夠理解。但是,有些游戲?qū)ο螅枰鶕?jù)游戲邏輯來通過代碼生成,例如刷新怪物,觸發(fā)機關(guān)等等。Unity 的預制件系統(tǒng)允許創(chuàng)建、配置和存儲游戲?qū)ο蠹捌渌薪M件、屬性值和子游戲?qū)ο笞鳛榭芍赜觅Y源(它的本質(zhì)就是一個資源文件,相當于編程里面的類文件,通過它可以實例化多個對象)。預制件資源充當模板,在此模板的基礎(chǔ)之上可以在場景中創(chuàng)建新的預制件實例。對預制件資源所做的任何編輯都會自動反映在該預制件的實例中,因此可以輕松地對整個項目進行廣泛的更改,而無需對資源的每個副本重復進行相同的編輯。

預制體是用來存儲一個游戲?qū)ο蟮乃薪M件,屬性和子對象,這樣就成為了一個可重復使用的資源文件。當需要多次重復使用這個游戲?qū)ο髸r,便可以使用預制體來創(chuàng)建。舉一個簡單的例子,我們會在游戲世界中創(chuàng)建同一種怪物模型的實例,顯然我們不可能將怪物模型一個個的拖拽到游戲世界中,并且這些怪物會死亡消失,也會重新刷新。因此,合理的解決方案應該是,每一種怪物都應該是一個預制體,然后我們可以通過預制體來創(chuàng)建不同的怪物實例,這就是預制體的優(yōu)勢。當然,預制體更重要的是對游戲?qū)ο蟮摹胺庋b”,預制體不僅僅是網(wǎng)格模型,同時還可以包含各種功能組件以及腳本,這樣的預制體就能承載更多的內(nèi)容。

接下來,我們回到ScriptDemo項目工程中,創(chuàng)建一個新的“SampleScene7”場景,然后創(chuàng)建一個“Cube”游戲?qū)ο蠛汀癈ubePrefab.cs”腳本文件,并將其附加在一起。

第十六章 Unity 預制件prefab(上)

?第十六章 Unity 預制件prefab(上)

接下來,我們在“CubePrefab.cs”腳本文件實現(xiàn)Cube自旋轉(zhuǎn)的代碼,如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubePrefab : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(new Vector3(0, 1, 0));
    }
}

為了更好的觀察Cube,我們將攝像機向上Y軸方向移動5個單位,且X軸方向旋轉(zhuǎn)20度,這樣就能俯視Cube了。

第十六章 Unity 預制件prefab(上)

接下來,我們保持相機選中狀態(tài),我們點擊菜單欄“GameObject”->“Align View to Selected”

第十六章 Unity 預制件prefab(上)

然后我們Play當前工程,效果如下:

第十六章 Unity 預制件prefab(上)

接下來,我們要做的就是創(chuàng)建十個這樣的旋轉(zhuǎn)立方體,粗暴的辦法就是再創(chuàng)建9個Cube,然后將“CubePrefab.cs”腳本文件分別附加到這9個Cube身上,顯然這種方式不太合理。此時,我們就需要借助預制體來實現(xiàn)了。首先我們要創(chuàng)建預制體,創(chuàng)建的方法非常簡單,就是將“Hierarchy”視圖中的Cube游戲?qū)ο笸献У健癙roject”視圖中。

第十六章 Unity 預制件prefab(上)

這樣一個名稱為“Cube”的預制體就創(chuàng)建成功了,同時在“Hierarchy”視圖中“Cube”的名稱顏色會變成藍色,代表這個名稱為“Cube”的游戲?qū)ο笫且粋€預制體實例。

第十六章 Unity 預制件prefab(上)

請注意,預制體本質(zhì)是一個資源文件,也就是“Project”視圖中的“Cube”文件,如果我們?nèi)ノ覀兊墓こ棠夸浵碌腁sset文件夾下面查看,就能看到一個“Cube.prefab”的預制體文件。

第十六章 Unity 預制件prefab(上)

那么“Hierarchy”視圖中“Cube”又是什么呢,它其實就是預制體的一個實例而已。我們可以將預制體理解為面向?qū)ο笞兂芍械念愇募惥褪且粋€模板,我們可以根據(jù)這個類實例化很多很多的對象,這些對象都擁有類中實現(xiàn)的功能,只是每一個對象的內(nèi)部數(shù)據(jù)不一樣。既然“Cube.prefab”是一個預制體,它與類模板概念相同,我們就可以根據(jù)這個預制體來實例化很多很多的游戲?qū)ο?,也就是“Hierarchy”視圖中“Cube”。將一個預制體實例化為一個游戲?qū)ο?,需要借助“GameObject.Instantiate”方法,該方法有三個參數(shù),第一個就是預制體文件,第二個就是游戲?qū)ο蟮奈恢茫谌齻€就是游戲?qū)ο蟮某?。接下來,我們來實現(xiàn)這個功能。我們首先刪除調(diào)當前場景中的“Cube”游戲?qū)ο?。然后,我們?chuàng)建一個“CubePrefabManager.cs”的腳本文件,并將其附加到攝像機上面去。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class CubePrefabManager : MonoBehaviour
{
    // 預制體文件
    public GameObject prefab;

    // 預制體實例數(shù)量
    private int count;

    // Start is called before the first frame update
    void Start()
    {
        // 加載預制體文件
        prefab = AssetDatabase.LoadAssetAtPath("Assets/Cube.prefab", typeof(GameObject)) as GameObject;
    }


    // Update is called once per frame
    void Update()
    {
        // 按下空格鍵就生成一個自旋轉(zhuǎn)的Cube
        if (Input.GetKeyDown(KeyCode.Space))
        {
            count++;
            Vector3 pos = new Vector3(count * 2, 0, 0);
            GameObject.Instantiate(prefab, pos, Quaternion.identity);
        }
    }
}

不要忘了,將“CubePrefabManager.cs”腳本附加到相機上。以上代碼有三點需要解釋。第一,我們的prefab文件需要載入,它的本質(zhì)就是GameObject類型。第二,我們按下空格鍵來根據(jù)prefab來創(chuàng)建一個游戲?qū)ο髮嵗5谌?,?chuàng)建的prefab實例的位置依次向右遞增,但是他們的朝向(旋轉(zhuǎn))統(tǒng)一是Quaternion.identity(不旋轉(zhuǎn)/默認值)。接下來,我們就可以Play當前工程,查看效果。

第十六章 Unity 預制件prefab(上)

當我們實例化出來四個Cube游戲?qū)ο髮嵗臅r候,他們的名稱都是“Cube(Clone)”,也就是復制克隆出來的。這個應該比較容易理解。我們從Hierarchy層次面板中就能看到。

第十六章 Unity 預制件prefab(上)

最后我們要說的就是關(guān)于prefab文件的加載。上面的代碼中,我們使用了AssetDatabase.LoadAssetAtPath方法(還有使用“using UnityEditor;”)。其實我們我們可以將“Cube.prefab”文件放置工程目錄“Assets/Resources”下。這個“Resources”目錄是一個特殊的目錄,它對應Unity API中的Resources類,該類有一個Load靜態(tài)方法,可以直接讀取下面的預制體文件。接下來,我們就創(chuàng)建“Resources”,并將“Cube.prefab”復制到這個文件夾下,重命名為“Cube2.prefab”,如下圖所示:

第十六章 Unity 預制件prefab(上)

然后我們修改“CubePrefabManager.cs”代碼:

// 加載預制體文件
//prefab = AssetDatabase.LoadAssetAtPath("Assets/Cube.prefab", typeof(GameObject)) as GameObject;
prefab = Resources.Load<GameObject>("Cube2 ");

當然,此方法并不只是加載prefab資源文件,還可以加載其他文件(例如貼圖)。注意,這個方法不需要我們使用“using UnityEditor;”,并且參數(shù)為預制件名稱(不需要文件后綴)。為了更好的管理這些資源文件,我們可以繼續(xù)在“Assets/Resources”規(guī)劃子目錄管理他們。那么,在使用Resources.Load加載的時候,只需要在參數(shù)中按照“xxx/yyy”方式加載即可。這種方式還是比較推薦的。接下來,我們Play工程,看到之前一樣的效果了。

還有兩一種更加省時省力的辦法。由于我們聲明的prefab變量是public類型,因此可以在Inspector檢視面板中編輯這個prefab變量。我們在Hierarchy層次視圖中點擊選中相機,然后查看Inspector檢視面板,如下所示:

第十六章 Unity 預制件prefab(上)

然后,我們可以直接將“Project”視圖中的“Cube”預制體拖拽到這個屬性值上面。

第十六章 Unity 預制件prefab(上)

這樣,我們就不用使用代碼來加載這個預制體文件啦。

我們注釋調(diào)start中的代碼,如下

    // Start is called before the first frame update
    void Start()
    {
        // 加載預制體文件
        //prefab = AssetDatabase.LoadAssetAtPath("Assets/Cube.prefab", typeof(GameObject)) as GameObject;
        //prefab = Resources.Load<GameObject>("Cube2");
    }

接下來,我們重新Play工程,就能看到之前一模一樣的效果了。我們就不添加效果圖了。文章來源地址http://www.zghlxwxcb.cn/news/detail-478993.html

到了這里,關(guān)于第十六章 Unity 預制件prefab(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • unity加載prefab預制體

    在一個項目中會有很多生成預制體的情況,就可以寫一個專門生成預制體的腳本,然后把預 制體存在Resources資源文件夾 中,只用傳參數(shù),參數(shù)為要生成的預制體的路徑就可以了。 下面是生成UI預制體,需要轉(zhuǎn)換一下位置, 把Transform轉(zhuǎn)換成RectTransform 。 注意創(chuàng)建的類和函數(shù)都

    2024年02月19日
    瀏覽(26)
  • Unity一鍵制作預制體Prefab一鍵修改Prefab屬性

    Unity一鍵制作預制體Prefab一鍵修改Prefab屬性

    模型文件結(jié)構(gòu)如下圖(經(jīng)測試放模型的文件夾名字要和模型名字一致,不然找不到,你也可以修改代碼測試其他方法)

    2024年02月16日
    瀏覽(28)
  • 詳解Unity預制體和預制體變體(Prefab Variant)

    詳解Unity預制體和預制體變體(Prefab Variant)

    一、預制體變體的創(chuàng)建 二、預制體與變體的綁定 三、預制體到變體的繼承關(guān)系 四、變體常見API 五、變體用途 通過一個預制體創(chuàng)建預制體變體可以通過以下兩種方法: 1.在需要創(chuàng)建變體的預制體上右鍵選擇圖中選項即可在預制體當前目錄下創(chuàng)建預制體變體。 ?2.通過腳本進行

    2024年01月17日
    瀏覽(27)
  • 【Unity】 預制體Prefab使用說明

    在 Unity 中,Prefab 是一個可以預先制作并重復使用的 GameObject 或組件集合,Prefab 中的 GameObject 可以有子對象和其他組件。與場景中直接創(chuàng)建 GameObject 不同,Prefab 可以在多個場景或項目中重復使用,并且可以輕松地進行修改和更新。Prefab 可以節(jié)省開發(fā)時間,并 提高游戲的可維

    2024年02月16日
    瀏覽(20)
  • Unity 之預制體(Prefab)的解釋以及用法

    Unity 之預制體(Prefab)的解釋以及用法

    Unity中的預制體(Prefab)是一種重要的資源類型,用于創(chuàng)建和管理游戲?qū)ο螅℅ameObject)。預制體是一種可重用的模板,可以在游戲場景中多次實例化,使開發(fā)人員能夠更輕松地創(chuàng)建和管理大量相似的對象。以下是有關(guān)Unity預制體的詳細介紹,包括其作用和用法: 作用: 重用性

    2024年02月09日
    瀏覽(33)
  • [unity3D]什么是預制體(Prefab)?如何制作預制體?如何導出預制體?預制體變體是什么?

    [unity3D]什么是預制體(Prefab)?如何制作預制體?如何導出預制體?預制體變體是什么?

    將物體轉(zhuǎn)成預制體之后,就可以以此為模板創(chuàng)建非常多個和預制體一模一樣的物體了,其實就是復制。在游戲中我們都見過很多一模一樣的物體,只是放置的位置或者其他一些參數(shù)不太一樣,我們不可能一個一個從方塊,球開始慢慢建造,所以就出現(xiàn)了預制體,幫助我們減少

    2024年02月02日
    瀏覽(89)
  • 【Unity 3D】游戲?qū)ο?、添加刪除獲取組件、預制體Prefabs簡介

    覺得有幫助請點贊關(guān)注收藏~~~ 創(chuàng)建3D對象 選擇GameObject -3D Object命令 選擇要創(chuàng)建的3D對象 下面是各個對象的意思 cube 立方體 sphere 圓柱體 capsule 平面 cylinder 膠囊體 plane 球體 quad 面片 ?可以為上面創(chuàng)建的對象添加剛體組件 選中該對象 在Inspector視圖中,單機add component按鈕, 選在

    2024年02月04日
    瀏覽(90)
  • [Unity]將物體(gameObject)與預制體(Prefab)取消關(guān)聯(lián),解綁

    [Unity]將物體(gameObject)與預制體(Prefab)取消關(guān)聯(lián),解綁

    在如下Hierarchy窗口中右鍵點擊要解綁的物體 ?在右鍵菜單中選擇prefab-》Unpack即可將對象與預制體解除關(guān)聯(lián) ? ? ?

    2024年02月11日
    瀏覽(22)
  • Unity快速入門教程-詳解預制體(Prefab)及其實例化Instantiate

    Unity快速入門教程-詳解預制體(Prefab)及其實例化Instantiate

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 博主剛學習unity的時候,在網(wǎng)上找預制體相關(guān)的博客,可是很難找到一篇凝練且通俗易懂介紹預制體的文章,浪費了不少時間且難以理解一些文章的內(nèi)容。自己摸索學習了一段時間過后,總算對預制體有

    2024年02月02日
    瀏覽(25)
  • 第十六章 Redies

    2024年04月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包