C# 我如何在unity3制作全球活动?

C# 我如何在unity3制作全球活动?,c#,unity3d,C#,Unity3d,我正在unity制作基于巡演的游戏。 我希望(几乎)在我所有的类中都有一个函数OnNextRound, 当用户单击“下一轮”按钮时将调用 void OnGUI() { // ... if (GUI.Button(new Rect(10f, Screen.height - 40, 100, 30), "next round")) { // here call all OnNextRound functions } } 某些还必须包含此OnNextRoun

我正在unity制作基于巡演的游戏。
我希望(几乎)在我所有的类中都有一个函数
OnNextRound

当用户单击“下一轮”按钮时将调用

void OnGUI() {
    // ...

    if (GUI.Button(new Rect(10f, Screen.height - 40, 100, 30), "next round")) {
        // here call all OnNextRound functions
    }
}
某些还必须包含此
OnNextRound
函数的类没有扩展
monobhavior

public class SomeClass {
    // some vars and functions here
}
并以这种方式举例:

SomeClass sc = new SomeClass(/* some params */);
这些类还必须包含
OnNextRound
函数

因此,我想在每个类的每个实例中调用名为
OnNextRound
的所有函数

如何做到这一点,或者说这样做是不可能的?如果这是不可能的,那么我怎样才能达到类似的效果呢


我不熟悉C#,但我有其他语言的经验。

您只需创建一个名为onNextRound的类,然后在其中删除star()并更新函数,创建onNextRound(),然后编写函数。公开

现在将此脚本附加到主摄影机


最后,您可以在您需要的任何类中创建该类的实例,并调用该函数

,只需使用一个简单的
事件

使用UnityEngine;
使用制度;
公共类事件示例:MonoBehavior{
公共静态事件动作;
void OnGUI(){
if(GUI.按钮(新矩形(10f,Screen.height-40100,30),“下一轮”)){
myEvent();
}
}
}
然后,在要调用
OnNextRound()方法的所有脚本中,添加以下行:

private void Awake(){
EventExample.myEvent+=OnNextRound;
}
私有void OnNextRound(){
//做你的事
}
总之,有几句话:

  • 不要使用
    OnGUI
    ,使用UI按钮
  • 事件的签名必须与
    OnNextRound
    方法的签名匹配。例如,如果您的方法需要
    字符串
    参数,则应将事件声明为
    操作
    。如果您的方法具有返回类型,则应使用
    Func
    而不是
    Action
    (您可以在Microsoft C#知识库网站上深入阅读
    Action
    Func
    委托)
编辑:由于您添加了关于非
monobhavior
类的位,因此可以将您的方法注册到类的构造函数中的
EventExample.myEvent
,即:

公共类SomeClass{
公共类(){
EventExample.myEvent+=OnNextRound;
}
私有void OnNextRound(){
//做事
}
}

谢谢,这正是我想要的。你的编辑不是必需的,我知道我可以在构造函数中完成。我说我有一些经验;)不过,感谢您花时间回答这个问题。为什么我不应该使用
OnGUI()
OnGUI
已经有3年多的历史了,它在Unity 4.6之前是用于UI的,它比带有事件等的新UI系统要慢。它只在自定义编辑器时使用,不再用于运行时。你可以读到它。