ETH官方钱包

前往
大廳
主題

[Unity] List 自動(dòng)擴(kuò)充Enum的做法

%%鼠 拒收病婿 | 2023-06-03 17:38:08 | 巴幣 5446 | 人氣 1002

前言:

雖然內(nèi)容有點(diǎn)少,讓...讓我洗一篇Unity相關(guān)的文章吧 XD
程式碼在個(gè)人網(wǎng)站觀看效果較好~


Partial Class

什麼是Partial Class?

Partial Class 是在 C# 中,定義一個(gè)類別被分成的部分,每個(gè)部分可以在不同的檔案中定義,而這些部分會(huì)被編譯器合併成一個(gè)類別。這樣做的好處是可以讓多人同時(shí)開(kāi)發(fā)同一個(gè)類別,而不會(huì)互相干擾。例如,當(dāng)有一個(gè)非常大的類別時(shí),我們可以將其保存在多個(gè)檔案中,以便更輕鬆地處理類別的各個(gè)部分。
Partial class也常被用在gernerated code。今天我就來(lái)透過(guò)實(shí)作介紹一下它。

自動(dòng)擴(kuò)充Enum

C#的enum是一種值型別,它是一個(gè)命名的整數(shù)型別。它可以用來(lái)定義一組命名的整數(shù)常數(shù)。這些常數(shù)可以用作變量或?qū)傩缘闹怠H绻诔淌酱a定義enum別的變數(shù),Unity就會(huì)幫我們以下拉清單的方式讓我們可以在inspector做操作。
enum協(xié)助我們便利的呼叫它有定義的常數(shù),但每次想在裡面新增一個(gè)常數(shù)時(shí)就得打開(kāi)腳本去做修改。除了不直覺(jué)外,當(dāng)有多個(gè)人有新增常數(shù)的需求時(shí),就得委託負(fù)責(zé)該腳本的人去做修改,不然程式碼可能在修改的過(guò)程中產(chǎn)生衝突。
下面的例子是我做了一個(gè)音效管理合集ScriptableObject。ScriptableObject是Unity中的一個(gè)類別,它是一個(gè)可編輯的資源,用來(lái)存儲(chǔ)資料,例如遊戲中的設(shè)置和配置等。 我希望每個(gè)音效有自己的標(biāo)籤(tag),這樣要播放的時(shí)候就只需要透過(guò)標(biāo)籤找到對(duì)應(yīng)的音效。我可以用陣列去儲(chǔ)存標(biāo)籤,或做成enum,前者在inspector的新增/刪減操作簡(jiǎn)單,不需要修改到程式碼;後者則是取用時(shí)候簡(jiǎn)單。

要如何兼具兩者特質(zhì)呢?  我的作法是先建立空的partial類別 (避免初始狀態(tài)下編譯器報(bào)錯(cuò)):


接著在ScriptableObject以List儲(chǔ)存音效清單,並在更動(dòng)時(shí)自動(dòng)將清單上的內(nèi)容寫(xiě)成一個(gè)AudioType類別下的enum參數(shù)文字腳本。
結(jié)果:
在Scriptable Object的清單下新增項(xiàng)目如下。

自動(dòng)產(chǎn)生的腳本內(nèi)容:
public static partial class AudioType{public enum tags { Test,dsds,dfddd,} }

如此一來(lái),在其他腳本上就能直接取用。


後記:
謝謝七七贊助 ,愛(ài)你們(′▽`???)

送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應(yīng)

多古尼爾拉布拉布拉格
好厲害
2023-06-03 20:25:37
%%鼠 拒收病婿
並沒(méi)有
2023-06-05 11:05:05
樂(lè)小呈
原來(lái)腳本也可以用 IO 噢
2023-06-03 21:05:11
%%鼠 拒收病婿
歸根到底都是文字檔,比較有問(wèn)題的是runtime產(chǎn)生的東西,unity好像會(huì)鎖住git,要觸發(fā)一些機(jī)制讓他刷新或是專案重開(kāi)才會(huì)登錄到git上。
2023-06-05 11:06:16
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

相關(guān)創(chuàng)作

更多創(chuàng)作