You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中输入停止后Transform旋转自动重置问题求助

问题原因

当松开输入按键时,inputVector的x和y分量都会变为0,导致moveDir变成Vector3.zero。而Vector3.Slerp在目标方向是零向量时,无法计算出有效的插值方向,Unity会默认将其视为世界空间的初始前方向(通常是Vector3.forward),所以角色会逐渐转回初始朝向。

解决方法

在执行旋转逻辑前,先判断moveDir是否为有效方向(即向量长度大于一个极小阈值,避免浮点精度问题),只有当存在有效输入时才进行旋转:

float rotateSpeed = 10f;
Vector3 moveDir = new Vector3(inputVector.x, 0f, inputVector.y);

// 仅当有有效移动输入时才执行旋转
if (moveDir.magnitude > 0.01f)
{
    transform.forward = Vector3.Slerp(transform.forward, moveDir.normalized, Time.deltaTime * rotateSpeed);
}

另外建议对moveDir做归一化处理,避免因为输入向量的长度不同导致旋转速度不一致——比如同时按下前后左右按键时,输入向量的模长会大于1,归一化后能保证旋转速度稳定。

内容的提问来源于stack exchange,提问作者RandomCodeEnjoyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:42:01