位置: 编程技术 - 正文

Unity3D教程:性能优化(unity3d documentation)

编辑:rootadmin
1、使用静态类型化 在JavaScript中,使用静态类型化(Static Typing)来代替动态类型化(Dynamic Typing)对性能的优化非常重要。unity 使用一种叫做类型推导(Type Inference)的技术,自动把JavaScript转化为静态类型代码(Statically Typed Code),而不需要你做其他任何工作。 var foo = 5;像 foo 变量将会被自动推导为整数&#;。Unity 可以完成许多编译时优化(Compile TimeOptimization)的功能,并且不进行动态变量的耗时查找。这就是 Unity 的 JavaScript的执行速度比其他JavaScript快了倍左右的原因之一。但是并不是所有变量都能进行类型推导,这时,Unity将回滚到动态类型化来处理它们。动态类型化时,在JavaScript中编写代码变得更加简单,但它的执行速度将会变慢。unity3d教程手册 例如:function Start() { var foo = GetComponent(MyScript); foo.DoSomething(); }复制代码 这儿的foo将进行动态类型化,因此,调用 DoSomething函数会耗时些。因为,编译器不知道foo的类型,它会去分析foo变量是否有 DoSomething函数,如果有,才进行调用。function Start() { var foo : MyScript = GetComponent(MyScript); foo.DoSomething(); }复制代码 这里我们强制指定了foo的类型,这样会获得更高的性能。 2、使用#pragma strict 在脚本顶部增加#pragma strict语句,会让 Unity编译器在执行该脚本时关闭动态类型化支持,强制使用静态类型化。因此,如果变量的类型不确定,将导致编译错误。例如,下面的代码在编译时会产生错误:#pragma strictfunction Start(){var foo = GetComponent(MyScript);foo.DoSomething();}复制代码 3、缓存组件查找 最优化的另一个方法是缓存组件, 但它需要编写额外的代码。如果脚本执行的次数很多,进行组件的缓存将获得更高的性能,这时编写额外的代码显然是&#;得的。在使用GetComponent函数或存取器变量(Accessor Variable)来访问一个组件时,Unit必须从游戏对象中查找相应的组件。这时, 我们可以使用私有变量来缓存一个指向该组件的引用,以便直接进行使用。Unity3D教程手册 因此,我们可以把:function Update(){transform.Translate(0, 0, 5);}复制代码 写成:private var myTransform : Transfrom; function Awake() { myTransfrom = transform; } function Update() { myTransform.Translate(0, 0, 5); }复制代码 后面的代码将运行地更快,因为 Unity 不必每帧都在游戏对象中查找 transform 组件。这对于脚本组件也同样适用。 4、使用内建数组 内建数组的执行非常快,因此我们应该使用它。尽管ArrayList和 Array类的使用方式都比较简单,但它们的处理速度却有很大差别。内建数组都有固定的大小,通常事先我们都知道这个最大&#;。内建数组最大的优势在于它能够在一个紧凑的缓冲区中直接嵌入结构体,而不需要存储额外的类型信息。因此在缓存中迭代它时,将像在内存的一条线上进行处理,非常方便和快捷:private var positions : Vector3[];function Awake(){positions = new Vector3[];for(var i=0; i<; i&#;&#;){positions[i] = Vector3.zero;}}复制代码 5、避免调用不必要的函数 最简单和有效的最优化在于减少不必要的工作。例如,当敌人离玩家很远时,我们可以让敌人静止不动,直到玩家走近它。一种较慢的处理如下:function Update(){// Early out if the player is too far waryif(Vector3.Distance(transform.position, target.position) > )return;perform real work work ...}复制代码 这种处理的不足之处在于每帧都要执行 Update 函数。一种更好的解决方案是在玩家接近敌人时才启用脚本,有三种方式来进行实现: (1)、使用 OnBecameVisible和OnBecameInvisible函数:它们的调用取决于渲染系统。当有摄像机能看到对象时,将调用 OnBecameVisible 函数;当没有摄像机能看到对象时,将调用OnBecameInvisible 函数。一般情况下这是有效的,但对于 Al 通常是无效的,因为一旦你把摄像机转开敌人时,他们可能会变得不可用。function OnBecameVisible() { enabled = true; } function OnBecameInvisible() { enabled = false; }复制代码 (2)、使用触发器:使用一个简单的球体触发器时,你可以根据球体的范围来调用【狗刨学习网】OnTriggerEnter或OnTriggerExit函数。 function OnTriggerEnter(c : Collider) { if(c.CompareTag(“Player”)) enabled = ture; } function OnTriggerExit(c : Collider) { if(c.CompareTag(“Player”)) enabled = false; }复制代码 (3)、使用协同程序:Update 函数会在每帧进行调用,我们完全可以使用协同程序来在每隔5秒钟检查一次距离,这将节省很多的资源。

