Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 调用统一方法约定:yield和SendMessage_Unity3d_Coroutine - Fatal编程技术网

Unity3d 调用统一方法约定:yield和SendMessage

Unity3d 调用统一方法约定:yield和SendMessage,unity3d,coroutine,Unity3d,Coroutine,在Unity中调用方法的两种主要方式是: 我已经询问过使用它们的不同情况,似乎是这样的: gameObject.SedMessage():没有中间操作。有利于模块化 yield script.Function():inmtediatly操作。对象必须更多地了解不同的调用,否则,调试可能是一项艰巨的任务 然而,我仍然不清楚。例如,如果我有一个有自己规则的游戏,那么默认情况应该是什么 此外,我还发现了另一个问题:如果我调用script.function()而不产生任何结果,Unity只执

在Unity中调用方法的两种主要方式是:

我已经询问过使用它们的不同情况,似乎是这样的:

  • gameObject.SedMessage():没有中间操作。有利于模块化
  • yield script.Function():inmtediatly操作。对象必须更多地了解不同的调用,否则,调试可能是一项艰巨的任务
然而,我仍然不清楚。例如,如果我有一个有自己规则的游戏,那么默认情况应该是什么


此外,我还发现了另一个问题:如果我调用script.function()而不产生任何结果,Unity只执行第一帧中的部分代码,因此函数的其余部分将无法工作。这是可以理解的,但有问题。

还有另一种调用函数的方法,它比
SendMessage()
corroutines

获取对对象的引用,然后简单地调用该函数

reference.YourFunction()

要获得参考,您可以在游戏开始时找到您的对象。然后使用函数查找附加到游戏对象的类

private MyObject reference;

void Awake()
{
    reference GameObject.Find("MyObject").GetComponent<MyObject>();
}
私有MyObject引用;
无效唤醒()
{
引用GameObject.Find(“MyObject”).GetComponent();
}


如果你的游戏有自己的规则,那么不要太担心如何调用你的函数。请记住,它正在编程,您可以做任何您想做的事情

即使您的解决方案“有效”,它也有一个与SendMessage类似的问题。。。您正在传递一个字符串,因此必须手动跟踪所有引用(如果重构类/方法/任何东西,字符串都不会受到影响)。然而,这个解决方案又增加了一个问题——紧耦合。最后一点——是的,这是程序员如何处理问题的决定,但人们至少应该尝试编写最好/最干净/最有效的代码。如果其他人在他们之后可能会得到项目,至少是他们自己,如果他们以后需要添加更多功能的话。@walther OP正在寻求一种方法来调用一个名为“默认情况”的函数。我只是给出了
reference.YourFunction()
作为转到方式,而不是
SendMessage
。您称之为“手动跟踪所有引用”的代码部分只是获取引用的一种示例方法。有更好的方法来实现这一点,例如创建实例化对象的对象池。然而,这超出了这个问题的范围。也就是说,它属于维护引用的范畴,而不是如何调用它们。不管怎样,请把你的答案贴出来,我很乐意投赞成票。