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

Unity Pong游戏调用Reset()后乒乓球轨迹未随机变化问题求助

问题核心原因

你的代码存在3个直接导致轨迹固定的缺陷:

  • 第一是Nudge()方法的随机判断逻辑永远不会触发向右分支:你调用的是UnityEngine.Random.Range(0, 2)的整数重载,返回值只能是0或者1,if (rand <= 1)的条件永远成立,所以else分支的向右逻辑永远不会执行,球只会固定向左发射。
  • 第二是发射角度固定:即使修复了方向判断,你的Y轴速度永远固定为10f,球的射出角度不会发生变化,轨迹看起来也会高度相似。
  • 第三是物理状态未清空:碰撞后先执行了反射逻辑修改了速度,Reset时没有先清空刚体速度就直接赋值新速度,可能存在物理帧的残留干扰。

修复方案

直接修改Nudge()方法和Reset()方法即可:

void Nudge()
{
    // 整数重载返回0/1,直接判断值即可实现50%左右概率
    int randDir = UnityEngine.Random.Range(0, 2);
    // 给Y轴加随机范围,实现不同的发射角度
    float randomY = UnityEngine.Random.Range(8f, 12f);
    if (randDir == 0)
    {
        directionVector = new Vector2(-20f, randomY);
    }
    else
    {
        directionVector = new Vector2(20f, randomY);
    }
    rb.velocity = directionVector;
}

void Reset()
{
    transform.position = ballinitialpos;
    // 先清空原有速度、角速度,避免物理状态残留
    rb.velocity = Vector2.zero;
    rb.angularVelocity = 0f;
    Nudge();
}

你可以根据需求调整randomY的取值范围,控制发射角度的变化幅度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:00