最近忙,好久没发博客的,见谅。
突发奇想,Unity的各个脚本是怎么有条不紊运作的,于是自己简单的用C#控制台程序模拟下,只是理下思路,具体的流程自己去体会,轻喷,不啰嗦,直接上代码。
首先是游戏脚本接口,如下:
interface IGame
{
void Awake();
void Start();
void Update();
}
有了脚本接口我们就能够去实现具体逻辑了,这里就简单的实现两个脚本。
public class GameBase:IGame
{
public GameBase()
{
}
public void Awake()
{
Console.WriteLine("Awake");
}
public void Start()
{
Console.WriteLine("Start");
}
public void Update()
{
Console.WriteLine("Update");
}
}
public class MyGameScript:IGame
{
public MyGameScript()
{
}
public void Awake()
{
Console.WriteLine("MyGameScript Awake");
}
public void Start()
{
Console.WriteLine("MyGameScript Start");
}
public void Update()
{
Console.WriteLine("MyGameScript Update");
}
}
脚本里面的函数你可以做任意想做的事情,下面开始游戏逻辑了,其实也很简单,就分两步,一个是注册脚本,一个是游戏循环。
class Program
{
public static List<IGame> scripts = new List<IGame>();
static void Main(string[] args)
{
RegistScripts();
GameLoop();
}
private static void GameLoop()
{
foreach (var script in scripts)
{
script.Awake();
}
foreach (var script in scripts)
{
script.Start();
}
while (true)
{
Thread.Sleep(1000); //这里为了演示 控制帧率
foreach (var script in scripts)
{
script.Update();
}
}
}
private static void RegistScripts()
{
GameBase gb = new GameBase();
MyGameScript mgs = new MyGameScript();
scripts.Add(gb);
scripts.Add(mgs);
}
}
总结:Unity的内部实现其实不是这样的,这里只是通过自己的方式去实现,最后上一张运行的结果。