Unity Dotween使用优化,1ms优化

本文分享了项目中如何通过精简掉血飘字的动画逻辑,从使用Dotween切换为自定义EaseManager.Evaluate,从而节省每帧约1~2ms的性能,降低内存消耗。这种优化策略在保持代码清晰度与性能之间的平衡,适用于对逻辑密集型场景的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在继续做性能优化,后续空下来尽量总结一些小的优化点分享出来。这些都不是大的优化,只是积少成多的改善。

看过我之前文章的朋友,知道我们优化的目标是,战斗60帧(不开后处理的情况下,千元机达到),影响每帧消耗的东西很多,除去美术效果的消耗,程序能完全控制的部分,就只有逻辑的实现了。

所以,对于一个16ms一帧的需求,能省一点是一点。在最近项目优化中,我们尽量优化逻辑部分的消耗,这次就着手优化了战斗的掉血飘字

掉血飘字示意

在最早做掉血飘字的时候,因为需求比较简单,我们就简单实用一个dotween来做了飘字的位移。随着需求逐渐变化,需要根据各种战斗伤害参数(暴击,血量,伤害类型等)来调整掉血飘字的淡入,移动,缩放,淡出等各种效果。逐渐演变成为需要多个Dotween来实现效果。

当同屏的怪物数量变多,一个飘字需要4~5个dotween,十几个怪,就会有50~100个的dotween。这时候,dotween本身,会有接近每帧 1ms 的性能消耗。且因为dotween内部的管理方式,会导致根据当前dotween的数量,每帧都有一定的内存分配(dotween会维护一个list,导致一些分配,几十到上百byte)。

优化思路其实很简单,就是不使用dotween,而只使用dotween的核心逻辑,即EaseManager.Evaluate。

将类似这样的用法(原代码片段示意):

    _currTextMesh.DOColor(_startColor, _fadeDuration);
    _dropText.transform.DOScale(_baojiScale, _scaleDuration);
    _dropText.transform.DOMoveY(_toY, _moveDuration);

改为这样的用法:

    float passedTime = time - startTime;
    float v = EaseManager.Evaluate(Ease.Linear, null, passedTime, _scaleDuration, 0, 0);
    float scaleValue = Mathf.Lerp(_scale, _toScale, v);
    _dropText.transform.localScale = new Vector3(scaleValue, scaleValue, scaleValue);

    float v = EaseManager.Evaluate(Ease.InBounce, null, passedTime, _moveDuration, 0, 0);
    Vector3 tempPos = _dropText.transform.position;
    tempPos.y = Mathf.Lerp(_pos.y, _toY, v);
    _dropText.transform.position = tempPos;

这里可以使用update每帧更新,或者使用Coroutine,更方便管理逻辑。

使用这种方式,代码没有原来的那么好理解,调用上也不够原来优雅简单。但是性能是能节省下来的,这1ms的节省,还是很可观的,且能减少dotween每帧的内存分配。

我们已经把战斗中用到dotween的大部分地方(掉血,掉金币等)改为这种方式。在安卓打包测试后,如果上面表述的战斗情况下(同时存在十几个掉血飘字,几十个dotween),每帧能节省1~2ms的调用。

严格意义上,这篇文章讲的并非优化了Dotween本身的性能,而是基于需求,优化了对Dotween的使用方式。在性能和代码可读性的取舍中,我们倾向于向一些可高内聚的小模块榨取性能,给一些需要更清晰逻辑维护的部分留出性能空间。

 

