当前位置: 首页 > news >正文

dnf手游版游玩感悟

      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 { "RenderType"="Opaque" }LOD 100GrabPass{"_GrabTexture"}Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct 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 k=0;k<9;k++){col += tex2D(_GrabTexture, i.uv[k])*gaussMatrix[k];}return col;}ENDCG}}
}

      原理就是GrabPass+一次高斯滤波,效果如下:

在这里插入图片描述
      我对比了一下dnf手游和一些3A游戏的做法,感觉dnf手游的实现属于效率低下且效果不好,dnf手游用了实时的_GrabPass采样,而不是像3A游戏一样用一次性的截图采样,好处是实时显示背景画面。同时dnf手游的滤波只用了一次,可能是为了性能考虑,虽然平衡了实时采样的损耗,但是效果却比较差。而3A游戏用了多次迭代滤波,对比效果则更加强烈,当然画面是“静止”的。
      继续打dnf手游,以后把这个功能美化优化一下。

http://www.lryc.cn/news/362346.html

相关文章:

  • 安卓如何书写注册和登录界面
  • 黄仁勋的AI时代:英伟达GPU革命的狂欢与挑战
  • Linux云计算架构师涨薪班课程内容包含哪些?
  • c语言:自定义类型(枚举、联合体)
  • 2024年适合GISer参加的全国性比赛
  • 番外篇-用户购物偏好标签BP-推荐算法ALS
  • 气膜体育馆的防火性能分析—轻空间
  • 什么台灯对眼睛好?一文给你分享具体什么台灯对眼睛好!
  • python-bert模型基础笔记0.1.00
  • STM32G030C8T6:EEPROM读写实验(I2C通信)--M24C64
  • opencascade 布尔运算笔记
  • GPT-4o:人工智能新纪元的突破与展望
  • 标准化、信息化、数字化、智能化、智慧化与数智化
  • 14-JavaScript中的点操作符与方括号操作符
  • 智慧大屏是如何实现数据可视化的?
  • 【JVM精通之路】垃圾回收-三色标记算法
  • Redis缓存(笔记一:缓存介绍和数据库启动)
  • OrangePi Kunpeng Pro套装测评:开箱与基本功能测试
  • RocketMQ教程(二):RocketMQ以及控制台的安装
  • 电脑记事本怎么恢复之前的内容记录
  • Windows下设置pip代理(proxy)
  • 【调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站】
  • 安装 hbase(伪分布式)
  • Angular-数组循环
  • 初级网络工程师之入门到入狱(一)
  • 数据挖掘与机器学习——分类算法
  • 变压器励磁涌流MATLAB仿真模型
  • ToxVidLLM:一个用于检测有害视频的多模态多任务框架
  • 比较(二)利用python绘制雷达图
  • Visual Studio怎么用?