PuerTS和HybridCLR哪個更適合開發微信小遊戲

UWATech發表於2024-08-06

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)。

PuerTS和HybridCLR哪個更適合開發微信小遊戲

前述截圖中,點選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:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

似乎是加上這兩個就可以了:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

在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:其實是值太大而變化小,肉眼沒辦法區分變化:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

感謝龍少@UWA問答社群提供了回答


Script

Q:我想建立一個通知狀態,該狀態禁用除特定輸入操作之外的所有輸入操作,但它會禁用所有輸入操作。就是我想在某個階段中只接受WASD的移動操作,禁用攻擊、跳躍的操作。

例如,我有一個向右行走的角色。

當向右行走的動畫中加入該NotifyState時,除了WASD移動輸入操作外,我希望禁用所有輸入操作,如“攻擊、跳躍”等。

在其他情況下,只能啟用其他輸入操作(例如,只能啟用跳躍輸入操作)。

我想選擇一個特定的輸入操作來啟用它,請問這要怎麼實現呢?

A:有兩種解決方案:

  1. 用Remove/Add Mapping Context節點直接移除/新增對映上下文,可以寫個函式來控制不同Mapping Context的切換,例如用個Enum作為變數,如下圖:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

PuerTS和HybridCLR哪個更適合開發微信小遊戲

  1. 給某個具體的input事件加個條件判斷,不符合條件就空著:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

復現:
案例中為第一人稱視角,滑鼠的移動會控制相機的朝向(IA_Look),當測試物體旋轉功能時,希望關閉該輸入事件,轉而使用滑鼠移動來控制物體的旋轉(IA_CheckLook)。

這裡使用了方案一,用了不同的IMC:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

PuerTS和HybridCLR哪個更適合開發微信小遊戲

之後透過鍵盤的E切換兩種IMC:

PuerTS和HybridCLR哪個更適合開發微信小遊戲

效果

針對以上問題,有經驗的朋友歡迎轉至社群交流:
https://answer.uwa4d.com/question/66a71039682c7e5cd61bf889

封面圖來源於網路


今天的分享就到這裡。生有涯而知無涯,在漫漫的開發週期中,我們遇到的問題只是冰山一角,UWA社群願伴你同行,一起探索分享。歡迎更多的開發者加入UWA社群。

UWA官網:www.uwa4d.com
UWA社群:community.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ群:793972859

相關文章