哪个插件chrome自带翻墙插件monosingleton

unity3d中设计模式的学习&一&:泛型单例
时间: 07:02:40
&&&& 阅读:866
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须是static的,没办法直接继承,之前看了《面向对象的游戏开发》这本书里,使用的是泛型,于是我实验了几次
现在我们就来实现这个较为简单的单例泛型:
public class Singleton&T& : MonoBehaviour where T: MonoBehaviour //因为继承MonoBehaviour的物体不能使用new()来构造实例 所以这里只能用MonoBehaviour
private static T //实例目标对象
protected virtual void Awake()
this.CheckInstance(); //觉醒检查
protected bool CheckInstance()//是否唯一,不是就销毁多余的目标,防止目标有多个挂载在其他gameobject上。
if (this == Singleton&T&.Instance)
return true;
UnityEngine.Object.Destroy(this);
return false;
public static T Instance
if (Singleton&T&.instance == null)
Singleton&T&.instance = (T) UnityEngine.Object.FindObjectOfType(typeof(T));// 如果对象没实例化,则为空
if (Singleton&T&.instance == null)
Debug.LogError(typeof(T) + " was no attached GameObject");
return Singleton&T&.
基类做好了,然后下面是派生出的各种功能的单例:
public class PlayerCtrl : Singleton&PlayerCtrl&
.............................................
public class GameManager: Singleton&GameManager&
.............................................
注意到,基类是泛型,所以每个Singleton&T&都是不同的实例 使用时 直接&Singleton&PlayerCtrl&.Instance 就可以返回单例的PlayerCtrl标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:2018
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 1016|回复: 13
优雅的QSignleton (四) 通过属性器实现MonoSingleton
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
大家都出去过周六了,而我却在家写代码,我不想活了T.T...
接下来介绍通过属性器实现MonoSingleton。
代码如下:MonoSingletonProperty.cs
[C#] 纯文本查看 复制代码namespace QFramework.Example
using System.C
using UnityE
class Class2MonoSingletonProperty : MonoBehaviour,ISingleton
public static Class2MonoSingletonProperty Instance
get { return QMonoSingletonProperty&Class2MonoSingletonProperty&.I }
public void Dispose()
QMonoSingletonProperty&Class2MonoSingletonProperty&.Dispose();
public void OnSingletonInit()
Debug.Log(name + &:& + &OnSingletonInit&);
private void Awake()
Debug.Log(name + &:& + &Awake&);
private void Start()
Debug.Log(name + &:& + &Start&);
protected void OnDestroy()
Debug.Log(name + &:& + &OnDestroy&);
public class MonoSingletonProperty : MonoBehaviour
private IEnumerator Start()
var instance = Class2MonoSingletonProperty.I
yield return new WaitForSeconds(3.0f);
instance.Dispose();
结果:三秒之后,同样触发了OnDestroy事件相关链接QSingleton地址:/liangxiegame/QSingletonQFramework地址:/liangxiegame/QFramework
转载请注明地址:凉鞋的笔记:/
每日推荐:
头像被屏蔽
0排名<font color="#FF昨日变化主题帖子积分
蛮牛币4001
在线时间1193 小时
提示: 作者被禁止或删除 内容自动屏蔽
每日推荐:
5829/1000排名<font color="#FF昨日变化21主题帖子积分
熟悉之中, 积分 829, 距离下一级还需 171 积分
熟悉之中, 积分 829, 距离下一级还需 171 积分
蛮牛币1457
在线时间273 小时
路过学习了
每日推荐:
72068/5000排名<font color="#FF昨日变化12主题帖子积分
日久生情, 积分 2068, 距离下一级还需 2932 积分
日久生情, 积分 2068, 距离下一级还需 2932 积分
蛮牛币2716
在线时间315 小时
每日推荐:
86446/10000排名<font color="#FF昨日变化主题帖子积分
常驻蛮牛, 积分 6446, 距离下一级还需 3554 积分
常驻蛮牛, 积分 6446, 距离下一级还需 3554 积分
在线时间1386 小时
等等等等顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
等等等等顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
谢谢顶 威武有力的顶
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
路过学习了
每日推荐:
71737/5000排名<font color="#FF昨日变化4主题帖子积分
日久生情, 积分 1737, 距离下一级还需 3263 积分
日久生情, 积分 1737, 距离下一级还需 3263 积分
蛮牛币1706
在线时间644 小时
周六正常上班
每日推荐:
5754/1000排名<font color="#FF昨日变化23主题帖子积分
熟悉之中, 积分 754, 距离下一级还需 246 积分
熟悉之中, 积分 754, 距离下一级还需 246 积分
蛮牛币1349
在线时间179 小时
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
周六正常上班
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
每日推荐:
71984/5000排名<font color="#FF昨日变化8主题帖子积分
日久生情, 积分 1984, 距离下一级还需 3016 积分
日久生情, 积分 1984, 距离下一级还需 3016 积分
蛮牛币6322
在线时间614 小时
[]: 煮粥侠 捡了钱没交公 蛮牛币 降了 3
每日推荐:
19/50主题帖子积分
注册看看, 积分 9, 距离下一级还需 41 积分
注册看看, 积分 9, 距离下一级还需 41 积分
在线时间0 小时
多谢分享,顶顶顶
每日推荐:
9排名<font color="#FF昨日变化2主题帖子积分
蛮牛币1746
在线时间495 小时
多谢分享,顶顶顶
谢谢顶顶顶
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号好久不见 !之前想着让各位直接用QFramework,但是后来想想,如果正在进行的项目直接使用QFramework,这样风险太高了,要改的代码太多,所以打算陆续独立出来一些工具和模块,允许各位一个模块一个模块的进行更换,减少更换带来的风险。
QSingleton:
之前有几篇文章介绍过单例模板在Unity中的几种实现。之后又参考了其他的单例库的实现,借鉴(chao)了它们的优点,借鉴了哪里有声明原作者。
实现一个继承MonoBehaviour的单例类
namespace QFramework.Example
[QMonoSingletonPath(&[Audio]/AudioManager&)]
public class AudioManager : ManagerBase,ISingleton
public static AudioManager Instance
get { return QMonoSingletonProperty&AudioManager&.I }
public void OnSingletonInit()
public void Dispose()
QMonoSingletonProperty&AudioManager&.Dispose();
public void PlaySound(string soundName)
public void StopSound(string soundName)
这样从头到尾都很!优!雅!
转载请注明地址:
微信公众号:liangxiegame
output/writing/Unity游戏框架搭建
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21805次
排名:千里之外
原创:60篇
(22)(15)(10)(9)(1)(1)(1)(1)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Unity架构(17)
父类,基础MonoBehaviour,这样可以自由使用协程了
using UnityE
using System.C
public class Singleton&T& : MonoBehaviour where T : Singleton&T&
private static T _
public static T GetInstance()
public void SetInstance(T t)
if(_instance ==null )
_instance =
public virtual void Init()
public virtual void Release()
单例管理类,用来初始化和销毁单例
using UnityE
using System.C
using System.Collections.G
public class GameRoot : MonoBehaviour
private static GameObject _rootO
private static List&Action& _singletonReleaseList = new List&Action&();
public void Awake()
_rootObj = this.gameO
GameObject.DontDestroyOnLoad(_rootObj);
StartCoroutine(InitSingletons());
public void OnApplicationQuit()
for (int i = 0; i & _singletonReleaseList.Count - 1; i++)
_singletonReleaseList[i]();
private IEnumerator InitSingletons()
ClearCanvas();
private static void AddSingleton&T&() where T :Singleton &T&
if(_rootObj .GetComponent &T&()==null )
T t = _rootObj.AddComponent&T&();
t.SetInstance(t);
_singletonReleaseList.Add(delegate()
t.Release();
public static T GetSingleton&T&() where T:Singleton &T&
T t = _rootObj.GetComponent&T&();
if(t==null )
AddSingleton&T&();
public void ClearCanvas()
Transform canvas = GameObject.Find(&Canvas&).
foreach (Transform
panel in canvas )
GameObject.Destroy(panel.gameObject);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:152386次
积分:2862
积分:2862
排名:第14028名
原创:108篇
转载:75篇
译文:14篇
(1)(5)(5)(15)(9)(14)(8)(7)(19)(26)(5)(42)(6)(6)(2)(22)(1)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'这段时间空调吹感冒了,休息了好久
本篇介绍QSingleton最重要的功能,是它让QSingleton称得上优雅。相关内容之前介绍过。
代码如下:
MonoSingletonPath.cs
namespace QFramework.Example
using UnityE
[QMonoSingletonPath(&[Example]/QMonoSingeltonPath&)]
class ClassUseMonoSingletonPath : QMonoSingleton&ClassUseMonoSingletonPath&
public class MonoSingletonPath : MonoBehaviour
private void Start()
var intance = ClassUseMonoSingletonPath.I
转载请注明地址:
微信公众号:liangxiegame
output/writing/Unity游戏框架搭建
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21807次
排名:千里之外
原创:60篇
(22)(15)(10)(9)(1)(1)(1)(1)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 monosingleton 的文章

 

随机推荐