<think>好的,用户现在问的是如何使用Unity引擎做游戏。之前他们问过C#和C++的区别,现在转到Unity,可能是因为他们想开始实际开发游戏,尤其是考虑到C#在Unity中的应用。我需要先确定用户的背景,他们可能已经对编程有一定的了解,特别是C#,但可能对游戏开发流程不熟悉。 首先,用户可能需要一个从零开始的步骤指南,涵盖安装、基本概念、脚本编写到发布的整个流程。需要结构化地分步骤讲解,每个步骤的关键点要明确,比如安装Unity、创建项目、了解界面、导入资源、编写脚本、物理系统、UI设计、测试和优化、发布等。 另外,用户可能对Unity的界面和工具不太熟悉,所以需要解释核心窗口如Scene、Game、Hierarchy、Inspector、Project等的作用。同时,要强调C#在Unity中的作用,因为用户之前学过C#和C++的区别,这里可以联系到C#在Unity脚本中的使用。 用户可能还需要知道如何获取资源,比如Asset Store的使用,以及如何处理2D和3D游戏的不同需求。物理系统和UI部分需要简明扼要,说明基本组件和事件绑定方法。测试和优化部分要提醒性能调整的重要性,比如使用Profiler工具。最后,发布步骤要简单说明不同平台的设置。 需要避免过于技术性的术语,保持解释通俗易懂,同时确保步骤逻辑清晰,用户能按步骤操作。可能还需要提示学习资源,如官方文档和社区支持,帮助用户进一步学习。确认回答的结构是否覆盖了从环境搭建到发布的整个流程,并且每个部分都有足够的细节指导用户行动。</think>以下是使用Unity引擎开发游戏的完整指南(含操作示例): --- ### 一、环境搭建 1. **安装Unity Hub**: - 访问[Unity官网](https://unity.com)下载Unity Hub - 安装时勾选`Visual Studio`(代码编辑器)和所需平台模块(如Android/iOS) 2. **创建新项目**: ```bash Unity Hub → 新建 → 选择3D/2D模板 → 设置项目路径 → 创建 ``` --- ### 二、核心界面认知 | 窗口名称 | 快捷键 | 功能说明 | |------------|----------|----------------------------| | Scene视图 | Ctrl+1 | 3D场景编辑窗口 | | Game视图 | Ctrl+2 | 玩家视角预览窗口 | | Hierarchy | Ctrl+4 | 显示当前场景所有游戏对象 | | Inspector | Ctrl+3 | 显示选中对象的属性参数 | | Project | Ctrl+5 | 项目资源管理器 | | Console | Ctrl+Shift+C | 调试信息输出窗口 | --- ### 三、基础开发流程 #### 1. 场景搭建 - **创建地形**:`GameObject → 3D Object → Terrain` - **添加光源**:`右键Hierarchy → Light → Directional Light` - **导入模型**:将`.fbx`文件拖入Project窗口的`Assets`文件夹 #### 2. 脚本控制(C#) ```csharp // PlayerMovement.cs using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 5f; void Update() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); transform.Translate(new Vector3(h, 0, v) * speed * Time.deltaTime); } } ``` *将脚本拖拽到Hierarchy中的游戏对象即可生效* #### 3. 物理系统 - **添加碰撞体**:选中物体 → Inspector → Add Component → `Box Collider` - **刚体组件**:Add Component → `Rigidbody`(启用重力效果) - 触发检测代码: ```csharp void OnTriggerEnter(Collider other) { if(other.CompareTag("Coin")){ Destroy(other.gameObject); } } ``` #### 4. UI系统 1. 创建Canvas:`右键Hierarchy → UI → Canvas` 2. 添加按钮:`Canvas右键 → UI → Button` 3. 事件绑定: ```csharp // 在脚本中声明 public Button myButton; void Start() { myButton.onClick.AddListener(() => { Debug.Log("按钮被点击!"); }); } ``` --- ### 四、资源管理技巧 1. **素材规范**: - 纹理尺寸保持2的幂次(256x256, 512x512等) - 音频文件使用`.wav`或`.ogg`格式 - 3D模型面数控制在合理范围(移动端建议<5万面) 2. **资源商店**: - 通过`Window → Asset Store`访问官方资源市场 - 推荐插件: - DOTween(动画插件) - Cinemachine(智能相机系统) - Odin Inspector(编辑器增强工具) --- ### 五、调试与优化 1. **性能检测**: - 打开`Window → Analysis → Profiler` - 重点关注: - CPU Usage < 30ms/帧 - GPU Usage < 60ms/帧 - Memory Usage < 1GB(移动端) 2. **常用优化手段**: - 使用对象池管理频繁创建的物体 - 将静态物体标记为`Static`启用批处理 - 压缩纹理设置:`Texture Type → Advanced → Format = ASTC` --- ### 六、项目发布 1. **平台设置**: - `File → Build Settings → 选择目标平台` - 不同平台需要安装对应模块(通过Unity Hub添加) 2. **打包流程**: ```bash Build Settings → 添加场景 → 点击Build → 选择输出路径 ``` - PC端生成`.exe`文件 - Android端生成`.apk`文件 - WebGL生成浏览器可运行文件 --- ### 学习建议路线 1. **新手阶段**(2周): - 完成Unity官方`Roll-a-ball`教程 - 掌握C#基础语法 - 理解Prefab(预制体)的使用 2. **进阶阶段**(1个月): - 学习Shader编写(HLSL语言) - 掌握Addressables资源管理系统 - 实践Unity DOTS(面向数据技术栈) 3. **实战阶段**: - 参加Game Jam活动(如Ludum Dare) - 在GitHub发布开源项目 - 尝试接入SDK(如Firebase、AdMob) --- **推荐学习资源**: - 官方手册:[Unity User Manual](https://docs.unity3d.com/Manual/index.html) - 视频教程:B站搜索"Unity官方新手教程" - 社区支持:Unity中文论坛、优快云 Unity专区 (附:使用Unity 2022 LTS版本时,建议开启`Burst Compiler`和`Jobs System`可提升40%+性能)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值