好久不见 !之前想着让各位直接用QFramework,但是后来想想,如果正在进行的项目直接使用QFramework,这样风险太高了,要改的代码太多,所以打算陆续独立出来一些工具和模块,允许各位一个模块一个模块的进行更换,减少更换带来的风险. QSingleton:   之前有几篇文章介绍过单例模板在Unity中的几种实现.之后又参考了其他的单例库的实现,借鉴(chao)了它们的优点,借鉴了哪里有声明原作者. 快速开始:   实现一个继承MonoBehaviour的单例类 namespace…
加班加了三个月终于喘了口气,博客很久没有更新了,这段期间框架加了很多Feature,大部分不太稳定,这些Feature中实现起来比较简单而且用的比较稳定的就是链式编程支持了. 什么是链式编程? 我想大家应该都接触过DOTween,用起来是这样的. C# transform.DOMove(Vector3.one, 0.5f) .SetEase(Ease.InBack) .OnKill(() => Debug.Log("on killed")) .OnComplete(() =>…
从框架搭建系列的第一篇文章开始到现在有四个多月时间了,这段时间对自己来说有很多的收获,好多小伙伴和前辈不管是在评论区还是私下里给出的建议非常有参考性,在此先谢过各位. 说到是一篇小节,先列出框架的概要图. 目前,图中除了UI模块和未支持的部分,都有相应的文章来介绍. 设计模式: Unity 游戏框架搭建 (二) 单例的模板Unity 游戏框架搭建 (三) MonoBehaviour单例的模板 事件: Unity 游戏框架搭建 (五) 简易消息机制 AI: Unity 游戏框架搭建 (四) 简易有…
背景: 前段时间用Xamarin.OSX开发一些工具,遇到了两个问题. QFramework的大部分的类耦合了Unity的API,这样导致不能在其他CLR平台使用QFramework. QFramework定义了太多了命名空间,如果使用vs for mac或者MonoDevelop开发项目很不方便,每次都要先using命名空间IDE才会提供代码提示,当然用Rider就没有这个问题. 基于以上几点进行了一次架构调整. 目前架构: 为了提升开发效率,命名空间全部统一为QFramework,而不是像以…
MonoBehaviourSimplify 中的消息策略完善 在上一篇,笔者说,MonoBehaviourSimplify 中的消息策略还有一些小问题.我们在这篇试着解决一下. 先贴出来代码: using System; using System.Collections.Generic; namespace QFramework { public abstract partial class MonoBehaviourSimplify { Dictionary<string, Action<o…
在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 Parent,或者是中间隔着几个层级的 Parent. 那这种情况下,如果 A 脚本想调用 B 脚本的方法,直接通过 transform.Find("XXX/YYY/ZZZ").GetComponent<B>().DoSomething() 就可以了. 但是如果是 B 脚本想…
MonoBehaviour 简化 在前两篇,我们完成了第九个示例.为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字. 我们已经接触了类的继承了.接触继承之前,把类仅仅当做是方法的集合,接触了继承之后,我们的类还可以使用继承来解决一些问题. 第十个示例 在 Unity 中,我们的脚本都往往继承自 MonoBehaviour,继承了之后我们就可以在脚本内编写很多功能.比如访问 transform/gameObject,再比如控制动画接收碰撞事件等等.另外我们继承了 Mon…
在上一篇,我们完成了一个定时功能,并且接触了 Action 和委托.lambda 表达式这些概念. 到目前为止,我们的库作为知识收录这个功能来说,已经非常好用了,由于使用了 partial 关键字,所以重复的代码少了很多.而作为一个可复用的工具库来说,勉强能够应付. 通过 partial 关键字,理论上可以对已有了类,进行无限地增加示例.而我们的示例的类型呢,主要是写可独立使用的方法和 MenuItem 示例.什么叫独立使用的方法?到目前为止我们写的所有静态方法都是可以独立使用的,这些方法并不需…
在Unity中我们经常会用到对象池,使用对象池无非就是解决两个问题: 一是减少new时候寻址造成的消耗,该消耗的原因是内存碎片. 二是减少Object.Instantiate时内部进行序列化和反序列化而造成的CPU消耗. 想进一步了解对象池模式优化原理的同学可以参阅: 对象池模式:http://gpp.tkchu.me/object-pool.html,本篇主要讲如何实现一个精简并且灵活的对象池. 设计: 首先我们要弄清楚本篇对象池的几个概念,否则直接上代码大家会一头雾水. 从字面上理解对象池,…
本篇文章介绍如何实现如下代码的链式编程: C# this.Position(Vector3.one) .LocalScale(1.0f) .Rotation(Quaternion.identity); 以上代码中,this为MonoBehaviour类型的对象. 如何实现? 通过上篇文章介绍的return this + 静态扩展很容易做到,实现代码如下所示: ``` C# public static MonoBehaviour Position(this MonoBehaviour selfBe…