搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
菜鸟追梦旅行
这个屌丝很懒,什么也没留下!
关注作者
热门标签
article
热门文章
1
Unity API详解——GameObject类
2
机器学习和人工智能之间的区别_人工智能和机器学习的区别
3
Docker 一小时从入门到实战 —— Docker commands | Create your own image | vs VM ... 基本概念扫盲
4
ATSHA204A加密芯片攻略——使用篇
5
【vue】elementui中,el-date-picker组件只能选择当前年份中的日期_年选择器只能看得今年以后的日期
6
docker 搭建frp内网穿透以及frp详细使用_docker frp
7
Excel文件解析与超大Excel文件读写_workbook解析excel
8
Three.js基础探寻七——Lamber材质与Phong材质
9
安装opencv时报错:Could not build wheels for opencv-python which use PEP 517 and cannot be installed direc
10
excel数据分析 - 39个快捷键&10个操作技巧_excel数据分析快捷键
当前位置:
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秒钟检查一次玩家的距离。这可以节约大量的处理周期。
本文内容由网友自发贡献,转载请注明出处:
https://www.wpsshop.cn/blog/article/detail/94644
推荐阅读
article
Unity
Shader
-
Billboard
广告板/
广告牌
- BB树,BB投影_
unity3d
广告牌
理论基础
Billboard
一般应用于:单位顶部的血条,名字等树,草3D中场景中的2D人物(如:《饥荒》)粒子特效References
Unity
Shader
实例10:
广告牌
(
Billboard
)材质HeatDistortion
Shader
Tutori...
[详细]
赞
踩
article
Unity
List
的
底层
实现
及部分方法的
底层
实现
当我们向
List
中添加元素时,如果当前的内部数组容量不足以容纳新的元素,
Unity
会自动分配更大的内存块,并将旧的元素复制到新的内存中,这个过程被称为扩容。综上所述,
List
作为动态数组的
实现
,在处理元素的添加、删除和随机访问时具有显著的优...
[详细]
赞
踩
article
Unity
C#
List
中每次
取
5
个_
unitylist
获
取
5
到
8
需求:数组中按顺序每次
取
5
个,到最后,如果
取
不到,从头开始
取
intk=0;//
5
个
5
个一
取
private
List
Unity>RandomSort(
List
Unity>list){
List
Unity>jiji=n...
[详细]
赞
踩
article
Unity
讯
飞 之
讯
飞
星火
大
模型
的简单封装和使用(补充
讯
飞
大
模型
识图功能)_
大
模型
的
url
怎么获取
Unity
工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。这里简单的介绍
讯
飞
大
模型
的封装和使用,进行聊天。“
讯
飞
星火
认知
大
模型
”是科
大
讯
飞发布的产品,具有7
大
核心能力,即文本生成、语言理解、知识问答、逻辑推理、数学...
[详细]
赞
踩
article
【
实现
1
00个
unity
特效
之4】
Unity
ShaderGraph
使用
教程与各种
特效
案例(2023/
1
2/
1
更新)
ShaderGraph
是
Unity
中的一个可视化工具,用于创建和编辑图形着色器。其意义在于简化编写复杂着色器的过程,减少对具体编程语言的依赖,使艺术家和设计师可以更方便地创建各种美术效果。
使用
ShaderGraph
可以通过图形界面设置着色器...
[详细]
赞
踩
article
Unity
+
pico
4
开发
过程及问题记录,创建一个自己的
pico
安卓应用_
pico
unity
integration
sdk
开发
自行创建
pico
安卓应用的全流程,包含手柄操作视角移动旋转等_
pico
unity
integration
sdk
开发
pico
unity
integration
sdk
开发
文章目录版本说明环境搭建导出及相关设置手柄控制移动和旋转按右手柄B、A键设定位...
[详细]
赞
踩
article
Unity
编辑器
篇|(五)
编辑器
拓展
GUILayout
类 (全面总结 | 建议收藏)_
unity
guilayout
.
toggle
GUILayout
类是
Unity
GUI的接口,并且具有自动布局功能。固定布局模式和自动布局模式。不必使用一种布局模式来替代另一种布局模式,可在同一OnGUI()函数中同时使用这两种模式。当有预先设计好的界面可供使用时,采用固定布局比较合理。...
[详细]
赞
踩
article
Unity
编辑器
篇|(七)
编辑器
拓展
EditorGUILayout
类
(全面总结 | 建议收藏)_
editorguilayout
.
curvefield
专门用于
编辑器
界面的GUI
类
,提供了
Unity
内置
类
或结构体的控件函数,比如Color
类
、Vector3
类
等定义的控件。为
编辑器
在Inspector和EditorWindow中扩展提供了很大的方便。_
editorguilayout
.curv...
[详细]
赞
踩
article
Unity
Editor
基础篇(二)
:
自定义
Inspector
面板_
unity
boundsfield
本文参自
:
http://mp.weixin.qq.com/s/Y5Rn5Y-5o-SB73z7Kc5f_Q本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。
自定义
Inspector
属性面板官方连接
:
http://w...
[详细]
赞
踩
article
Unity
Editor
编辑器拓展 02——
GUI
与
GUI
Layout
与
Editor
GUI
、
Editor
GUI
Layout
属性详解_
unity
editorguilayout
经过学习,发现
GUI
Layout
类,
Editor
GUI
Layout
类在混合使用。并且这两个类有很多的控件并不知到如何使用。下面决定深入学习。
GUI
Layout
控件列表 Button 按钮 Label 创建一个自动布局标签。 S...
[详细]
赞
踩
article
「
Unity3D
」(
10
)
自定义
属性
面板
Inspector
详解_
unity
propertyfield
https://zhuanlan.zhihu.com/p/34234315EditorGUILayout.PropertyFieldLeavefeedbackpublicstaticboolPropertyField(SerializedP...
[详细]
赞
踩
article
Unity
Editor
基础篇(三):
自定义
窗口
_
unity
editor
取鼠标停留
窗口
d
本文参自:http://mp.weixin.qq.com/s/tMSAIND4Pq0farn2jY8rwg本文为本人学习上连接的笔记有改动,请点击以上链接查看原文,尊重楼主知识产权。
Unity
Editor
自定义
窗口
目标:1.了解一些属性的使...
[详细]
赞
踩
article
Unity
EditorGUILayout
总结_editorguilayout
event
EditorGUILayout
:提供了一些
Unity
内置类或结构体的布局组件,比如为Color类型、Vector3类型等定义的组件,为编辑器在Inspcctor和EditorWindow中的扩展提供了很大的方便;EditorGUILayou...
[详细]
赞
踩
article
Unity
-
编辑器
拓展
之
GUILayout
,Editor
GUILayout
布局 { }_
unity
guilayout
Unity
编辑器
拓展
,创建自定义窗口,对窗口进行UI布局_
unity
guilayout
unity
guilayout
Unity
脚本API中文版链接:https://docs.
unity
3d.com/cn/2019.4/ScriptRefere...
[详细]
赞
踩
article
3D
Gaussian
Splatting
(高斯飞溅3D算法)
Windows
系统部署(简版) |导入到
Unity
_3d
gaussian
splatting
unity
3D
Gaussian
Splatting
最近真的是太热了,想看看重建出来是什么样子的,于是就参考网络上各位大神给的教程进行复现。我先在Ubuntu20.04系统上进行复现,环境配置安装成功,也可以进行训练,就是在编译可视化界面时一直cmake...
[详细]
赞
踩
article
【
Unity
】无法正常启动项目—>All
compiler
errors
have
to
be
fixed
be
fore
entering
playmode
_all
compiler
errors
have
to
be
fixed
be
fore
you ca
打开项目后启动项目无法启动报错。_all
compiler
errors
have
to
be
fixed
be
fore
youcanenter
playmode
!unityediall
compiler
errors
have
to
be
fixed
be
fore
you...
[详细]
赞
踩
article
【
UNITY
】报错1_
all
conpiler
errors
have
Allcomplier(编译器)
errors
have
tobefixedbeforeyoucanenterplaymode。Console窗口报错:errorCS1002:;expected_
all
conpiler
errors
have
all
c...
[详细]
赞
踩
article
unity3d
All
compiler
error
s
have
to be fixed before you can enter playmode! &&
error
CS1061
unity3d
All
compiler
error
s
have
tobefixedbeforeyoucanenterplaymode!&&
error
CS1061
1、是什么?写完代码尝试进入play模式时发生错误2、为什么?看控制台报错为
error
C...
[详细]
赞
踩
article
unity
karting
导入时的编译问题_
all
compiler
errors
have
to
be
Unity已解决(
compiler
error)问题描述:导入
karting
时无法按下play键,会在game页面中央提示编译问题,注意到数种可能:和第一次勾选情况不同:第一次基本全部勾选,这里勾选项比较少,但是不能手动点,可能不是加载项的问...
[详细]
赞
踩
article
Unity
官方
标准
资源
下载(
standard
assets
)2种方式_
unity
standard
assets
简述在使用
Unity
2018以上的版本时,在ImportPackage,不再有
官方
的
资源
包了,变成了只有一个自定义包的选项,那我们应该怎么使用
官方
的
标准
资源
包呢?简述在使用
Unity
2018以上的版本时,在ImportPackage,不再有...
[详细]
赞
踩
相关标签
UnityBillboard
Unity广告牌
Unity广告板
Billboard
unity
游戏引擎
讯飞大模型
IFlyLLM
星火大模型
android
vr
个人开发
编辑器
c#
面试
Unity