优的深圳网站设计公司,阻止wordpress更新,怎么在wordpress编辑进入二级页面,邵阳网站建设游戏框架#xff1a;
游戏框架一般包括消息框架#xff0c;状态机#xff0c;管理器#xff0c;工具类。
消息框架指游戏物体之的通信框架#xff0c;虽然unity引擎自带一套消息框架#xff0c;但该框架只能用于父子物体之间通信#xff0c;无法实现大部分非父子关系的…游戏框架
游戏框架一般包括消息框架状态机管理器工具类。
消息框架指游戏物体之的通信框架虽然unity引擎自带一套消息框架但该框架只能用于父子物体之间通信无法实现大部分非父子关系的物体间通信。因此我们要在后续自己完成一套消息框架
状态机用于管理每一个物体不同状态如对于一个人物可能有移动攻击死亡等多个状态。使用状态机可以更好进行状态管理和切换
管理器用于完成一个特定游戏功能。如角色管理器背包管理器任务系统管理器等
工具类用于封装一些会反复出现的函数或功能如创建随机数生成伤害加密内容等
单例类
单例只一个类只生成一个对象。一般来说游戏内容的管理类如消息管理类网络管理类都只应有一个对象这时就要使用单例实现。
游戏中每将一个脚本挂载到一个游戏物体上作为组件时就会生成一个该脚本类的对象。因此要实现单例必须保证只挂载一个物体
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestMonobehavior : MonoBehaviour
{private static TestMonobehavior instance;public static TestMonobehavior Instance {get {return instance;}}void Awake(){instance this;}// Update is called once per framevoid Update(){}
}在该实例中我们创建一个单例对象instance一般单例对象常用名用于给外界访问。并定义一个静态方法用于返回该单例对象。这样外界就可以通过TestMonobehavior.Instance对单例进行访问
我们考虑到一个游戏中可能有多个单例对象如多个管理类。因此我们可以编写一个泛型单例类基类然后让后续的单例类继承该基类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SingletonBaseT : MonoBehaviour where T : MonoBehavior
{private static T instance;public static T Instance {get {return instance}}protected virtual void Awake(){instance this as T; }protected virtual void OnDestroy(){instance null;}
}
这里我们的程序和上面基本一致只不过将instance设为泛型对象。另外注意以下几点
public class SingletonBaseT : MonoBehaviour where T : MonoBehavior在类定义中where T : MonoBehavior指泛型T必须是MonoBehaviorunity游戏对象类子类
protected virtual void Awake()这里Awake()和Destroy()的方法可能会在子类重写。因此我们将其设为protected权限不可外部访问但可以被继承的抽象方法
对于普通类非unity脚本可以使用以下方法实现单例
public class Test : MonoBehaviour
{private static Test instance;public static Test Instance {get {if (instance null) {instance new Test();}return instance;}
}这里我们在Instance方法里先判断instance是否被创建用于在第一次调用单例方法时创建单例。之后我们就正常使用return instance得到单例对象