Unity 把向量归一化的normalized和Normalized的联系和区别【权威】

本文详细介绍了Unity中向量归一化的normalized和Normalized的联系与区别。两者均用于将向量转化为长度为1的单位向量,保持原始方向不变。Normalized是方法,可直接对向量进行操作;而normalize是属性,只能获取归一化后的结果,无法设置。了解这些细节对于准确使用Unity进行3D开发至关重要。

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

Unity  把向量归一化的normalized和Normalized官方解释:

两者联系:

其实两个方法是一模一样,结果目的都一样,把一个向量拿到或者改变成 归一化向量,所谓归一化就是 把原来某个向量变成 x,y,z平方之和的平方根为1,也就是新向量长度为1.但是!方向与原向量一样!

两者区别: 

一个是方法Normalized(); 他会把一个向量直接变成 长度为一的 单位向量。

ThirdVectorPoint.Normalize(); 注意这是一个函数,一个方法!!!!

### Unity 中 `AnimatorStateInfo.normalizedTime` 的含义及用法 #### 含义 `normalizedTime` 是 `AnimatorStateInfo` 类中的一个属性,表示当前动画片段的归一化时间。它的取值范围通常是 `[0, Infinity)`,其中: - **0 表示动画刚开始播放**。 - **1 表示动画已完全播放了一次**。 - 超过 1 则表示动画正在循环播放。 如果启用了动画的循环选项,则该值会在每次动画完成时继续增加;如果没有启用循环选项,在达到 1 后会保持不变直到切换到下一个状态[^1]。 #### 属性特点 - 如果动画未启动或尚未进入目标状态,`normalizedTime` 可能返回负数。 - 当前动画处于过渡阶段时,此值可能不准确,因此通常建议结合 `IsInTransition()` 方法来确认是否已完成过渡[^3]。 --- ### 使用方法与注意事项 以下是使用 `normalizedTime` 来检测动画是否结束的一个典型场景: ```csharp using UnityEngine; public class AnimationEndDetector : MonoBehaviour { private Animator animator; void Start() { animator = GetComponent<Animator>(); } void Update() { // 获取当前层的状态信息 AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); // 检查是否不在过渡中,并且 normalizedTime 已经超过 1(即动画至少播放了一次) if (!animator.IsInTransition(0) && stateInfo.normalizedTime >= 1.0f) { Debug.Log("Animation has finished playing."); // 执行后续逻辑,比如触发其他动作或者重置布尔参数 animator.SetBool("isRunning", false); } } } ``` 上述代码展示了如何通过 `normalizedTime` `IsInTransition()` 结合判断动画是否已经完成播放。注意这里的条件是确保动画既不是在过渡过程中,也不是刚刚开始播放的一部分。 --- ### 示例解释 在这个例子中: - 我们获取了第 0 层上的当前动画状态 (`GetCurrentAnimatorStateInfo(0)`)。 - 使用 `!animator.IsInTransition(0)` 确保当前没有正在进行的过渡操作。 - 使用 `stateInfo.normalizedTime >= 1.0f` 验证动画是否已经完整播放完毕。 这种组合可以有效防止误判,尤其是在复杂的动画状态机配置下[^2]。 --- ### 注意事项 - 务必验证动画是否支持循环模式。如果不支持循环,那么一旦动画到达终点,`normalizedTime` 将不再增长。 - 对于多层动画控制器,需指定正确的图层索引来调用 `GetCurrentAnimatorStateInfo(layerIndex)` 或者 `GetAnimatorClipInfo(layerIndex)` 函数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity青子

难题的解决使成本节约,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值