gpt4 book ai didi

c# - 在单个脚本中同时包含 IEnumerator Start() 和 void Start()

转载 作者:行者123 更新时间:2023-11-30 20:17:42 28 4
gpt4 key购买 nike

我有一个来自 Unity 文档页面的示例程序,其中包含 IEnumerator Start() ,如下所示,但我想知道如何才能拥有正常的 void Start() > 在同一个脚本中?

我也尝试添加void Start(),但它引发了错误。然后,我尝试将我的代码(只是写入控制台应用程序的数据路径)包含在 IEnumerator 函数中,尽管通过使用 0f 作为延迟参数立即执行它,但它不会打印出任何东西...

我错过了什么?对于必须有 IEnumerator Start() 但还需要执行起始代码的情况,通常的解决方案是什么?

/// Saves screenshots as PNG files.
public class PNGers : MonoBehaviour
{

// Take a shot immediately.
IEnumerator Start()
{
yield return UploadPNG();
yield return ConsoleMSG();
}

IEnumerator UploadPNG()
{
// We should only read the screen buffer after frame rendering is complete.
yield return new WaitForEndOfFrame();

// Create a texture the size of the screen, with RGB24 format.
int width = Screen.width;
int height = Screen.height;
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);

// Read the screen contents into the texture.
tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 );
tex.Apply();

// Encode the texture into PNG format.
byte[] bytes = tex.EncodeToPNG();
Object.Destroy(tex);

// For testing purposes, also write to a file in the project folder:
File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);

}

IEnumerator ConsoleMSG()
{
yield return new WaitForSeconds(0f);
Debug.Log(Application.dataPath);
}
}

最佳答案

I have a sample program from Unity's documentation pages that contains an IEnumerator Start() as seen below, but I wonder how I can also have a normal void Start() in the same script?

不能

这是因为两个函数不能具有相同的名称。异常(exception)情况是函数具有不同的参数类型。我明白了一个Start函数是void返回类型,而另一个是 IEnumerator返回类型。这在 C# 中并不重要。重要的是两个函数的参数。

在这种情况下,它们都接受任何参数,因此您不能重载它们。您可以阅读有关此内容的更多信息 here .

即使您输入 void Start函数接受一个参数和 IEnumerator Start函数不带参数,它将不起作用。例如,

void Start(int i)
{
Debug.Log("Hello Log 1");
}

IEnumerator Start()
{
yield return null;
Debug.Log("Hello Log 2");
}

Unity 将抛出编译(编辑器)和运行时异常:

Script error (<ScriptName>): Start() can not take parameters.


如果你切换它并制作 void Start没有任何参数,但 IEnumerator使用参数,它将编译,并且您不会收到任何错误,但 IEnumerator Start 除外。当您运行/玩游戏时,不会调用该函数。

void Start()
{
Debug.Log("Hello Log 1");
}

IEnumerator Start(int i)
{
yield return null;
Debug.Log("Hello Log 2");
}

What is the usual solution to such a situation where you have to have an IEnumerator Start() but you also need to execute starting code?

IEnumerator Start中运行您的起始代码在任何其他代码之前运行。

IEnumerator Start()
{
//Run your Starting code
startingCode();

//Run Other coroutine functions
yield return UploadPNG();
yield return ConsoleMSG();
}

IEnumerator UploadPNG()
{

}

IEnumerator ConsoleMSG()
{
yield return new WaitForSeconds(0f);
}

void startingCode()
{
//Yourstarting code
}

您还可以执行 void Awake() 中的起始代码或void Enable()功能。

关于c# - 在单个脚本中同时包含 IEnumerator Start() 和 void Start(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43833405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com