DW做的网页用网站打不开,专升本需要考些什么科目,离线修改wordpress主题,广元网站开发dnf手游于5月21号正式上线#xff0c;作为一个dnf端游老玩家#xff0c;并且偶尔上线ppk#xff0c;自然下载了手游版#xff0c;且玩了几天。 不得不说dnf手游的优化做到了极好的程度。 就玩法系统这块#xff0c;因为dnf属于城镇地下城模式#xff0c;相比… dnf手游于5月21号正式上线作为一个dnf端游老玩家并且偶尔上线ppk自然下载了手游版且玩了几天。 不得不说dnf手游的优化做到了极好的程度。 就玩法系统这块因为dnf属于城镇地下城模式相比现在的开放世界或者半开放世界3d手游属于比较好优化的一类。 比如城镇模块的切换进出口做好加载卸载就能用时间换空间通过加载进度页面掩盖卸载当前城镇加载下个城镇的目的。城镇中的各个区域的切换就不必考虑加载卸载了一股脑都在场景里通过坐标的移动和渐变黑屏的切换手法完成。 再比如地下成的进入同样使用加载卸载和进度页面做到和城镇的互相切换。至于地下城不同房间也是黑屏渐变切换坐标移动即可。 UI界面这块dnf手游用到了动静分离和分帧加载。因为UI的绘制调用是以Canvas为单位的。所以当UI策划和UI设计师完成UI模块的设计后UI程序根据实际的UI界面业务功能将一个UI模块划分为永远不动的静态元素如各个背景一直在动的活动元素如动态生成的物品配合UI对象池的使用。特别注意此时的UI对象池设计上要考虑分帧生成的概念比如要生成100个装备图标不要在一帧内生成此时如果一帧生成一个或可配置个数再缓存使用则大大降低了单帧负载压力可以让UI界面的响应速度加快。当然已经生成生成好的复杂UI界面在退出时也可根据UI管理器的调度策略并不销毁而是移动坐标到视口外再次使用则可快速加载。 当然分帧加载的方案在需要高响应速度的地方都可以使用。 地下城战斗系统这块则是我的知识盲区了虽然我做过卡牌战斗系统但是和dnf这种手感的格斗游戏比起来简直小巫见大巫我一直觉得就手感这一块没有超越dnf的格斗游戏。 同时dnf手游有一点让我灵光一闪很小的一个地方就是子UI界面弹出背景虚化这一块如下 我已经好长时间没怎么做UI界面了在我印象中做子UI界面弹出的时候为了怕和背景UI界面产生视觉上的融合都会给一个黑色半透明背景如下 感觉dnf手游这种高斯模糊挺好虽然以前都用于3D和UI视觉分离这一块但是移植到UI与UI之间也挺不错这里顺便实现一下
Shader UIWindowPKG/UIBlurUnlitShader
{Properties{_GaussSize(Guass Size,Range(0,10)) 1}SubShader{Tags { RenderTypeOpaque }LOD 100GrabPass{_GrabTexture}Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv[9] : TEXCOORD0;float4 vertex : SV_POSITION;};int _GaussSize;sampler2D _GrabTexture;float4 _GrabTexture_TexelSize;static float gaussMatrix[9] {0.05854983,0.09653235,0.05854983,0.09653235,0.1591549,0.09653235,0.05854983,0.09653235,0.05854983};v2f vert (appdata v){v2f o;o.vertex UnityObjectToClipPos(v.vertex);float4 gpos ComputeGrabScreenPos(o.vertex);float2 guv float2(gpos.x/gpos.w,gpos.y/gpos.w);int c 1;for (int x 0; x 3; x){for (int y 0; y 3; y){o.uv[x * 3 y] guv _GrabTexture_TexelSize.xy*float2((y - c)*_GaussSize, (c - x)*_GaussSize); }}return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col fixed4(0,0,0,0);for(int k0;k9;k){col tex2D(_GrabTexture, i.uv[k])*gaussMatrix[k];}return col;}ENDCG}}
}原理就是GrabPass一次高斯滤波效果如下 我对比了一下dnf手游和一些3A游戏的做法感觉dnf手游的实现属于效率低下且效果不好dnf手游用了实时的_GrabPass采样而不是像3A游戏一样用一次性的截图采样好处是实时显示背景画面。同时dnf手游的滤波只用了一次可能是为了性能考虑虽然平衡了实时采样的损耗但是效果却比较差。而3A游戏用了多次迭代滤波对比效果则更加强烈当然画面是“静止”的。 继续打dnf手游以后把这个功能美化优化一下。