推荐整理分享Unity3D教程:性能优化(unity3d documentation),希望有所帮助,仅作参考,欢迎阅读内容。

Unity3D教程:性能优化(unity3d documentation)

文章相关热门搜索词:unity 3d教程,unity3ds,unity3d官方案例,unity-3d,unity 3d 介绍,unity-3d,unity3ds,unity3ds,内容如对您有帮助,希望把文章链接给更多的朋友!

魔兽世界开发商动视暴雪迎来首个中国东家:腾讯 今年5月,腾讯北美游戏工作室裁员余人,仅保留商务合作员工,被裁人员占整体员工的%。年,腾讯游戏总裁任宇昕就曾透露,腾讯在海外收购的

unity3d动画操作以及动画实现 今天主要总结的是unity3d中内置动画操作,以及代码事件编写动画实现1.如何导入、执行外部动画在项目窗口中,首先,单击选择我们所准备的动画模型

Unity3d导出Android的apk文件时相关问题的解决办法 【狗刨学习网】今天上午着手将一个unity3d开发的小游戏build到android手机上运行,结果遇到了不少问题。首先遇到的第一个问题是在build到一半的时候,

标签: unity3d documentation

本文链接地址:https://www.jiuchutong.com/biancheng/380242.html 转载请保留说明!

上一篇:Unity3d人物的名称与血条的绘制方法(unity人物面板)

下一篇:魔兽世界开发商动视暴雪迎来首个中国东家:腾讯(魔兽世界全部开发成本)

  • 汇算清缴补交所得税会计分录小企业会计政策
  • 应付职工薪酬和工资总额的区别
  • 票种核定表怎么填写
  • 所得税亏损年限有什么规定
  • 公司代缴个税分录
  • 公司承担个人社保部分福利
  • 已经退税的增票怎么做账
  • 固定资产加速折旧税收优惠政策
  • 股权转让时的资金是什么
  • 支付佣金和手续费一样吗
  • 银行现金支票怎么填
  • 小规模纳税人怎么查询
  • 2018年收入等级划分图
  • 精创云所有者权益为负
  • 员工离职公司需要办理什么手续
  • 如何查询对方是不是老赖
  • 提成工资可以扣发吗?
  • 企业汇算清缴前的票可以入账吗
  • 装修预付款怎么做账
  • 高危行业企业要设置什么机构
  • 采用支付手续费方式委托代销商品
  • 银行承兑汇票承兑手续费是多少
  • 跨期发票如何进行会计处理?
  • 工会经费的计税依据包括单位社保吗
  • 个人出租车辆给公司个人所得税
  • 年末结转年初建账
  • 注册会计师考试科目有哪些
  • javascript中
  • 安装adsl modem必须安装什么协议
  • phpifelse
  • 工业企业制造费用核算范围
  • 巨大的冰柱造句
  • 使用二氧化碳灭火器时人应该站在什么位置
  • 博德明高沼上布朗威利山麓的废弃小屋,英格兰 (© Helen Hotson/Alamy Stock Photo)
  • 可供出售和交易性金融资产的区别
  • yii框架手册
  • 申请高新技术企业收入要多少
  • 深度学习之bottleneck layer
  • 关于申请补发工资的申请
  • 办完外经证怎么交税
  • 企业提取盈余公积属于什么会计科目
  • 表单上传文件
  • 在建工程转固定资产会计科目
  • 航天信息发票怎么抵扣
  • 收到发票未抵扣增值税
  • 公司开一般户和基本户开哪个好
  • 车辆维修费会计分录
  • 公司购车购置税可以抵扣吗
  • 个体户营业额超了怎么办
  • 税控系统技术维护费的申报抵扣方法
  • 研发费用账务调整合同怎么写
  • 新建厂房费用可以直接计入管理费用么
  • 公司发工资是私人转账的要交税吗
  • 实际验收入库是什么科目
  • 所有者权益科目有哪些
  • 收到费用报销单怎么做记账凭证
  • 关于发票丢失的处罚
  • 陈列费收取标准
  • sql server233错误
  • java连接mysql数据库教程
  • sql2005生成脚本
  • 监控iphone软件
  • win8系统无法开机如何备份数据
  • u盘制作iso镜像文件启动
  • swupdtmr.exe - swupdtmr进程是什么意思 什么作用
  • win10登录界面壁纸
  • win7电脑开机蓝屏无法进入系统怎么办
  • ,linux
  • perl uc,lc,ucfirst,lcfirst大小写转换函数
  • python的判断语句
  • 显示打包成功但是没有文件
  • vue3 todo
  • nodejs例子
  • javascript面向对象精要
  • jq动态设置css
  • android圆环进度条渐变
  • 深圳国税电子税务局网上办税服务厅
  • 全资子公司和全资子企业的区别
  • 辽宁税务微信公众号
  • 城市维护建设税税基是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设