- 博客(29)
- 收藏
- 关注
原创 Unity中MonoBehaviour组件禁用时协程的行为
当一个 Unity 的 MonoBehaviour 组件被禁用(即 enabled 属性设置为 false)时,由该组件实例启动的 协程 (Coroutine) 并不会自动停止
2025-04-01 13:31:10
249
原创 LeetCode 188. 买卖股票的最佳时机 IV(困难)
这道题通过动态规划解决了“最多 k 次交易”的股票买卖问题。Java 和 C# 的实现提供了两种方案:1. 三维 DP 数组版:逻辑直观,适合理解问题。2. 优化空间版:使用滚动数组,节省内存。
2025-03-31 23:34:40
526
原创 解释一下Unity碰撞的触发条件
本文详细探讨了Unity引擎中碰撞和触发器事件的触发条件及其区别。碰撞事件(Collision)的触发需满足以下条件:两个物体均需具备碰撞体(Collider),且至少一个物体附带刚体(Rigidbody),同时碰撞体未被标记为触发器。这种配置适用于模拟真实的物理交互。触发器事件(Trigger)则要求至少一个碰撞体被设置为触发器,用于检测物体间的重叠,而不产生物理反应。文章指出,刚体在碰撞检测中扮演关键角色,并强调在游戏开发中,合理配置碰撞体和刚体属性是实现设计意图的重要基础。
2025-03-31 11:24:38
532
原创 简单了解一下Unity的MaterialPropertyBlock
MaterialPropertyBlock是Unity中一个强大且高效的工具,它允许开发者在不创建新材质实例的情况下,为每个渲染器独立设置材质属性。相比直接使用material属性,它在内存使用和渲染性能上具有明显优势,尤其适合处理大量物体的个性化需求。通过合理使用MaterialPropertyBlock,开发者可以在保持灵活性的同时优化游戏性能,是提升项目效率的重要手段。
2025-03-29 21:52:22
836
原创 简单介绍一下Unity中的material和sharedMaterial
material和sharedMaterial是Unity中访问材质的两种方式:material 返回一个独立的材质实例,适合为特定物体定制属性,但可能会增加内存开销。sharedMaterial 返回共享的材质资源,适合多个物体共享属性,修改时影响范围广。
2025-03-29 15:00:55
769
原创 简单介绍一下Unity中的ScriptableObject
ScriptableObject是Unity中改变游戏架构思维方式的强大工具。通过将数据从行为中分离,它促进了更加模块化、数据驱动和可维护的设计。对于需要处理大量游戏数据、建立可扩展系统或改善团队工作流程的项目,ScriptableObject是不可或缺的工具。
2025-03-27 14:16:01
741
原创 LeetCode 123. 买卖股票的最佳时机 III(困难)
买卖股票的最佳时机III是一个典型的动态规划问题,关键在于正确定义状态和状态转移方程。我们分别介绍了两种解法:标准动态规划解法:使用二维数组记录每天在不同交易状态下的最大利润,通过状态转移方程计算最终结果。空间优化解法:观察到每个状态只依赖于前一天的状态,将空间复杂度从O(n)优化到O(1)。
2025-03-26 22:23:02
694
原创 Unity中对象池(Object Pool)技术解析与实现
本文深入探讨了对象池(Object Pool)在游戏开发中的应用与实现。对象池是一种设计模式,通过预先创建并重用对象,避免频繁的内存分配和释放,从而显著提升游戏性能。文章阐述了在Unity中使用对象池的必要性,并提供了一个简单实用的代码示例,展示了如何构建一个基础的对象池类,包括对象的预实例化、获取和归还功能。本文旨在帮助读者快速掌握对象池的核心理念及其在实际开发中的优化作用,提升游戏的流畅度和效率。
2025-03-25 11:22:28
779
原创 简述一下Unity中的碰撞检测
Unity的碰撞检测通过PhysX物理引擎实现,依赖碰撞体和刚体组件。碰撞(Collision)适用于物理交互场景,使用OnCollisionEnter等回调;触发(Trigger)适用于无物理响应的检测,使用OnTriggerEnter等回调。优化性能的关键在于减少碰撞体数量、使用层级碰撞矩阵、合理选择触发器和减少物理模拟物体。通过这些方法,可以在保证功能的前提下提升游戏性能。
2025-03-21 19:26:46
1270
原创 Unity的StripEngineCode详细介绍与实践
StripEngineCode是Unity中的一项优化功能,通过剥离未使用的引擎代码来减小游戏包体大小。本文详细介绍了其用法与实践经验,为开发者提供了实用的指导。文章首先阐述了StripEngineCode的定义及其在移动平台游戏开发中的重要性,随后详细讲解了配置方法,包括在Player Settings中启用功能和调整剥离级别。此外,文章提供了实践建议,如全面测试、谨慎选择剥离内容、定期检查包体大小及结合其他优化手段。同时,强调了使用时的注意事项,例如可能影响功能稳定性、需进行回归测试及平台差异问题。结论
2025-03-18 12:57:02
992
原创 Unity 运行报错:InvalidOperationException: Insecure connection not allowed 的原因
Unity 运行报错:InvalidOperationException: Insecure connection not allowed 的原因
2025-03-17 13:12:22
369
原创 了解一下Unity 中的 “Maximum Allowed Timestep”
Unity中的“Maximum Allowed Timestep”是一个关键设置,用于在物理模拟和时间管理中平衡稳定性和性能。它限制了物理引擎在一帧中执行物理更新的最大时间跨度,默认值为0.3333333秒,旨在防止帧时间波动(如卡顿)时过度更新导致性能下降或模拟不稳定。开发者可通过Edit > Project Settings > Time调整,或通过脚本访问Time.maximumDeltaTime。调小该值可在低帧率时提升性能,但可能使物理模拟不连续;调大则增强物理精度,但可能牺牲性能。合理配置此设置
2025-03-12 12:22:32
716
原创 Unity的FixedUpdate方法详解
FixedUpdate是Unity中专为物理模拟和固定时间步长逻辑设计的更新方法。它通过与物理引擎同步的调用频率,确保了物理行为在不同帧率下的稳定性和一致性。正确理解和使用FixedUpdate与Update的区别,是开发高质量Unity游戏的重要一环。
2025-03-10 11:50:50
941
原创 什么是Unity中的GameObject?
GameObject是Unity中所有实体对象的基础,通过组件系统实现功能扩展,利用层级结构组织场景。掌握GameObject的创建、查找、操作和优化,是Unity开发的核心技能。GameObject提供了构建游戏世界的灵活基础,让开发者可以将复杂的游戏逻辑拆分为更小、更易管理的功能组件。无论是简单的2D游戏还是复杂的3D应用,GameObject始终是构建Unity项目的基石。
2025-03-08 12:43:01
632
原创 Unity的Transform组件详细解释
本文全面介绍了Unity中最基础且不可或缺的Transform组件,该组件是每个GameObject必备的核心组件,负责控制游戏对象在3D或2D空间中的位置、旋转和缩放属性。文章详细阐述了Transform的三大基本属性:位置(Position)、旋转(Rotation)和缩放(Scale),并区分了世界坐标系与局部坐标系下的属性差异。同时深入探讨了Transform提供的实用方法,包括坐标转换、物体移动旋转等功能,以及其支持的层级父子关系结构。
2025-03-08 11:53:37
882
原创 LeetCode 121. 买卖股票的最佳时机(简单)
我们可以在遍历数组的同时,记录到目前为止见到的最低价格,并计算如果在这个最低价格买入、当前价格卖出能获得的利润。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。更聪明的方法是利用一个关键洞察:要获得最大利润,我们需要以尽可能低的价格买入,然后在之后尽可能高的价格卖出。例如 [1,2,3,4,5],最大利润为4,应该在第一天买入,最后一天卖出。例如 [7,6,4,3,1],最大利润为0,因为没有可以盈利的交易机会。
2025-03-05 15:59:42
464
原创 设计统一响应暂停事件的Unity协程管理系统
设计一套能够统一响应暂停事件的协程管理系统,需要建立中央化的协程控制机制,使所有协程能够协调一致地对游戏暂停做出反应。该系统通过单例模式实现全局访问,并提供完整的协程生命周期管理。
2025-03-04 00:06:59
382
原创 Unity中WaitForSeconds在游戏暂停时的行为与冻结方法
get// 启动可暂停的等待协程if (!.Invoke();// 暂停所有协程// 恢复所有协程// 替代WaitForSecondsDebug.Log("2秒后执行,即使游戏暂停也会正确冻结和恢复");});// 暂停游戏时// 恢复游戏时创建一个自定义的get// 游戏暂停时,更新目标时间以"冻结"等待// 使用方法Debug.Log("等待完成,正确处理了暂停");
2025-03-03 14:45:12
465
原创 LeetCode 1186. 删除一次得到子数组最大和(中等)
这道题是经典动态规划问题的变种,关键在于定义好状态和状态转移方程。通过维护两个状态(删除和不删除元素的最大和),我们可以在线性时间内解决这个问题。明确定义状态写出状态转移方程确定初始状态计算最终结果。
2025-03-03 14:29:08
274
原创 Unity判断是否点击到UI上并获取具体UI物体
Unity中判断点击是否落在UI元素上并获取具体UI物体主要依赖EventSystem和射线检测机制。最常用的方法包括:使用EventSystem.IsPointerOverGameObject() - 快速检查点击是否落在任何UI元素上使用PointerEventData和RaycastAll() - 获取具体被点击的UI元素及其详细信息使用GraphicRaycaster - 针对特定Canvas进行更精确的UI元素检测
2025-02-28 23:21:03
605
原创 Unity协程(Coroutine)详解
协程是Unity中一种特殊函数,允许在不阻塞主线程的情况下执行跨越多个帧的操作。它可以在执行过程中暂停(yield),并在之后恢复执行,非常适合处理需要随时间推移执行的任务。
2025-02-28 12:26:47
1133
原创 Unity Rigidbody中的isKinematic属性解析
isKinematic属性是Unity物理系统中的一个强大工具,它允许开发者在物理模拟和脚本控制之间切换。通过正确使用这个属性,可以实现移动平台、电梯、可拾取物体、传送带等各种游戏机制,同时在需要时优化性能。理解何时使用Kinematic刚体以及如何正确操作它们,是创建流畅、可靠的物理交互的关键。
2025-02-27 15:44:45
820
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人