搜索
查看
编辑修改
首页
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
Baidu Comate中文名——文心快码——送礼物来了(活动最后3天)_如何登入 文心快码
2
从“专家”视角看:2024年软件测试行业的八大发展趋势!_列举在ai自动化测试工具链领域,国外软件的龙头以及国产化软件的龙头
3
Stable Diffusion【二次元模型】:质量高细节丰富的动漫风格大模型anima_pencil-XL_animapencilxl
4
vue 视频添加水印_vue3视频点播嵌入水印
5
Python 中的后台进程_python后台运行
6
AIGC各个应用场景下的模型选择
7
win10家庭版安装Docker_windows10家庭版安装docker
8
三天吃透Redis面试八股文
9
php如何判断0和空_php判断0和空值
10
python-learning20--高阶教程--基础阶段--python字符串--拼接操作
当前位置:
article
> 正文
我们来谈谈Unity3D 优化_unity vector3.distance优化替代的方法
作者:寸_铁 | 2024-07-14 15:36:11
赞
踩
unity vector3.distance优化替代的方法
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/825335
推荐阅读
article
【
Unity3D
IL2CPP
】构建失败,异常:
Building
Library
\Bee\...fa...
Unity3D
打包
IL2CPP
报错C++编译问题_
unity
bee
unity
bee ...
赞
踩
article
3D
可视化
项目,选择
unity
3D
还是
three
.
js
,是时候挑明了。_前端
unity3d
...
Unity
3D
是一款跨平台的游戏引擎,可以用于开发2D和
3D
游戏。它提供了一个
可视化
的开发环境,包含了强大的编辑器和工具...
赞
踩
article
Unity
改造
编辑器
组件
字段
显示
...
Unity
改造
编辑器
组件
字段
显示
Unity
改造
编辑器
组件
字段
显示
关于
Unity
中组...
赞
踩
article
Unity
编辑器
开发...
编辑器
开发基本有四个Button在 GUI 系统里我最常用 EditorGUILayout。_unity
编辑器
开发un...
赞
踩
article
Unity
CustomEditor
自定显示
Inspector
面板
属性
_
unity
多个custo...
1.
Unity
中,我们想自定义组件在
Inspector
面板中的
属性
显示。这时候就需要用到
CustomEditor
属性
了。...
赞
踩
article
Unity
自定义
编辑器
时让
子类
继承
父类
的
Inspector
显示效果_
unity
类面板中
子类
不显示...
官方文档里的 CustomEditor函数_
unity
类面板中
子类
不显示
父类
变量
unity
类面板中
子类
不显示
父类
变量...
赞
踩
article
【
Unity
】
继承
Button
,添加公开变量怎么显示在
Inspector
_
unity
继承
butto...
一、创建一个代码叫做
Button
Base的脚本,
继承
Button
using
Unity
Engine.UI;using D...
赞
踩
article
Unity
编辑器扩展_
unity
customeditor
(
typeof
())...
在
unity
自带的下拉菜单下添加按钮 using
Unity
Editor;using
Unity
Engine;publi...
赞
踩
article
Unity
c#中
Attribute
用法详解_
unity
c#
attribute
...
举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在
Unity
的Editor上...
赞
踩
article
游戏
开发
小结——我
在
Unity
中制作了
自定义
编辑器
_
unity
自定义
编辑器
...
在
开发
自己的
游戏
时,
在
Unity
中制作
自定义
编辑器
脚本可以改变
游戏
规则。根据您的项目需求量身定制的
自定义
检查器、窗口...
赞
踩
article
Unity3D
引擎
学习
2022
资料整理(二)
_
libcstl
...
Unity3D
引擎
学习
2022
资料整理(二)
_
libcstl
libcstl
...
赞
踩
article
vue
-
unity
-
webgl
的
API
详细...
Vue-
unity
-
webgl
是一个用于在Vue.js项目中使用Unity WebGL的库。它提供了一组
API
,可以让你...
赞
踩
article
Unity3D
WEBGL
项目注意事项_
unity
webgl
...
unity
打包
webgl
项目碰到的一些问题,做个小记录_
unity
webgl
unity
webgl
...
赞
踩
article
vue
-
unity
-
webgl
在
vue
3中怎么使用...
Vue-
unity
-
webgl
是一个用于在Vue.js应用程序中嵌入Unity WebGL内容的库。在Vue 3中使用它...
赞
踩
article
【
Unity
UIToolkit
】
UIBuilder
基础教程-制作简易的
对话
系统
编辑器
3步教你玩转...
随着
Unity
开发的深入,基本的
Unity
编辑器
界面并不能满足大部分玩家高阶开发的要求。为了提高开发的效率,有针对性的定...
赞
踩
article
【
Unity3D
】使用UI
Builder
和
GraphView
创建节点
编辑器
,可用于
状态机
和对话编辑...
在使用Unity过程中,你会发现Unity提供了很多好用的图形编辑窗口,在动画机Animator和ShaderGraph...
赞
踩
article
【
Unity
】
UIElements
渲染细节,比
NGUI
/
UGUI
/
FairyGUI
好在哪?_uni...
为什么要关注
UIElements
? 因为要有运行时版本了。
UIElements
在一开始推出的时候就在文档中提到将来会...
赞
踩
article
【
unity
】UI
Builder
/UI
Element
使用实例_
uibuilder
制作
编辑器
教程...
安装 编辑 _
uibuilder
制作
编辑器
教程 示例
uibuilder
制作
编辑器
教程 示例 ...
赞
踩
article
Unity
基于
GraphView
的
对话
系统设计(一)
对话
数据与节点
编辑器
_
unity
graphv...
使用节点
编辑器
来编辑
对话
,便于策划等非程序岗参与项目开发拓展性强,可自定义节点,方便根据项目需求进行拓展使用逻辑简单、直...
赞
踩
article
Unity3D
:
创建
您的
第一个
运行时
UI
_
unity
中
build
and run时怎么让交互界面...
然后,它会
创建
可视化树的根元素和用于各个列表元素的 UXML 模板的 和 的实例。:重新加载
UI
时,包含该组件的同一...
赞
踩
相关标签
unity
c#
游戏引擎
3d
javascript
开发语言
编辑器
html
unity3d
vue.js
webgl
前端