C# 我如何在unity3制作全球活动?
我正在unity制作基于巡演的游戏。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
我希望(几乎)在我所有的类中都有一个函数
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系统要慢。它只在自定义编辑器时使用,不再用于运行时。你可以读到它。