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)。
![](http://uwa-ducument-img.oss-cn-beijing.aliyuncs.com/Blog/TechSharing_397/1.png)
前述截图中,点击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