本文重点内容: 1、支持多重力源 2、限制重力半径 3、让重力随距离递减 4、创建平面、球形、和立方体重力源
本教程是CatLikeCoding系列的一部分,原文地址见文章底部。
该列表如何生效? 参见 ef="http://mp.weixin.qq.com/s?__biz=MzIxMzgzMzQxOA==&mid=2247489571&idx=1&sn=b42c2edd71018346ef18448255b49d64&chksm=97b19b86a0c61290f08e7d322820d4746ba336ebe57aa1f26ed386c7ffd827a77569bb29ebe2&scene=21#wechat_redirect">持久化对象 教程的第1.5节对通用列表的解释。
当只有一个来源时,我们可以优化它吗? 当然可以,但是我们不会对源的数量做任何假设。如果一次只使用一个源,那么循环就没有必要了。
使用列表是最好的方法吗? 如果仅同时有几个重力源处于活动状态,则列表是最简单的方法,也是最佳方法。只有在有许多资源发挥作用??时,才开始考虑更智能的空间分区策略(例如,限制体积层次结构)会更有收益。一种替代方法是使用碰撞和触发器来确定哪些对象受哪些重力源影响,但这会增加大量开销。还有一种方法是禁用离玩家太远而不会影响游戏体验的重力源。但是本教程将使其保持尽可能简单。
Debug.Assert有什么作用? 如果第一个参数为false,则使用第二个参数消息(如果提供)记录断言错误。第三个参数是如果在控制台中选择了消息,则在编辑器中突出显示的内容。此调用仅包含在开发版本中,不包含在发行版本中。就好像是Debug.Assert(...); 从未出现过一样。因此,这是在开发过程中添加不会影响最终版本的检查的好方法。
virtual关键字是什么意思? 参见 持久化对象 教程末尾的解释
我们是否需要在OnDrawGizmos中重置颜色和矩阵? 不需要,那是自动发生的。
我们不能只切断平面上方的重力吗? 可以,但是稍后我们将使用范围逐渐减小重力,而不是使其变为二进制的有和无。
引力不应该除以距离的平方吗? 实际上,实际重力会根据距离的平方减小。但是,这假定了从其质心开始测量的大致球形重力源。这对于我们的重力平面没有意义,因为它是平坦的,无限的并且没有质心。你可以对平面进行衰减,但由于没有最大的重力范围,因此无法实现。由于该范围用于创建不真实的场景,其中不同区域仅受某些重力源的影响。衰减通常是线性还是二进制无关紧要。Linear更易于设计,这就是我所使用的。
我们不能从比较平方距离开始吗? 可以,这将是一种优化,当位置最终超出范围时,会避免平方根运算。你需要在方法中平方配置的半径或将其存储在字段中。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2025-6-5 22:56 , Processed in 0.206819 second(s), 27 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2025 Discuz! Team.