二 框架搭建开始
从上之下分别保存
BaseUI
Define
UIManagerResManager
均添加命名空间 namespace Framework
Defines中的脚本
empty
using UnityEngine;
using System.Collections;
namespace Framework{
public delegate void StateChangeEvent(object ui,EnumObjectState newState,EnumObjectState oldState);
#region 全局枚举对象
///
/// Enum Object State
///
public enum EnumObjectState {
None,
Intial,
Loading,
Ready,
Disabled,
Closing
}
public enum EnumUIType:int
{
None=-1,
TestOne=0,
TestTwo=1,
}
#endregion
public class NewBehaviourScript : MonoBehaviour {
void Start () {
}
// Update is called once per frame
void Update () {
}
// Use this for initialization
}
}
使用了枚举类
BaseUI中的脚本
using UnityEngine;
using System.Collections;
namespace Framework {
public abstract class BaseUI : MonoBehaviour {
#region Cache gameObject & transform
private GameObject _cacheGameObject;
///
///
///
public GameObject CacheGameObject
{
get {
if (null==_cacheGameObject) {
_cacheGameObject = this.gameObject;
}
return _cacheGameObject;
}
}
private Transform _cacheTransform;
public Transform CacheTransform
{
get {
if (null == _cacheTransform)
_cacheTransform = this.transform;
return _cacheTransform;
}
}
#endregion
#region EnumObjectState &UI Type
protected EnumObjectState _state = EnumObjectState.None;
public event StateChangeEvent StateChanged;
public EnumObjectState State
{
protected get
{
return this._state;
}
set {
EnumObjectState oldState = this._state;
this._state = value;
if (null!=StateChanged) { StateChanged(this, this._state, oldState); }
}
}
public abstract EnumUIType GetUIType();
#endregion
// Use this for initialization
void Start () {
OnStart();
}
void Awake()
{
this.State = EnumObjectState.Intial;
OnAwake(); }
// Update is called once per frame
void Update () {
if (this._state == EnumObjectState.Ready)
{
OnUpdate(Time.deltaTime);
}
}
void Release()
{
this.State = EnumObjectState.Closing;
GameObject.Destroy(this.gameObject);
OnRelease();
}
void OnDestroy()
{
this.State = EnumObjectState.None;
}
protected virtual void OnStart() { }
protected virtual void OnAwake() {
this.State = EnumObjectState.Loading;
this.OnPlayUIAudio();
}
protected virtual void OnUpdate(float deltaTime) { }
protected virtual void OnRelease() {
this.State = EnumObjectState.None;
OnPlayCloseUIAudio();
}
protected virtual void OnPlayUIAudio() { }
protected virtual void OnPlayCloseUIAudio() { }
}
}
类的写法:get 加载缓存
了解到
一,注释方法 :///
二,region :
1.C# 中的 #region 和 #endregion表示一块区域,这样在 Visual Studio 中可以将这块区域的代码折叠起来,便于查看。
2.#region 和 #endregion 大小写敏感。
#region 和 #endregion 可以嵌套。
#region 后面可以跟任意文字以对该区域进行说明。
三,缓存可以提供效率
四,如何区别C# private和protected?
private 是完全私有的,只有当前类中的成员能访问到.五,abstract和virtual的区别
protected 是受保护的,只有当前类的成员与继承该类的类才能访问.
这篇博客写的很好
复制粘贴部分:
abstract:声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
virtual:标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract 与virtual : 方法重写时都使用 override 关键字
接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。
接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract 与virtual : 方法重写时都使用 override 关键字
接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。
接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法
六,delegate
这篇看的不太明白。。。。。。
学习的需要很多。。。。。。
七,单例类
using UnityEngine;
using System.Collections;
namespace Framework {
public abstract class Singleton
where T:class,new(){//抽象基类不能直接使用,被很多类继承
private static T _Instance = null;//单例类
public static T Instance
{
get
{
if (null == _Instance)
{
_Instance = new T();//第一次使用才会调用对象
}
return _Instance;
}
}
protected Singleton()//构造函数
{
if (null!=_Instance) {
throw new SingletonException("This"+(typeof(T)).ToString()+"Singlrton Instance is not null!!!") ;
}
Init();
}
public virtual void Init()//初始化函数
{
Debug.Log("Singleton
Init");
}
}
}
using UnityEngine;
using System.Collections;
namespace Framework {
public class SingletonException : System.Exception
{//exception 异常
public SingletonException(string msg):base(msg)
{ }
}
}
八stack