? ,,

亚洲午夜精品视频_国产黄大片_网站av_99亚洲伊人久久精品影院红桃_91av入口_永久免费av片在线观看全网站

聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽街道洪山路國際工業(yè)設(shè)計(jì)園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當(dāng)前位置:主頁 > 3D教程 > 圖文教程

Unreal Engine4鍵位更換以及對應(yīng)思考

來源: 52vr | 責(zé)任編輯:傳說的落葉 | 發(fā)布時間: 2019-06-13 08:16 | 瀏覽量:

Unreal Engine 4 —— 鍵位更換以及對應(yīng)思考

 
這篇文章介紹了如何在UE4中實(shí)現(xiàn)更換鍵位的方法。
 
介紹
 
在大多數(shù)的PC游戲中,為了適應(yīng)大多數(shù)玩家,往往會提供鍵位設(shè)置的接口。雖然也有例如生化危機(jī)系列游戲提供的是幾個輸入類型供玩家自己選擇,然而還是自定義輸入的方法更加普遍。
 
需要注意的是,很多的PC游戲的輸入控制都是即支持手柄,又支持鍵盤\鼠標(biāo)操控的。但是往往要么只啟用手柄操作,要么只啟用鍵盤\鼠標(biāo)操作。關(guān)于這一塊的詳細(xì)內(nèi)容可以參考我以前的博客:游戲輸入控制的五條黃金法則
 
前置問題
 
在了解虛幻4的鍵位更換功能之前,首先要思考一些問題,這些問題確定了之后,才能進(jìn)一步的去實(shí)現(xiàn)鍵位的更換功能。
 
鍵位配置是否寫入存檔?持久化保存該如何進(jìn)行? 
UE4的鍵位配置是默認(rèn)讀取對應(yīng)的Input.ini文件的,因此在進(jìn)行鍵位配置的時候,比較通用的方法是寫入對應(yīng)的ini文件。但是如果鍵位配置寫入存檔就是另一套方法了,甚至不需要進(jìn)行持久化的保存。
 
輸入設(shè)備的切換該如何抉擇? 
參考我以前的博客:游戲輸入控制的五條黃金法則
 
組合鍵? 
UE4內(nèi)置的組合鍵有ctrl,shift,cmd與alt,這些鍵可以與普通按鍵進(jìn)行組合。在項(xiàng)目中是否需要進(jìn)行這些組合鍵的應(yīng)用?
 
Axis與Action的歸一? 
手柄的搖桿Axis通常對應(yīng)著−1.0~1.0或者0.0~1.0的值,但是鍵鼠上的Action往往只有一個固定的值。例如游戲中的停~走~跑操作在手柄上往往是半推~全推搖桿實(shí)現(xiàn)的,但是放在鍵盤上則只有一個輸入值(通常為最大值,也就是跑)。某些游戲中(RPG游戲居多)可能會預(yù)設(shè)一些固定的值用于切換走/跑切換,但是畢竟還是離散的值,與Axis有本質(zhì)的區(qū)別。
 
是否允許一個鍵來映射多個操作? 
例如允許將一個鍵用于多個操作?這樣一來針對于Input Consumption需要有一系列的配置。
 
在上面這些問題都有了答案,或者說設(shè)計(jì)方案之后,鍵位更換的功能才好真正實(shí)現(xiàn)。
 
鍵位更換在UE4中的具體實(shí)現(xiàn)
 
其實(shí)……具體實(shí)現(xiàn)的方法并不太難,以ActionMapping的重新綁定為范例,代碼如下:
 

[代碼]:

01 UInputSettings* Settings = const_cast<uinputsettings*>(GetDefault<uinputsettings>());
02 TArray<finputactionkeymapping>& Axes = Settings->ActionMappings;
03  
04 for (auto& Mapping : Axes)
05 {
06     // 篩選對應(yīng)的action mapping
07     if (Mapping.ActionName == MappingName && Mapping.bAlt == Alt && Mapping.bCmd == Cmd && Mapping.bCtrl == Ctrl && Mapping.bShift == Shift && Mapping.Key == Key)
08     {
09         auto actionMap = Mapping;
10         actionMap.ActionName = NewData.MappingName;
11         actionMap.bAlt = NewData.Alt;
12         actionMap.bCmd = NewData.Cmd;
13         actionMap.bCtrl = NewData.Ctrl;
14         actionMap.bShift = NewData.Shift;
15         actionMap.Key = NewData.Key;
16  
17         // 重構(gòu)KeyMap
18         for (TObjectIterator<uplayerinput> It; It; ++It)
19         {
20             // 之所以這么做是希望更改之后立刻生效
21             It->RemoveActionMapping(Mapping);
22             It->AddActionMapping(actionMap);
23             It->ForceRebuildingKeyMaps();
24         }
25         // 在這里更改Mapping的值,從而將其持久化存儲
26         Mapping.ActionName = NewData.MappingName;
27         Mapping.bAlt = NewData.Alt;
28         Mapping.bCmd = NewData.Cmd;
29         Mapping.bCtrl = NewData.Ctrl;
30         Mapping.bShift = NewData.Shift;
31         Mapping.Key = NewData.Key;
32  
33         // 持久化儲存
34         Settings->SaveKeyMappings();
35     }
36 }</uplayerinput></finputactionkeymapping></uinputsettings></uinputsettings*>
 
各種東西似乎都……在注釋中寫好了,看代碼就行……
 
需要注意的問題
 
有一個踩過的坑,需要注意一下。
 
當(dāng)初為了避免過多的Cast導(dǎo)致性能的消耗,我們將PlayerController的實(shí)例進(jìn)行了靜態(tài)存儲,但是最終發(fā)現(xiàn)好像……會導(dǎo)致亂七八糟的問題……
 
 


相關(guān)文章
網(wǎng)友評論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

關(guān)閉

全部評論:0條

推薦
熱門
主站蜘蛛池模板: 看全色黄大色黄大片色黄看的 | 午夜影院在线视频 | 视频一区免费 | 男人的天堂色 | 2019年中文字字幕在线看不卡 | 欧美天堂视频 | 无码国产色欲xxxx视频 | 思思久久q6热在精品国产 | 91九色视频无限观看免费 | 欧美交换配乱吟粗大 | 无码人妻久久一区二区三区 | 亚洲第四页| 国产精品国产三级国产av品爱网 | 丰满熟妇乱又伦在线无码视频 | 久久精品无码一区二区无码 | 国产又色又爽又刺激在线播放 | 午夜成人免费影院 | www.色午夜.com | 四虎成人精品无码永久在线 | 日韩美女一级视频 | 伊人99综合| 日本在线观看网址 | 亚洲国产成人一区二区三区 | 亚洲精品久久久久久久久久久网站 | 中文字幕婷婷 | 亚洲成a人片在线观看中 | 亚洲熟妇自偷自拍另欧美 | 四虎+网站+影院+网站 | 亚洲欧洲无卡二区视頻 | 亚洲欧美精品suv | 图片小说综合 | 精品欧美аv高清免费视频 精品欧美成人bd高清在线观看 | 国产乱肥老妇精品视频 | 天天搞天天操 | 免费福利在线视频 | 国产亚洲精久久久久久无码 | 日本黄色激情 | 香蕉久久ac一区二区三区 | 免费观看的无遮挡av | 亚洲色大成网站www永久一区 | 精品视频在线观看 |