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

Unity玩家绕圆心移动异常:仅沿X轴移动问题求助

问题分析与修复方案

核心问题

  1. 物理引擎与直接位置赋值冲突:同时使用RB2D.velocity控制移动,又直接修改player.transform.position,物理引擎的计算会被强制覆盖,导致运动逻辑混乱。
  2. 初始旋转角度未正确初始化:playerRotation默认值为0时,初始位置固定在圆心X轴正方向,且未基于玩家初始位置计算对应圆心的角度,后续旋转只会从0开始累加,无法形成正确圆周轨迹。
  3. 旋转驱动逻辑不合理:用X方向速度currentVelocityX累加旋转角度,逻辑不匹配圆周运动的角速度需求,应该直接用输入控制角速度。

修复代码示例

1. 初始化旋转角度(进入Trigger2D时)

设置centerOfGravity的同时,计算玩家初始位置相对圆心的角度:

private void OnTriggerEnter2D(Collider2D other)
{
    centerOfGravity = other.transform.position;
    // 计算初始偏移角度
    Vector2 offset = transform.position - centerOfGravity;
    player.playerRotation = Mathf.Atan2(offset.y, offset.x);
    // 固定圆周半径,避免每帧检测波动
    player.distToCenterOfGravity = Vector2.Distance(centerOfGravity, transform.position);
}

2. 重构圆周运动函数

方案一:纯Transform控制(无物理交互场景)

private void MovePlayerInACircle()
{
    // 用输入直接控制角速度
    float angularSpeed = playerDataSO.movementVelocity * xInput;
    player.playerRotation += angularSpeed * Time.deltaTime;

    // 计算圆周位置
    float x = Mathf.Cos(player.playerRotation) * player.distToCenterOfGravity;
    float y = Mathf.Sin(player.playerRotation) * player.distToCenterOfGravity;
    player.transform.position = player.centerOfGravity + new Vector2(x, y);
}

方案二:物理引擎控制(需碰撞/重力交互场景)

private void MovePlayerInACircle()
{
    float angularSpeed = playerDataSO.movementVelocity * xInput;
    player.playerRotation += angularSpeed * Time.deltaTime;

    // 计算目标圆周位置
    Vector2 targetPosition = player.centerOfGravity + new Vector2(
        Mathf.Cos(player.playerRotation) * player.distToCenterOfGravity,
        Mathf.Sin(player.playerRotation) * player.distToCenterOfGravity
    );

    // 用物理API平滑移动,兼容物理规则
    player.RB2D.MovePosition(Vector2.Lerp(player.transform.position, targetPosition, Time.deltaTime * 6f));
}

3. 移除冗余逻辑

删除每帧检测距离的CheckDistanceToCenterOfGravity,避免半径因物理波动变化,如需调试可保留但不作为运动依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:18