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

Unity开发水果忍者类游戏:跨脚本调用Rigidbody2D.AddForce遇阻

问题修复:跨脚本调用MovePea方法

现有代码的核心问题

  1. 错误覆盖Rigidbody2D引用:你在NewRound里执行PeaScript.peaRB = pea;,但PeaScript的Start方法已经通过GetComponent<Rigidbody2D>()获取了自身组件的正确引用,外部赋值会破坏这个关系。
  2. 未调用目标方法:代码里完全绕开了MovePea方法,直接操作pea这个Rigidbody2D,没有触发你写的逻辑。
  3. 对象查找顺序错误:Start里先执行NewRound再查找FruitOne,如果NewRound依赖该对象,会导致空引用。

修复方案

方案1:针对已存在的水果对象调用MovePea

修改Fruit_Spawn代码,去掉多余赋值,直接调用目标方法:

public class Fruit_Spawn : MonoBehaviour
{
    public GameObject FruitOne;
    // 保留其他原有变量...
    private PeaScript peaScript;

    void Start()
    {
        // 先完成对象查找再执行NewRound
        FruitOne = GameObject.Find("Pea_vegtable(1)");
        peaScript = FruitOne.GetComponent<PeaScript>();
        NewRound();
    }

    void NewRound()
    {
        oneF = Random.Range(0,2);
        // 保留其他随机值逻辑...
        Debug.Log(oneF);
        if (RoundCount !=5 && oneF==1)
        {
            // 直接调用MovePea方法
            peaScript.MovePea();
            // 修改水果对象的位置,而非Spawn脚本自身的transform
            FruitOne.transform.position = new Vector3(1, 1, 0);
        }
    }
}

方案2:生成新水果实例并调用MovePea(更贴合水果忍者生成逻辑)

如果FruitOne是预制体,通过实例化生成新水果并调用方法:

public class Fruit_Spawn : MonoBehaviour
{
    // 在Inspector中拖入预制体
    public GameObject FruitOnePrefab;
    // 保留其他原有变量...

    void NewRound()
    {
        oneF = Random.Range(0,2);
        // 保留其他随机值逻辑...
        Debug.Log(oneF);
        if (RoundCount !=5 && oneF==1)
        {
            // 实例化预制体到指定位置
            GameObject newFruit = Instantiate(FruitOnePrefab, new Vector3(1, 1, 0), Quaternion.identity);
            // 获取组件并调用移动方法
            PeaScript peaScript = newFruit.GetComponent<PeaScript>();
            peaScript.MovePea();
        }
    }
}

补充:优化PeaScript的健壮性

添加空值检查避免运行时错误:

public class PeaScript : MonoBehaviour
{
    public Rigidbody2D peaRB;

    void Start()
    {
        peaRB = GetComponent<Rigidbody2D>();
        if (peaRB == null)
        {
            Debug.LogError("PeaScript: 未找到Rigidbody2D组件!");
        }
    }

    public void MovePea()
    {
        if (peaRB != null)
        {
            peaRB.AddForce(Vector2.right * 3, ForceMode2D.Impulse);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:34:58