搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
菜鸟追梦旅行
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
任意文件上传漏洞详解与防护_文件上传漏洞防御方法
2
【封装成组件使用】ElementUI-Dialog标题添加图标,自定义图标及文字内容_el-dialog弹窗中如何在关闭按钮旁边加一个icon图标
3
学习实践-Vicuna【小羊驼】(部署+运行)_部署vicuna
4
升级微信订阅消息必知的 5 个细节 | 附实战教程_微信订阅消息字段类型限制
5
【计算机视觉】浅谈计算机视觉中的Transformer
6
element 默认主题样式_color: mix($--tag-primary-color, $--color-white, $
7
无法定位程序输入点kernel32.dll的解决方法_无法定位程序输入点kernel32dll
8
网络原理——网络传输基本流程_网络传输原理
9
C#对Dictionary的按Value排序_c# 字典按照value值排序
10
cirros-0.3.4-x86_64-disk.img 资源分享(永久有效)
当前位置:
article
> 正文
我们来谈谈Unity3D 优化_unity 触发器 优化
作者:菜鸟追梦旅行 | 2024-02-16 15:17:48
赞
踩
unity 触发器 优化
1、模型
(1)合并模型,渲染静态窗口比较有用。
(2)100个三角形的MESH,在渲染时与1500个面数的物体是没太大差别的,所以最佳的渲染设置应该在每个模型大约1500-4000个三角面。
(3)一个Mesh 一个材质(按材质合并)。
(4)合并时可以将灯光附近的物体合并,加快渲染。
(5)实时灯光数量限制。
2、实时灯光
(1)每个被灯光照射到的GameObject都会在每一帧被渲染一次。经常被灯光照射的物体最好合并他。以免多次渲染。
(2)每一个灯光都会有一个Render Mode设置,Force Pixel 或者 Force Vertex。
夜晚打开车灯,前面的车灯就是游戏中最重要的灯光。因此,前大灯的渲染模式将会被设置为Force Pixel比较好。
如果灯光不是很重要,就可以选用"Force Vertex"的渲染模式。
3、阴影
阴影运算量比较大。如果不是做光照分析建议使用 Lighting Map。
4、角色建模优化
(1)角色应该只被用于一个蒙皮模型渲染器。当然有时候可能需要多个蒙皮的模型,但是如果你同时用两个蒙皮来作为一个角色,它就相当于你进行了两个角色的运算量。
(2)要保持MESH的材质数量尽可能低。一般建议身体的材质数量为2-3个,当然如果你有武器的材质,也是需要单独一个的,因为你需要换武器。
(3)一般来说游戏中的骨骼数量为15-60个。骨骼越少运行速度越快,一般来说30块骨骼就可以让角色动的很舒服了。如果你不是有特殊的设置,强烈建议每个角色30个骨骼。
(4)面数主要是看游戏的质量要求,500-6000个三角面是比较推荐的。如果你的游戏场景中将会出现多个角色,那么就要适当的减面。如果你想要在比较老的 机器上运行,需要更少的面。比如,半条命2游戏的角色通常是2500-5000个三角面。达到AAA标准的次时代游戏比如像是
ps
3或者XBOX360上 的游戏角色通常有5000-7000个三角面。(5)把IK控制器和FK控制器分离,当动画导入以后,IK的节点将会烘焙到FK上,其实UNITY并不需要IK节点,你可以删除它们。
(6)创建一个公共的骨架,这样就可以让你让不同的角色之间共享动作了。
(7)给每一个骨骼正确的命名,方便团队工作,也方便类似于Motionbuilder的动作软件,不然你得每次指定骨骼。
(8)UV接缝的数量尽可能少
5、脚本优化
(1)使用静态类型
当使用JavaScript很重要的优化是使用静态类型替代动态类型。Unity使用一种技术叫做类型推理的技术来自动转换JavaScript为静态类型脚本。
var foo = 5;
上面例子中的foo将自动被推断为一个整数值。因此,Unity可能使用大量的编辑时间进行优化,而不使用耗时的动态名称变量查找等。这就是为什么Unity的JavaScript执行平均速度是其他JavaScript的20倍的原因之一。
唯一的问题是有时不是所有的东西都能做类型推断,Unity将会为这些变量重新使用动态类型。通过这样,编写JavaScript代码很简单,但也会使代码运行速度变慢。
看个例子:
functionStart (){ var foo = GetComponent(MyScript); foo.DoSomething();}
这里foo将是动态类型,因此呼叫函数DoSomething必须要较长的时间,因为foo的类型未知,它必须弄明白是否支持DoSomething函数,如果支持,调用函数。
functionStart (){ var foo : MyScript = GetComponent(MyScript); foo.DoSomething();}
这里我们强制foo为指定类型,你将获得更好的性能。
(2)使用#pragma strict
现在问题是,你通常不会意识到你在使用动态类型。#pragma strict可以解决这个问题!简单的添加#pragma strict在脚本顶部,之后Unity将禁用脚本的动态类型,强制你使用静态类型。如果有一个类型未知,Unity将报告编译错误。下面,foo将在编 译时报错:
#pragma strictfunctionStart (){ var foo = GetComponent(MyScript); foo.DoSomething();}
(3)缓存组件查找
另一个优化是组件缓存。这种优化需要一些代码并且不是总有必要。但是如果你的代码真的很大,并且你需要尽可能的性能提升,它会是很好的优化。
当你通过GetComponent获取一个组件或一个变量时,Unity必须从游戏物体里找到正确的组件。这时你便能通过一个缓存组件引用到一个私有变量。
将:
functionUpdate () { transform.Translate(0, 0, 5);}
转换为:
privatevar myTransform : Transform;functionAwake () { myTransform = transform;}functionUpdate () { myTransform.Translate(0, 0, 5);}
后面的代码运行较快,因为Unity不用在每一帧寻找变换组件。同样,支持脚本组件。你可以使用GetComponent获取组件或其他快捷属性。
(4)使用内置数组
内置数组是非常快的。ArrayList或Array类很容易使用,你能轻易添加元件。但是他们有完全不同的速度。 内置数组有固定长度,并且大多时候你会事先知道最大长度然后填充它。内置数组最好的一点是他们直接嵌入结构数据类型在一个紧密的缓存里,而不需要任何额外 类型信息或其他开销。因此,在缓存中遍历它是非常容易的,因为每个元素都是对齐的。
privatevar positions : Vector3[];functionAwake () { positions = newVector3[100]; for (var i=0;i<100;i++) positions = Vector3.zero;}
(5)如果没有必要不要调用函数
最简单,最好的优化是执行最少的工作。如,当一个敌人在远处时,让他处于睡眠状态,大多时候是可行的。直到玩家靠近,可以这样处理:
functionUpdate (){// Early out if the player is too far away. if (Vector3.Distance(transform.position, target.position) > 100) return; perform real work work...}
这并不是很好的方法,虽然Unity不得不在每一帧访问update函数。更好的方法是禁用这个行为直到玩家靠近。有3中方法做这个:
1)使用 OnBecameVisible和OnBecameInvisible。这些调用与渲染系统相联系。一旦摄像机看到物体,OnBecameVisible 将被调用,不看他时,OnBecameInvisible被调用。这有时很有用。但是对于AI来讲通常是没有用的,因为你背转敌人,敌人就变成不可用了。
functionOnBecameVisible () { enabled = ***e;}functionOnBecameInvisible (){ enabled = false;}
2)使用触发器。一个简单的球形触发器能引发惊人效果。你可以调用OnTriggerEnter/Exit,当进入你想要的作用范围。
functionOnTriggerEnter (c : Collider){ if (c.CompareTag("player")) enabled = ***e;}functionOnTriggerExit (c : Collider){ if (c.CompareTag("player")) enabled = false;}
使用协同程序。Update的问题是他在每帧都发生。很可能只需要5秒钟检查一次玩家的距离。这可以节约大量的处理周期。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/94644
推荐阅读
article
Unity
Shader
-
Billboard
广告板/
广告牌
- BB树,BB投影_unity3...
Billboard
一般应用于:单位顶部的血条,名字等树,草3D中场景中的2D人物(如:《饥荒》)粒子特效Referenc...
赞
踩
article
Unity
List
的
底层
实现
及部分方法的
底层
实现
...
当我们向
List
中添加元素时,如果当前的内部数组容量不足以容纳新的元素,
Unity
会自动分配更大的内存块,并将旧的...
赞
踩
article
Unity
C#
List
中每次
取
5
个_
unitylist
获
取
5
到
8
...
需求: 数组中按顺序每次
取
5
个,到最后,如果
取
不到,从头开始
取
int k = 0; //
5
个
5
个一
取
private ...
赞
踩
article
Unity
讯
飞 之
讯
飞
星火
大
模型
的简单封装和使用(补充
讯
飞
大
模型
识图功能)_
大
模型
的
url
怎么获...
Unity
工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。这里简单的介绍
讯
飞
大
模型
的封装和使...
赞
踩
article
【
实现
1
00个
unity
特效
之4】
Unity
ShaderGraph
使用
教程与各种
特效
案例(2023...
ShaderGraph
是
Unity
中的一个可视化工具,用于创建和编辑图形着色器。其意义在于简化编写复杂着色器的过程,减少...
赞
踩
article
Unity
+
pico
4
开发
过程及问题记录,创建一个自己的
pico
安卓应用_
pico
unity
in...
自行创建
pico
安卓应用的全流程,包含手柄操作视角移动旋转等_
pico
unity
integration
sdk
开发
...
赞
踩
article
Unity
编辑器
篇|(五)
编辑器
拓展
GUILayout
类 (全面总结 | 建议收藏)_
unity
...
GUILayout
类是
Unity
GUI 的接口,并且具有自动布局功能。固定布局模式和自动布局模式。不必使用一种布局...
赞
踩
article
Unity
编辑器
篇|(七)
编辑器
拓展
EditorGUILayout
类
(全面总结 | 建议收藏)_...
专门用于
编辑器
界面的GUI
类
,提供了
Unity
内置
类
或结构体的控件函数,比如Color
类
、Vector3
类
等定义的控件。...
赞
踩
article
Unity
Editor
基础篇(二)
:
自定义
Inspector
面板_
unity
boundsf...
本文参自
:
http://mp.weixin.qq.com/s/Y5Rn5Y-5o-SB73z7Kc5f_Q 本文为本人学...
赞
踩
article
Unity
Editor
编辑器拓展 02——
GUI
与
GUI
Layout
与
Editor
GUI
、Edi...
经过学习,发现
GUI
Layout
类,
Editor
GUI
Layout
类在混合使用。并且这两个类有很多的控件并不知到如何使用...
赞
踩
article
「
Unity3D
」(
10
)
自定义
属性
面板
Inspector
详解_
unity
propertyfiel...
https://zhuanlan.zhihu.com/p/34234315EditorGUILayout.Propert...
赞
踩
article
Unity
Editor
基础篇(三):
自定义
窗口
_
unity
editor
取鼠标停留
窗口
d...
本文参自:http://mp.weixin.qq.com/s/tMSAIND4Pq0farn2jY8rwg本文为本人学习...
赞
踩
article
Unity
EditorGUILayout
总结_editorguilayout
event
...
EditorGUILayout
:提供了一些
Unity
内置类或结构体的布局组件,比如为Color类型、Vector3类型等...
赞
踩
article
Unity
-
编辑器
拓展
之
GUILayout
,Editor
GUILayout
布局 { }_
unity
...
Unity
编辑器
拓展
,创建自定义窗口,对窗口进行UI布局_
unity
guilayout
unity
guilayout
...
赞
踩
article
3D
Gaussian
Splatting
(高斯飞溅3D算法)
Windows
系统部署(简版) |导...
3D
Gaussian
Splatting
最近真的是太热了,想看看重建出来是什么样子的,于是就参考网络上各位大神给的教程...
赞
踩
article
【
Unity
】无法正常启动项目—>All
compiler
errors
have
to
be
fi...
打开项目后启动项目无法启动报错。_all
compiler
errors
have
to
be
fixed
be
fore
...
赞
踩
article
【
UNITY
】报错1_
all
conpiler
errors
have
...
All complier(编译器)
errors
have
to be fixed before you can ent...
赞
踩
article
unity3d
All
compiler
error
s
have
to be fixed befor...
unity3d
All
compiler
error
s
have
to be fixed before you can ...
赞
踩
article
unity
karting
导入时的编译问题_
all
compiler
errors
have
to
...
Unity 已解决(
compiler
error)问题描述:导入
karting
时无法按下play键,会在game页面中央...
赞
踩
article
Unity
官方
标准
资源
下载(
standard
assets
)2种方式_
unity
standard
...
简述在使用
Unity
2018以上的版本时,在Import Package,不再有
官方
的
资源
包了,变成了只有一个自定义包的...
赞
踩
相关标签
UnityBillboard
Unity广告牌
Unity广告板
Billboard
unity
游戏引擎
讯飞大模型
IFlyLLM
星火大模型
android
vr
个人开发
编辑器
c#
面试
Unity