最简单的实现方法,是在一个继承MonoBehaviour的类的Update方法中直接调用静态类的Update(),然后将该脚本挂载到任意游戏物体上并设置为不被销毁。
static class Server
{
public static void Update()
{
//Update...
}
}
class Handle : MonoBehaviour
{
void Start()
{
DontDestroyOnLoad(gameObject);
}
void Update()
{
Server.Update();
}
}
但这让这个静态类对一个场景物体产生了耦合,这样在更换场景或是不同项目的复用上产生了不便,于是可以把生成游戏物体这个操作由手动转为静态类中自行生成。
static class Server
{
static Server()
{
//生成一个游戏物体,添加Handle组件并注册事件
GameObject mono = new GameObject("ServerMono");
mono.AddComponent<Handle>().OnUpdate += Update;
}
public static void Update()
{
Debug.Log("Server Update");
}
}
class Handle : MonoBehaviour
{
public event Action OnUpdate;
void Start()
{
DontDestroyOnLoad(gameObject);
}
void Update()
{
OnUpdate?.Invoke();
}
}
这样,在静态成员被调用时,静态类的静态构造函数会被执行,然后生成物体并执行Update。
public class GameManager : MonoBehaviour
{
// emmm随意执行一下静态类的一个函数激活静态构造函数
void Start()
{
Server.Connect();
}
}
执行效果

抛砖引玉,大鸟勿喷~~
网友评论