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

C#实现MainCamera仅沿X轴跟随玩家的技术求助

解决MainCamera仅沿X轴跟随玩家的问题

你遇到的问题很典型:当把相机设为玩家子物体后,相机的Transform会完全继承玩家的所有轴移动,导致你的自定义代码被父物体的移动覆盖,无法生效。这里有个简单且能保留平滑无抖动优势的解决思路,不需要移除子物体关系,只需要锁定相机的Y、Z轴位置即可。

具体实现步骤

    1. 保持MainCamera作为玩家的子物体不变,这样X轴的跟随会天然继承玩家的平滑移动特性。
    1. 创建一个C#脚本(比如命名为LockCameraXFollow.cs),挂载到MainCamera上,通过LateUpdate()方法重置相机的Y和Z坐标,只保留X轴跟随:
using UnityEngine;

public class LockCameraXFollow : MonoBehaviour
{
    // 可在Inspector面板设置相机固定的Y、Z偏移值,保持视角高度和距离
    public Vector3 fixedAxisOffset;

    private void LateUpdate()
    {
        // 仅继承父物体(玩家)的X轴位置,Y、Z轴使用预设的固定值
        Vector3 targetPos = new Vector3(
            transform.parent.position.x,
            fixedAxisOffset.y,
            fixedAxisOffset.z
        );
        transform.position = targetPos;
    }
}
    1. 在Unity编辑器中,先把相机调整到你想要的固定视角高度和距离,然后将此时相机的Y、Z坐标值填入脚本的fixedAxisOffset参数中,这样相机就会一直保持这个视角,仅跟随玩家的X轴移动。

为什么用LateUpdate?

LateUpdate()会在所有Update方法执行完毕后运行,确保玩家的移动逻辑已经完成,此时再调整相机位置,不会出现帧同步导致的微小抖动,完美契合子物体天然平滑的优势。

替代方案(无需子物体关系)

如果之后你想移除子物体绑定,也可以用平滑插值的方式实现仅X轴跟随,代码示例如下:

using UnityEngine;

public class CameraXOnlyFollow : MonoBehaviour
{
    public Transform playerTarget;
    public float smoothFollowSpeed = 0.15f;
    public float fixedYPos;
    public float fixedZPos;

    private void LateUpdate()
    {
        Vector3 desiredPos = new Vector3(
            playerTarget.position.x,
            fixedYPos,
            fixedZPos
        );
        // 用插值实现平滑移动,调整smoothFollowSpeed控制跟随灵敏度
        transform.position = Vector3.Lerp(transform.position, desiredPos, smoothFollowSpeed);
    }
}

不过这种方式需要手动调整平滑速度参数,相比子物体的天然平滑,还是第一种方案更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:20:04