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
相关产品推荐
相关产品推荐

