最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一種流水線形式的角色控制器實現(xiàn)思路

2023-06-27 13:05 作者:AkaC1de  | 我要投稿

靈感以及參考來自視頻:

這種方法最直觀的好處就像視頻標(biāo)題所說的那樣:奪取玩家的控制權(quán),甚至可以讓AI來接管控制器進(jìn)行操作。

Unity初學(xué)者一枚,歡迎各位大佬討論,如有錯誤還請見諒。

實現(xiàn)思路及代碼示例:

首先,就像視頻中所說的那樣,將角色的控制器與用戶輸入分開,分別獨立為PlayerController與InputSystem,通過一個新的實例InputProvider將用戶的輸入傳遞給PlayerController。

在InputSystem與PlayerController中間可以有多個其它的系統(tǒng)用來對輸入結(jié)果進(jìn)行修改,或者接管輸入,這樣便組成了一個流水線。

如果要做到這點,那么很明顯,InputProvider中就需要包括InputSystem中的各項輸入?yún)?shù),就像這樣:

InputState結(jié)構(gòu)體中包含了InputSystem基本移動所持續(xù)變化的參數(shù)
讓角色控制器中的跳躍訂閱這個事件

在得到輸入后,如果可以進(jìn)行跳躍,我們需要對事件進(jìn)行廣播,因此我們還需要一個廣播事件的方法TriggerEvent,在所有系統(tǒng)都處理完成后進(jìn)行調(diào)用。

在流水線處理完成后調(diào)用

在此基礎(chǔ)上,為了讓InputSystem等其余流水線上的系統(tǒng)能夠修改InputState中的參數(shù),我們還需要GetState方法,以及修改完成后將其返回給InputProvider中的SetState方法:

為了方便InputProvider在整個流水線中的調(diào)用,我的思路是將其設(shè)置為單例。

完整的InputProvider如下:

上方還有一個InputState結(jié)構(gòu)體沒有截取到


接下來以InputSystem為例,我們來看看流水線上的各個系統(tǒng)需要什么內(nèi)容。

首先既然要修改InputProvider中的參數(shù),我們當(dāng)然需要一個InputProcess方法對其進(jìn)行處理;并且,每個流水線上的系統(tǒng)都需要這樣做,我們可以寫一個接口,讓流水線上的系統(tǒng)來實現(xiàn)它。

因此,完整的輸入系統(tǒng)應(yīng)該是這個樣子:

將InputSystem掛載在游戲場景的GameObject上

同理,對話系統(tǒng)等需要對輸入進(jìn)行處理的系統(tǒng)都可以這樣做。


如何讓整個流水線運作起來,我們還需要一個ChainManager類來進(jìn)行管理。

ChainManager所需要包含的功能是將所有的系統(tǒng)組成一條流水線,并且調(diào)用它們所擁有的Process方法進(jìn)行處理。

我的思路是:既然系統(tǒng)是掛載在場景的GameObject上,那么可以創(chuàng)建一個GameObject數(shù)組,在編輯器的Inspecter窗口中,將各個系統(tǒng)按流水線的運作順序添加進(jìn)來。

就像這樣:

將流水線管理器掛載在場景中的GameObject上

然后,通過遍歷數(shù)組的方式,按照運作順序調(diào)用InputProcess方法進(jìn)行處理。

(如果DialogueSystem將輸入設(shè)為0,那么玩家也就不可再移動。)

完整的ChainManager如下:

按順序遍歷所有的系統(tǒng)

最后,只需要讓PlayerController調(diào)用InputProvider中的各項參數(shù)實現(xiàn)想要的效果即可。

一種流水線形式的角色控制器實現(xiàn)思路的評論 (共 條)

分享到微博請遵守國家法律
紫金县| 桐梓县| 府谷县| 凤台县| 嫩江县| 左云县| 吴忠市| 拉萨市| 家居| 遵义市| 出国| 金堂县| 阜阳市| 密云县| 颍上县| 西宁市| 得荣县| 木兰县| 江孜县| 浙江省| 康马县| 金昌市| 龙游县| 江油市| 扎兰屯市| 贵溪市| 措勤县| 饶河县| 铜梁县| 沽源县| 若尔盖县| 肇州县| 封丘县| 大荔县| 永和县| 信宜市| 连山| 翁牛特旗| 舞阳县| 九龙坡区| 高阳县|