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

Unity中如何防止Paddle轻微超出预设移动边界?

Paddle边界溢出问题解决方法

核心问题分析

  1. 消息方法大小写错误:onTriggerEnter2D必须写成OnTriggerEnter2D(Unity所有消息回调方法首字母需大写),导致你的碰撞检测逻辑完全未生效,movementMult始终为1,碰撞控制等于无效。
  2. 边界判断时机错误:你在移动前判断当前位置是否超出,但若当前位置离边界只差一点,加上movement.x后会直接越界(比如当前x=9.14,movement.x=0.06,加完就到9.2),原有判断根本拦不住这种情况。

修正方案

用位置钳制替代原有判断,不管移动步长多大,强制把Paddle的x坐标限制在[-9.15, 9.15]范围内,同时修复碰撞方法的大小写问题:

public class Paddle : MonoBehaviour
{
    public Vector2 speed = new Vector2();
    private int movementMult = 1;

    void Start()
    {
        transform.position = new Vector2(0, -4);
    }

    // 修正方法名大小写,Unity现在能正确触发该回调
    void OnTriggerEnter2D(Collider2D col)
    {
        if(col.gameObject.tag == "Vertical")
        {
            movementMult = 0;
        }
    }

    // 新增离开碰撞区域的回调,恢复移动能力(不然碰到墙后就彻底动不了了)
    void OnTriggerExit2D(Collider2D col)
    {
        if(col.gameObject.tag == "Vertical")
        {
            movementMult = 1;
        }
    }

    void FixedUpdate()
    {
        float inputX = Input.GetAxisRaw("Horizontal");
        float moveX = speed.x * inputX * movementMult * Time.fixedDeltaTime;

        // 计算目标位置后直接钳制到边界内
        float targetX = transform.position.x + moveX;
        targetX = Mathf.Clamp(targetX, -9.15f, 9.15f);

        // 直接赋值位置,替代Translate,避免浮点累积误差
        transform.position = new Vector2(targetX, transform.position.y);
    }
}

额外说明

  • Mathf.Clamp是最可靠的边界控制方式,无论移动步长如何,都能保证位置不会超出设定范围,彻底解决视觉溢出问题。
  • 直接修改transform.position比Translate更直观,能有效避免位置累积的浮点精度误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:08