Unity Recoil后坐力脚本如何仅控制枪械沿Z轴移动
问题原因
你的脚本直接对transform.localPosition的三个坐标轴统一做Lerp插值,X、Y、Z三个轴都会被修改,自然会出现全轴位移的情况。另外你按住鼠标左键的逻辑块里连续跑了两次方向相反的Lerp,两次插值互相抵消,本身逻辑就有问题,根本出不来正常的后坐力效果。
修复方法
核心思路是只让Z轴参与位移计算,X、Y轴直接固定为hipPos对应的坐标,全程不修改这两个轴的数值,同时修正开火时的逻辑冲突,修改后的代码如下:
using UnityEngine; using System.Collections; public class Recoil : MonoBehaviour { public Vector3 hipPos; public Vector3 zoomPos; public float speed = 4f; void Update () { // X、Y轴直接锁定为腰射基准坐标,不参与后坐力位移 Vector3 finalPos = hipPos; if(Input.GetMouseButton(0)) { // 仅Z轴参与开镜/后坐力的插值移动 finalPos.z = Mathf.Lerp(transform.localPosition.z, zoomPos.z, Time.deltaTime * speed); } else { // 松开开火键时Z轴平滑回归腰射位置 finalPos.z = Mathf.Lerp(transform.localPosition.z, hipPos.z, Time.deltaTime * speed); } transform.localPosition = finalPos; } }
参数配置提示
- 在Inspector面板给
hipPos和zoomPos赋值时,保持两个值的X、Y参数完全一致,只调整Z轴的差值即可 - 如果你要做“开火瞬间后坐、之后自动回位”的脉冲式后坐力,不要在Update里堆反向Lerp,加个触发式协程控制Z轴值变化会更稳定
内容的提问来源于stack exchange,提问作者Erwin
相关产品推荐
相关产品推荐

