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

Unity实现以光标为顶点的2D物体抛物线跳跃问题求助

解决Unity 2D小球以光标为顶点的抛物线跳跃问题

核心问题分析

你的代码中顶点计算逻辑偏离需求(手动偏移了光标位置),且力的计算未基于抛物线运动学公式,导致无法精准匹配光标顶点。以下是基于物理公式的修正方案,通过精准计算初速度实现完美抛物线轨迹:

修正后的完整代码

using UnityEngine;

public class BallController : MonoBehaviour
{
    private bool isJumping = false;
    private Rigidbody2D rb;
    [SerializeField] private float gravityScale = 1.25f;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        rb.gravityScale = gravityScale;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) && !isJumping)
        {
            Vector2 startPos = rb.position;
            // 将光标屏幕坐标转换为世界坐标,直接作为抛物线顶点
            Vector2 vertexPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            // 确保顶点不低于小球当前位置,避免无效向下跳跃
            vertexPos.y = Mathf.Max(vertexPos.y, startPos.y + 0.1f);

            // 计算竖直方向初速度:顶点处竖直速度为0,利用匀减速运动公式v² = u² + 2as反推
            float verticalDisplacement = vertexPos.y - startPos.y;
            float effectiveGravity = Mathf.Abs(Physics2D.gravity.y) * gravityScale;
            float initialVerticalVelocity = Mathf.Sqrt(2 * effectiveGravity * verticalDisplacement);

            // 计算水平方向初速度:根据竖直方向到顶点的时间,匹配水平位移所需的匀速速度
            float timeToVertex = initialVerticalVelocity / effectiveGravity;
            float horizontalDisplacement = vertexPos.x - startPos.x;
            float initialHorizontalVelocity = horizontalDisplacement / timeToVertex;

            // 直接设置刚体初速度,精准实现抛物线轨迹
            rb.velocity = new Vector2(initialHorizontalVelocity, initialVerticalVelocity);
            isJumping = true;
        }
    }

    // 检测落地,重置跳跃状态
    private void OnCollisionEnter2D(Collision2D other)
    {
        // 可根据需求添加地面标签判断,避免碰撞其他物体误触发
        isJumping = false;
    }
}

关键修改说明

  • 顶点定位:直接将光标世界坐标作为抛物线顶点,仅做最低高度限制避免无效操作
  • 物理公式驱动:
    • 竖直方向:利用顶点处速度为0的特性,通过匀减速运动公式反推初速度
    • 水平方向:基于竖直方向运动时间,计算匹配水平位移的匀速速度(水平方向无外力时保持匀速)
  • 状态管理:通过碰撞检测落地状态,重置跳跃标记,防止连续触发跳跃
  • 代码修复:补全了未声明的Rigidbody2D变量,优化命名规范,添加可序列化参数方便调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:12:53