unity性能优化研究

  • 一,你是否还在代码里面直接使用transform呢?

    • 不引用transform

      • on click big loop count指的是我鼠标每次点击执行多少次外循环(当前外循环次数为100次),
      • loop count是指内循环次数(当前内循环次数为10万次)。
      • 平均每次测试时间指的是执行1次外循环,也就是执行10万次内循环所花费的时间(也就是下图中被鼠标框选的代码执行10万次的时间)
      • 测试总时长除以已经测试的次数得到平均每次测试时间

可见不引用transform每次测试平均花费24.28ms

      • 这是我的测试时间的代码,用的是stopwatch(图中的sw是指stopWatch sw = new())

    • 引用transform

      • 在start方法里面引用了trans=transform

      • 下面我们使用trans每次将花费多少时间,如下图

花费16.08ms

  • 总结,通过对比24.28ms和16.08ms可以得出预先将transform引用将会大大减少运算量。

  • 二,选择合适的方法

    • 这里我先把position的新位置存起来,再赋值给transform(注意要在start里面先把把物体的位置赋值给zanchun加上下图选中的代码,从此zanchun就相当于物体的位置)

    • 如下图所示,每次只需要10.06毫秒

    • 那么为什么会比刚刚的16.08ms还要少呢?我们把那个+=展开看看!

    • 可以看到这一行代码在等号右边还进行了一次取trans.position的操作,一次这样的操作要比给zanchun赋值消耗大,所以使用zanchun来缓存trans的新位置可以减少一次"."操作达到减少消耗的目的。因此就出现了我们的10.06ms
  • 总结,通过以上分析我们就知道了更新transform.position的较佳方式,先引用transform为trans,然后用zanchun代替transform.position的新位置,就能使原本24.28ms变为10.06ms了!其他的需要写在update里面的方法都可以考虑一下是否能够先引用,是否能减少一些"."操作,这些每一帧都需要执行的方法的优化感觉还有有点必要的。啥?客户叫我们优化一下性能?我们叫客户升级硬件设备!😈

  • ps:本人第一次发文,也不是很懂,然后文中测试的时间可能有些误差但是大体是这样的!有任何问题可以直接提!批评改正都可以!最后附上代码,可以使用按钮button调用里面的showTime方法测试时间。
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using UnityEngine;
    
    public class timeTest : MonoBehaviour
    {
        Stopwatch sw = new ();
        public int loopCount = 100000;
        public int onClickBigLoopCount = 1;
        public int 已经测试的次数;
        public double 平均每次测试时间, 测试总时长;
        public Transform trans;
        public Vector3 zanchun;
        public Vector3 Vspeed;
        public float vx, vy, moveSpeed;
        void Start()
        {
            trans = transform;
            zanchun = trans.position;
        }
        public void showTime()//写入你想要测试的方法
        {
            for (int j = 0; j < onClickBigLoopCount; j++)
            {
                sw.Restart();
                for (int i = 0; i < loopCount; i++)
                {
                    zanchun+= Vspeed* Time.fixedDeltaTime;
                    trans.position = zanchun;
                }
                sw.Stop();
                已经测试的次数++;
                测试总时长 += sw.ElapsedMilliseconds;
                平均每次测试时间 = 测试总时长 / 已经测试的次数;
                UnityEngine.Debug.Log(sw.ElapsedMilliseconds);
            }
        }
    
    }
    
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity引擎是一款跨平台的游戏开发引擎,被广泛应用于游戏开发、虚拟现实、增强现实等领域。以下是Unity引擎在国内外的研究现状: 国内研究现状: 1. 游戏开发:Unity引擎在国内游戏开发领域得到了广泛应用,许多国内知名游戏公司使用Unity引擎进行游戏开发,如网易、腾讯等。研究方向主要集中在游戏性能优化、渲染技术、物理模拟等方面。 2. 虚拟现实:随着虚拟现实技术的兴起,Unity引擎在国内的虚拟现实研究也逐渐增多。研究方向包括虚拟现实交互技术、虚拟现实仿真等。 3. 增强现实:Unity引擎在增强现实领域也有一定的研究应用,主要集中在增强现实交互技术、增强现实应用开发等方面。 国外研究现状: 1. 游戏开发:Unity引擎在国外游戏开发领域应用广泛,许多知名游戏公司使用Unity引擎进行游戏开发,如Ubisoft、Electronic Arts等。研究方向主要包括游戏引擎优化、游戏物理模拟、游戏AI等。 2. 虚拟现实:Unity引擎在国外的虚拟现实研究也非常活跃,研究方向包括虚拟现实交互技术、虚拟现实应用开发、虚拟现实仿真等。 3. 增强现实:Unity引擎在增强现实领域也有一定的研究应用,主要集中在增强现实交互技术、增强现实应用开发等方面。 总体来说,Unity引擎在国内外的研究都非常活跃,涉及的领域广泛,包括游戏开发、虚拟现实、增强现实等。研究方向主要集中在性能优化、交互技术、应用开发等方面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值