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

Unity开发报错求助:新手制作小游戏时烹饪逻辑触发异常

Unity开发报错求助:新手制作小游戏时烹饪逻辑触发异常

嘿,兄弟!看了你贴的代码片段,我发现好几个会导致报错的问题,咱们一个个来解决:

1. 重复引用命名空间

你代码开头重复写了两次using UnityEngine;、using System.Collections;、using System.Collections.Generic;,虽然不会直接报错,但属于冗余代码,删掉重复的部分就行。

2. 协程方法的返回值错误

你写的CookSteak()用了yield return来实现烹饪倒计时,这说明它是一个协程方法,协程的返回值必须是IEnumerator,但你现在写的是public List <GameObject> CookSteak(),这绝对会触发编译错误!赶紧改成public IEnumerator CookSteak()。

3. 代码未写完导致的语法错误

你最后一行的Quatern...明显没写完,应该是Quaternion.identity(表示无旋转),完整的实例化代码应该是:

Instantiate(cookedSteakPrefab, transform.position, Quaternion.identity);

4. 潜在的运行时坑点(提前避坑)

  • 要确保PlayerInventory是静态类,或者你有正确的实例引用,不然PlayerInventory.HasItem("RawSteak")和RemoveItem可能会报“找不到对象”的错误;
  • 记得在Unity编辑器的Inspector面板里,给Stove脚本的rawSteakPrefab和cookedSteakPrefab赋值对应的预制体,不然运行时会触发空引用异常;
  • 可以加一个“烹饪中”的标记变量,比如private bool isCooking = false;,在触发烹饪前先判断这个变量,防止玩家重复触发导致同时运行多个烹饪协程。

修正后的完整代码参考

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Stove : MonoBehaviour
{
    public GameObject rawSteakPrefab;
    public GameObject cookedSteakPrefab;
    private bool isCooking = false; // 新增烹饪状态标记

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player") && !isCooking)
        {
            // 检查玩家是否持有生牛排
            if (PlayerInventory.HasItem("RawSteak"))
            {
                PlayerInventory.RemoveItem("RawSteak");
                StartCoroutine(CookSteak());
            }
        }
    }

    public IEnumerator CookSteak()
    {
        isCooking = true;
        // 模拟5秒烹饪时间
        yield return new WaitForSeconds(5f);
        // 生成熟牛排
        Instantiate(cookedSteakPrefab, transform.position, Quaternion.identity);
        isCooking = false;
    }
}

备注:内容来源于stack exchange,提问作者user22113597

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:34:37