IEnumenator 出问题了
The IEnumenator is making problems
我试图在 unity 中制作一个 c# 脚本,而脚本在第 61 行(在脚本末尾的行首和末尾标有 **)中说 'foodManager.foodEat(GameObject)': not all code paths return a value
关于枚举器。
这里有什么问题,我该如何解决?
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FoodManager : MonoBehaviour
{
public bool[] isFull;
public GameObject[] slots;
public GameObject[] itemNames;
public GameObject[] itemImages;
public GameObject[] itemAmounts;
public GameObject foodObject;
public string[] foodNames;
public Sprite[] foodImages;
public Sprite[] foodHalfImages;
public GameObject foodPanel;
void Update()
{
for(int i = 0; i < 6; i++)
{
if (isFull[i] == true)
slots[i].SetActive(true);
if (isFull[i] == false)
slots[i].SetActive(false);
}
}
private void addItem(int max, string itemName, GameObject itemImage, int addingAmount, string foodName)
{
for (int j = 0; j < max; j++)
{
if (isFull[j] == true && itemNames[j].GetComponent<Text>().text == itemName)
itemAmounts[j].GetComponent<Text>().text = (int.Parse(itemAmounts[j].GetComponent<Text>().text) + addingAmount).ToString();
if (isFull[j] == false)
{
isFull[j] = true;
itemNames[j].GetComponent<Text>().text = itemName;
itemAmounts[j].GetComponent<Text>().text = addingAmount.ToString();
itemImages[j].GetComponent<Image>().sprite = foodImages[j];
break;
}
}
}
public void foodButtonsBehavior(int a)
{
if(a >= 0 && a < 6)
{
StartCoroutine(foodEat(slots[a]));
}
if(a == 6) //exit Button
foodPanel.SetActive(false);
}
**public IEnumerator foodEat(GameObject slot)**
{
foodPanel.SetActive(false);
}
}
我想使用 IEnumenator,因为我想将 WaitForSeconds() 添加到脚本中,但我还没有添加。
请帮我解决这个问题,这很重要!
问题是该方法有 return 类型 IEnumerator
,但没有 return 任何东西。在您完成 foodEat 方法之前它不会编译,因此它 return 是 IEnumerator
。
在 IEnumerator 函数中,您应该至少有一个 yield return smth
,对于您的情况,它是 yield return new WaitForSeconds(secondsToWait)
。
如您所见https://docs.unity3d.com/ScriptReference/GameObject.SetActive.html,设置活动 returns 为空。所以将您的代码更改为
public void foodEat(GameObject slot)
{
foodPanel.SetActive(false);
}
这应该可以解决您的问题。
您没有包含 return 声明。您的函数签名提到它将 return 一个 ienumerator,但是在您的第一行代码中您只设置了一个值,return 什么也没有。要么写一个return语句,要么使用void关键字!
我试图在 unity 中制作一个 c# 脚本,而脚本在第 61 行(在脚本末尾的行首和末尾标有 **)中说 'foodManager.foodEat(GameObject)': not all code paths return a value
关于枚举器。
这里有什么问题,我该如何解决?
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FoodManager : MonoBehaviour
{
public bool[] isFull;
public GameObject[] slots;
public GameObject[] itemNames;
public GameObject[] itemImages;
public GameObject[] itemAmounts;
public GameObject foodObject;
public string[] foodNames;
public Sprite[] foodImages;
public Sprite[] foodHalfImages;
public GameObject foodPanel;
void Update()
{
for(int i = 0; i < 6; i++)
{
if (isFull[i] == true)
slots[i].SetActive(true);
if (isFull[i] == false)
slots[i].SetActive(false);
}
}
private void addItem(int max, string itemName, GameObject itemImage, int addingAmount, string foodName)
{
for (int j = 0; j < max; j++)
{
if (isFull[j] == true && itemNames[j].GetComponent<Text>().text == itemName)
itemAmounts[j].GetComponent<Text>().text = (int.Parse(itemAmounts[j].GetComponent<Text>().text) + addingAmount).ToString();
if (isFull[j] == false)
{
isFull[j] = true;
itemNames[j].GetComponent<Text>().text = itemName;
itemAmounts[j].GetComponent<Text>().text = addingAmount.ToString();
itemImages[j].GetComponent<Image>().sprite = foodImages[j];
break;
}
}
}
public void foodButtonsBehavior(int a)
{
if(a >= 0 && a < 6)
{
StartCoroutine(foodEat(slots[a]));
}
if(a == 6) //exit Button
foodPanel.SetActive(false);
}
**public IEnumerator foodEat(GameObject slot)**
{
foodPanel.SetActive(false);
}
}
我想使用 IEnumenator,因为我想将 WaitForSeconds() 添加到脚本中,但我还没有添加。 请帮我解决这个问题,这很重要!
问题是该方法有 return 类型 IEnumerator
,但没有 return 任何东西。在您完成 foodEat 方法之前它不会编译,因此它 return 是 IEnumerator
。
在 IEnumerator 函数中,您应该至少有一个 yield return smth
,对于您的情况,它是 yield return new WaitForSeconds(secondsToWait)
。
如您所见https://docs.unity3d.com/ScriptReference/GameObject.SetActive.html,设置活动 returns 为空。所以将您的代码更改为
public void foodEat(GameObject slot)
{
foodPanel.SetActive(false);
}
这应该可以解决您的问题。
您没有包含 return 声明。您的函数签名提到它将 return 一个 ienumerator,但是在您的第一行代码中您只设置了一个值,return 什么也没有。要么写一个return语句,要么使用void关键字!