乐趣区

关于script:如何在运行时优雅地Reset-DOTS

1)如何在运行时优雅地 Reset DOTS
​2)用顶点着色器进行旋转的 Shader 放在 Image 上不能失常工作
3)FrameBuffer Fetch 在确定反对的手机上显示全紫
4)Unity 零碎中,Android 端判断 GamePad 文件在不在


这是第 328 篇 UWA 技术常识分享的推送,精选了 UWA 社区的热门话题,涵盖了 UWA 问答、社区帖子等技术知识点,助力大家更全面地把握和学习。

UWA 社区主页:community.uwa4d.com
UWA QQ 群:465082844

Script

Q:DOTS 环境为 1.0.0 preview
需要:以“局”为单位的战斗,单机小游戏。

目前我须要在 StartCombat 时手动拉起所有的 System,在 EndCombat 时手动 Disable 掉所有的 System。这些 System 都在 Default Inject World 中,性能勉强能实现,然而感觉不够优雅。

因为 DOTS 我的项目十分稀少,而且基本上所有的例子都没有思考过这个问题(他们都仿佛是点击运行游戏就进入战斗,没有思考到以“局”为单位),因而征求一下大家的优雅做法。

A:这个问题的收回阐明对 ECS 体系的设计思路理解欠缺,在 System 中保留了的 NativeContainer(也就是 State,跟局无关的数据)才会须要手动 ResetSystem。

真正的 ECS 设计思路应该是 System 中齐全不蕴含任何 State,不能图省事把以前的 XXXManager 的设计思路拿过去:XXXManager 设计思路指的是一个单例中有一个 Map,还有 N 多办法来增删改查这个 Map。

因而一个纯办法集的 System 不仅不须要 Reset,甚至能够动静 Reload 代码段,咱们只须要捣毁所有的 Entity CMP 即可实现 Reset。

感激题主刘泰言 @UWA 问答社区提供了答复

Rendering

Q:整体思路就是想在 UI 中实现图片的可控旋转,然而发现 Shader 放在 Image 上时,一旦产生挪动就齐全乱了。已尝试开启了 DisableBatching,不晓得问题出在哪里?也尝试过进行缩放,依然存在相似的问题。

float4 flip_base(float4 vertex, float2 uv)
{
float2 pos;
float2 center = float2(0,0); // 这个中央能够通过 BaseEffect 通过 CPU 计算后 uv1 传入,这里简化了。// 尝试过的缩放
 //vertex.xy *= _FlipProgress;
//return vertex;

float2 dt = (vertex.xy - center.xy) * 100;
float len = sqrt(dot(dt, dt));
float theta = -len * _FlipProgress * pi;
float2x2 rot =
{cos(theta), sin(theta),
-sin(theta) ,cos(theta)
};
dt = mul(rot, dt);
pos = dt + center;
vertex.xy = pos;
return vertex;
}

v2f vert(appdata v)
{
v2f o;
o.uv = v.uv;
float4 vertex = flip_base(v.vertex, o.uv);
o.vertex = UnityObjectToClipPos(vertex);
return o;
}

示例工程如下:
https://uwa-public.oss-cn-beijing.aliyuncs.com/answer/attachm…

针对以上问题,有教训的敌人欢送转至社区交换分享:
https://answer.uwa4d.com/question/63f88f1b063854059914deb8


Rendering

Q:FrameBuffer Fetch 在确定反对的手机上显示全紫,不论是 Color Fetch 还是 Depth Fetch。请问我这个 DepthFetch 实现是不是有什么漏写的货色?

针对以上问题,有教训的敌人欢送转至社区交换分享:
https://answer.uwa4d.com/question/640bbb060638540599253529


Android

Q:Android 端 Google Play 如何判断 GamePad 存在不存在大家有啥好办法吗?海内 GamePad 也可能存在多个地位吧,比方内部内存卡中?

A:要在 Android 设施上查看 GamePad 是否存在,能够应用 Android 零碎提供的 API 来查看设施中连贯的所有输出设施,并查找是否有 GamePad 输出设施。

这个办法只能检测连贯到设施的硬件 GamePad 设施。对于海内 GamePad,如果文件存储在设施上,则须要应用文件系统 API 进行查看,否则须要依赖硬件 API 查看连贯的 GamePad 设施。同时,这个代码片段须要在 AndroidManifest.xml 文件中增加权限申明能力在内部存储设备中进行搜寻。

感激清风亦枫 @UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:465082844

退出移动版