最近我已经从Unity转变为明亮的& amp;在Xamarin Studio中使用Mono的闪亮OpenGl / Freeglut解决方案。我认为这是一个明智的举动,因为我没有学习Unity想要学习的东西。显然这不是最明智的举动,但我现在承诺。我非常想念两件事:Awake()&更新()。
这很神奇。我想要的任何物体都可以扩展monobehaviour&我可以每帧运行一些代码。但作为一个新手csharper,我不完全确定如何在统一之外复制这个。 基本上我有我的主程序;修剪版本是这样的:
using System;
using Tao.FreeGlut;
using OpenGL;
namespace Project
{
class Program
{
private static int width = 1280, height = 720;
public static MyPlayerObj player = new MyPlayerObj();
public static MyMouseListenerObj mouseE = new MyMouseListenerObj();
public static MyKeyboardListenerObj keyboardE = new MyKeyboardListenerObj();
public static MyEnemyObj e1 = new MyEnemyObj();
public static MyEnemyObj e2 = new MyEnemyObj();
public static MyEnemyObj e3 = new MyEnemyObj();
public static void Main(string[] args)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
Glut.glutInitWindowSize(width, height);
Glut.glutCreateWindow("Project");
Glut.glutIdleFunc(Update);
Glut.glutDisplayFunc(DisplayFunc);
Awake();
Glut.glutMainLoop();
}
public static void Awake()
{
// Run all Awake Methods
}
private static void DisplayFunc()
{
}
public static void Update()
{
Gl.Viewport(0, 0, width, height);
Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
// Run All Update Methods
// Then run all LateUpdate methods
Glut.glutSwapBuffers();
}
}
}
在这个例子中,我有一些对象,如播放器,键盘和放大器。老鼠听众和一堆敌人。现在,我想要做的是能够调用每个对象Awake方法(如果有),或者如果没有则忽略它。这可能是(伪代码,原谅我):
public static void Update()
{
interfacedObjects = assembly().findAllObjectsUsingInterface(IUpdateable);
foreach (var item in interfacedObjects)
{
if(item.hasMethod('Update')
item.call('Update');
}
}
基本上,我要做的就是将我的物品链接到父母“Monobehaviour”。我想让我的班级结构尽可能简单。
public class MyPlayerObj : MyMonoBehavior
{
public void Update()
{
// Do stuff
}
}
public class MyMonoBehavior : IUpdateable
{
public virtual void Update()
{
}
}
有人对我有什么建议吗?我知道它可能,但我只是不知道这个设计模式是什么,也不知道如何执行它。
我应该提一下,为了学习,我宁愿将此解决方案保留在本机代码库中。
答案 0 :(得分:2)
有趣的问题。
我不知道Unity在幕后如何做到这一点,但我很想知道。我认为实现这一点的最简单方法是查看观察者设计模式。您正在寻找的基本思想是拥有一个MonoBehavior接口或每个人都从中继承的抽象类。然后,您将拥有一个通过在每个存在的MonoBehavior上运行循环来处理MonoBehaviors的类。