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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:54:25