共计 3031 个字符,预计需要花费 8 分钟才能阅读完成。
1)Vulkan API 的性能及兼容性
2)FrameTiming.gpuFrameTime 获取 GPU 耗时有什么条件
3)MMO 外面的寻路网格如何制作
4)万国这种联盟边界的实现思路
这是第 314 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)
Rendering
Q:请问一下目前 Android 设施用 Vulkan API 的我的项目多吗,性能、兼容性及稳定性如何?
A:Vulkan 用的比拟好的应该是《咫尺明月刀》手游,《王者光荣》在三星平台上也开发过一段时间的 Vulkan 的版本,然而之后如同就更新打回 ES 版本了。
感激萧小俊 @UWA 问答社区提供了答复
有没有更多的开发者能提供一些 Vulkan 稳定性相干的教训分享呢?欢送大家转至社区交换。
Rendering
Q:手机为什么上获取不到 FrameTiming.gpuFrameTime 的工夫?
版本 Unity 2020.3,手机华为 Mate 30P,CPU 工夫能够显示但 GPU 工夫获取不到,测试代码如下:
using System;
using UnityEngine;
using Unity.Profiling;
public class FrameTimingsHUDDisplay : MonoBehaviour
{
GUIStyle m_Style;
// Profiling state.
private int frameCount = 0;
private float accumulatedFrameTimeCPU = 0.0f;
private float accumulatedFrameTimeGPU = 0.0f;
private float frameSampleRateMS = 0.0f;
private FrameTiming[] m_FrameTimings = new FrameTiming[1];
void Awake()
{m_Style = new GUIStyle();
m_Style.fontSize = 15;
m_Style.normal.textColor = Color.white;
}
void OnGUI()
{CaptureTimings();
var reportMsg =
$"\nCPU: {m_FrameTimings[0].cpuFrameTime:00.00}" +
$"\nMain Thread: {m_FrameTimings[0].cpuFrameTime:00.00}" +
$"\ncpuTimeFrameComplete: {m_FrameTimings[0].cpuTimeFrameComplete:00.00}" +
$"\ncpuTimePresentCalled: {m_FrameTimings[0].cpuTimePresentCalled:00.00}" +
$"\nGPU: {m_FrameTimings[0].gpuFrameTime:00.00}" +
$"\nCPUTotal: {accumulatedFrameTimeCPU:00.00}" +
$"\nCPUAverage: {(accumulatedFrameTimeCPU / frameCount):00.00}" +
$"\nGPUTotal: {accumulatedFrameTimeGPU:00.00}" +
$"\nGPUAverage: {(accumulatedFrameTimeGPU / frameCount):00.00}";
var oldColor = GUI.color;
GUI.color = new Color(1, 1, 1, 1);
float w = 300, h = 210;
GUILayout.BeginArea(new Rect(32, 100, w, h), "Frame Stats", GUI.skin.window);
GUILayout.Label(reportMsg, m_Style);
GUILayout.EndArea();
GUI.color = oldColor;
}
private void CaptureTimings()
{FrameTimingManager.CaptureFrameTimings();
uint frameTimingsCount = FrameTimingManager.GetLatestTimings(1, m_FrameTimings);
if (frameTimingsCount != 0)
{accumulatedFrameTimeCPU += (float)m_FrameTimings[0].cpuFrameTime;
accumulatedFrameTimeGPU += (float)m_FrameTimings[0].gpuFrameTime;
}
else
{
accumulatedFrameTimeCPU += Time.unscaledDeltaTime * 1000.0f;
// No GPU time to query.
}
++frameCount;
}
}
以上问题有哪位大拿也已经做过相似的测试,能够来分享一下,欢送转至社区交换:
Mesh
Q:MMO 外面的寻路网格如何制作呢?
主动生成的不精准。美术制作是拼起来的,某些点遗记连或者重叠会有问题。个别是怎么解决的呢?当初就是美术独自做的 Mesh,然而他们的 Mesh 如果由两个面点没连着,或者某个三角形的 2 个点,重叠了,就会有问题。
A:简略说下思路,把地形当做一个 2D 立体,代码创立一个 x * y 大小的 Mesh,格子大小放弃 Unity 的单位 1 就行,这个 Mesh 了你管制好笼罩这个 2D 立体,而后从 Mesh 的每个顶点坐标向下发射射线,检测碰撞,计算以后顶点的高度。算好后,就批改 Mesh 的各个顶点高度。这样,Mesh 成型后就是个大略的高空修建模型了。
而后编个简略 Shader,只显示顶点色和边际。这方面网上有很多 Shader。Mesh 就用这个 Shader,即可显示网格样子。切实不行,你 Scene 外面的网格模式。
接着就是写代码,依据鼠标点击滑动坐标,把对应的 Mesh 网格涂色即可,比方涂绿色为路面。红色为阻碍。最初计算这些格子的 x,y 坐标。用 A * 算法寻路即可。
感激牛头人不服 @UWA 问答社区提供了答复
Rendering
Q:求教一下万国这种联盟边界的实现思路。
是多个 Quad 穿插重叠后,想方法把他们穿插的区域不绘制?还是间接本人 Draw 一个这样的多边形的 Mesh?
A1:万国这个应该用的地图 16 位状态拼接的办法。能够借鉴暴雪的地图地表的生成形式。
感激 1 9 7 3-311135@UWA 问答社区提供了答复
A2:万国是 Draw Mesh。在不同的 LOD 下,精密度不同。我之前抓过 Mesh 看过。
感激承影 @UWA 问答社区提供了答复
是否还有更多的实现办法呢?欢送大家转至社区交换。
封面图来源于网络
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)