1)PuerTS和HybridCLR哪個更適合開發微信小遊戲
2)使用了Play Asset Delivery提交版本被Google報錯
3)怎樣設定normalize來改變攝像機位置
4)如何禁用增強型輸入法中除某些輸入操作之外的輸入操作
這是第397篇UWA技術知識分享的推送,精選了UWA社群的熱門話題,涵蓋了UWA問答、社群帖子等技術知識點,助力大家更全面地掌握和學習。
UWA社群主頁:community.uwa4d.com
UWA QQ群:793972859
Script
Q:PuerTS和HybridCLR哪個更適合開發微信小遊戲?哪個更快?大家有做過相關的調研嗎?
A1:之前測過,HybridCLR的直譯器是在WASM上的,而JS用的是微信的。這倆算力估計差了50多倍。但現在市面好像沒有好的Unity和TS的框架。
JS算力高,但和WASM互動比HybridCLR低幾倍。
感謝子非魚@UWA問答社群提供了回答
A2:可以參考以下文章,但綜合來看應該還是HybridCLR更好一些:
https://zhuanlan.zhihu.com/p/646932579
感謝旋@UWA問答社群提供了回答
Platform
Q:Google Play選擇了Target API Level 34之後,如果專案使用了Play Asset Delivery功能提交版本,會被Google報錯(關於Foreground Services Permissions)。
前述截圖中,點選Go to declaration後,展示一個空列表,並沒有說明我要求了哪些Permission。
嘗試解決,在AndroidManifest中加入如下內容(想辦法去除許可權),仍然不能解決問題:
<!-- Foreground Services permissions --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" tools:node="remove" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" tools:node="remove" />
A:反編譯了一下2.2.1版本的PAD的aar:
似乎是加上這兩個就可以了:
在startForeground的地方呼叫的還是2個引數的版本。
感謝littlesome@UWA問答社群提供了回答
Rendering
Q:請問在Shader裡面,除錯了下xxx這個值,在改變攝像機位置的時候,這個xxx的值為什麼始終不變?
float3 xxx = normalize(_WorldSpaceCameraPos.xyz);
但在Shader裡面看引數_WorldSpaceCameraPos這個值是變了的。
嘗試除錯yyy值,在改變光的旋轉的時候,是有變化的:
float3 yyy = normalize(_MainLightPosition.xyz);
是不是Shader裡面normalize對位置不起作用?
我知道一個是具體位置,一個是方向,所以我對位置進行normalize處理,但發現並不生效。
以下這樣我也測試過,但也不生效:
float3 xxx = normalize(_WorldSpaceCameraPos.xyz - half3(0,0,0));
請問這個要怎麼設定呢?
A1:normalize是對方向敏感,對位置不敏感,你需要了解下向量這一圖形上的概念。
_MainLightPosition.xyz變數是位置,但如果是平行光,他其實是代表方向。你把相機的世界座標位置如下設定z=100與z=-100,這樣變化才能看到xxx改變。
簡單解釋就是CameraPos,同時也是相對於0點的方向,你如果遠離0點的位置改動一點,方向等於沒變,所以才讓你要大改位置z變-z,這個變動要很大才明顯,就和月亮每秒相對我們移動1000米,結果角度每秒幾乎不變同理。
感謝偶爾不帥@UWA問答社群提供了回答
A2:你應該用_worldSpaceCameraPos.xyz - 頂點插值出來的世界座標位置來算viewdirection。
感謝小波@UWA問答社群提供了回答
A3:你這不是圖形問題,是算數問題。你把座標列印出來,再把normalize後的座標列印出來。你原來座標數值很大,normalize之後縮放到長度一了。小幅度移動當然變化不大了。
你能用座標減去half3(0,0,0),說明你沒弄明白向量加減法。
感謝jump晃悠@UWA問答社群提供了回答
A4:其實是值太大而變化小,肉眼沒辦法區分變化:
感謝龍少@UWA問答社群提供了回答
Script
Q:我想建立一個通知狀態,該狀態禁用除特定輸入操作之外的所有輸入操作,但它會禁用所有輸入操作。就是我想在某個階段中只接受WASD的移動操作,禁用攻擊、跳躍的操作。
例如,我有一個向右行走的角色。
當向右行走的動畫中加入該NotifyState時,除了WASD移動輸入操作外,我希望禁用所有輸入操作,如“攻擊、跳躍”等。
在其他情況下,只能啟用其他輸入操作(例如,只能啟用跳躍輸入操作)。
我想選擇一個特定的輸入操作來啟用它,請問這要怎麼實現呢?
A:有兩種解決方案:
- 用Remove/Add Mapping Context節點直接移除/新增對映上下文,可以寫個函式來控制不同Mapping Context的切換,例如用個Enum作為變數,如下圖:
- 給某個具體的input事件加個條件判斷,不符合條件就空著:
復現:
案例中為第一人稱視角,滑鼠的移動會控制相機的朝向(IA_Look),當測試物體旋轉功能時,希望關閉該輸入事件,轉而使用滑鼠移動來控制物體的旋轉(IA_CheckLook)。
這裡使用了方案一,用了不同的IMC:
之後透過鍵盤的E切換兩種IMC:
效果
針對以上問題,有經驗的朋友歡迎轉至社群交流:
https://answer.uwa4d.com/question/66a71039682c7e5cd61bf889
封面圖來源於網路
今天的分享就到這裡。生有涯而知無涯,在漫漫的開發週期中,我們遇到的問題只是冰山一角,UWA社群願伴你同行,一起探索分享。歡迎更多的開發者加入UWA社群。
UWA官網:www.uwa4d.com
UWA社群:community.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ群:793972859