Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

上篇文章使用SafeObjectPool实现了一个简单的Msg类。代码如下:

        class Msg : IPoolAble,IPoolType
        {
            #region IPoolAble 实现

            public void OnRecycled()
            {
                Log.I("OnRecycled");
            }

            public bool IsRecycled { get; set; }

            #endregion

            #region IPoolType 实现

            public static Msg Allocate()
            {
                return SafeObjectPool<Msg>.Instance.Allocate();
            }

            public void Recycle2Cache()
            {
                SafeObjectPool<Msg>.Instance.Recycle(this);
            }

            #endregion
        }

这个类虽然只是用来做SafeObjectExample的实例类的,但是还是有改进的空间。

在Msg的使用场景中,我们只用到了Msg类的Allocate和Recycle2Cache方法。而OnRecycled和IsRecycle这两个API用户都用不到,或者说用户用了会对Msg的管理造成风险,所以我们要想办法使用户不能访问到这两个API。

这个是可以做到的,就是把OnRecycled和IsRecycled使用接口的显示实现。

代码如下:

        class Msg : IPoolAble,IPoolType
        {
            #region IPoolAble 实现

            void IPoolAble.OnRecycled()
            {
                Log.I("OnRecycled");
            }

            bool IPoolAble.IsRecycled { get; set; }

            #endregion

            #region IPoolType 实现

            public static Msg Allocate()
            {
                return SafeObjectPool<Msg>.Instance.Allocate();
            }

            public void Recycle2Cache()
            {
                SafeObjectPool<Msg>.Instance.Recycle(this);
            }

            #endregion
        }

这样,创建出来的 Msg对象不能直接访问OnRecycled和IsRecycled这两个API了,如果硬是要访问也可以,就要将Msg对象转成IPoolAble接口就可以访问了了。

  • 最近在看《Framework Design Guidlines》,里边说IPoolAble这样的命名有问题,应该是IPoolable,嗯…,要去重构了...

关于接口的显示实现是C#的语法细节,随便贴上一篇给大家参考:

C# 接口的隐式与显示实现 - Ben—Zhang - 博客园:http://www.cnblogs.com/ben-zhang/archive/2012/12/18/2823455.html

OK,今天就到这里

相关链接:

我的框架地址:https://github.com/liangxiegame/QFramework

教程源码:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/

QFramework&游戏框架搭建QQ交流群: 623597263

转载请注明地址:凉鞋的笔记http://liangxiegame.com/

微信公众号:liangxiegame

如果有帮助到您:

如果觉得本篇教程或者 QFramework 对您有帮助,不妨通过以下方式赞助笔者一下,鼓励笔者继续写出更多高质量的教程,也让更多的力量加入 QFramework 。

笔者在这里保证 QFramework、入门教程、文档和此框架搭建系列的专栏永远免费开源。以上捐助产品的内容对于使用 QFramework 的使用来讲都不是必须的,所以大家不用担心,各位使用 QFramework 或者 阅读此专栏 已经是对笔者团队最大的支持了。

原文地址:https://www.cnblogs.com/liangxiegame/p/9123353.html

时间: 2024-10-11 12:35:18

Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节的相关文章

Unity 游戏框架搭建 2018(八)小结

Unity 游戏框架搭建 2018,是笔者在 gitchat 平台发布的 2018 年版本的框架搭建. 在 2018 年的时候 QFramework 已经集成了 UI Kit 和 Res Kit 这两个强大且好用的套件. 可以说 框架搭建 2018 版本是 对 2017 年版本的一个补充,主要补充的内容这是 UI Kit.Res Kit.和一个关于变量命名的讨论. 而在 2018 年,笔者首次发表了对变量命名的一个看法,其实在这一年,笔者从变量的命名研究中收益颇多,远大于 UI Kit 和 Re

Unity 游戏框架搭建 2019 (九~十二) 第一章小结&amp;第二章简介&amp;第八个示例

第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识. 第二章大纲如下. 第八个示例(一) 在之前,我们完成了一个导出的功能.但是在完成这个功能的过程中,我们也遇到了一些问题.我们回忆一下,在<MenuItem 复用>的这

Unity 游戏框架搭建 2019 (二十三、二十四) 备份与版本号&amp;危险的操作

先列出上一篇的总结: 要做的事情: 备份:导出文件,并取一个合理的名字. 遗留问题: 第八个示例与之前的示例代码重复,功能重复. 约定和规则: 每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能 每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法. 每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了. 示例分类: 知识学习&收集 API 收集 C# 语法实践 库本身的功能 规则实现 使用流程提供及

Unity 游戏框架搭建 2019 (十三~十五) 接下来要学什么?&amp; 第九个示例

在之前的两篇中,我们使用 public 静态方法对之前的内容进行了一个抽取,有了 public 静态方法这个工具,我们的学习行为也发生了一点变化. 在没使用 public 关键字之前呢,每一个示例仅仅是一个知识的记录作用.而我们用了 public 关键字之后,我们可以把知识作为一个可以复用的方法.但是呢,这样就有了一个顺序的问题. 我们是先写方法在写 MenuItem?还是先写 MenuItem 还是在写方法? 笔者给出的答案是,在学习新的 API 或者新的知识点的时候建议先写 MenuItem

Unity 游戏框架搭建 2019 (五) 打开所在文件夹

在上一篇中我们搞定了直接导出的功能,这算是一个巨大的进步了.那么在这篇我们再接着往下分析. 这样我们目前的导出步骤为: 点击菜单栏 QFramework/4.导出 UnityPackage. 我们是不是没有可以优化的空间了? 对于导出步骤的数量来说,确实没有了.只需要一步就可以导出了.但是从一个所花费的时间角度来讲其实还有空间的.也就是说,我们还可以节省时间. 我们跳出导出步骤这个角度,而是思考下导出之后我们做了什么事情? 答案是:打开 unitypackage 所在的文件夹. 这步其实也比较耗

Unity游戏框架搭建 (一) 概述

??为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频<Unity项目架构设计与开发管理>,对于我这种初学者来说全是干货.简单的总结了一下,以后慢慢提炼. 关于Unity的架构有如下几种常用的方式. 1.EmptyGO: ??在Hierarchy上创建一个空的GameObject,然后挂上所有与GameObject无关的逻辑控制的脚本.使用GameObject.Find()访问对象数据. 缺点:逻辑代码散落在各处,不适合大型项目. 2.Simple GameManager: ??

Cocos2d-x项目的游戏框架搭建

本篇所用的Cocos2d-x版本为:Cocos2d-x 3.2 Cocos2d-x项目的游戏框架搭建 游戏与应用项目其实差别不是很大,甚至有许多地方都是一样的,无非侧重点不同,手机游戏更侧重于用户的体验,更加的娱乐化.情感化.让玩家感觉“爽”.而手机应用更侧重于简单.明了,优先完成业务为重. 在以Cocos2d-x引擎为基础上,其实我们要做的准备工作还是很多的: 一.分析项目 首先,我们要知道,我们这个游戏是什么样类型的游戏,游戏机制是什么,按照目前市场上来说可以分成如下类型与机制: 1. 游戏

基于Web Service的客户端框架搭建二:数据转换层(FCL)

引言 要使用WebService来分离客户端与服务端,必定要使用约定好两者之间的数据契约.Json数据以其完全独立于语言的优势,成为开发者的首选.C# JavaScriptSerializer为Json与Object对象之间的序列化与反序列化提供了良好的方法. 接口设计 数据转换包含Json反序列化成Object对象和Object序列化成Json数据.在项目中,会有很多实例对象,都需要使用Serialize和Deserialize方法来实现数据转换,我们可以抽象出一个接口IDFC(数据格式转换接

Unity 游戏框架:命名的力量--变量

变量的命名入门 大家先来试着理解一下这段代码: var todoList = new TodoList(); todoList.Todos = new List<Todo>(); var todo = new Todo() { Id = 0, Finished = false, Content = "测试" }; todoList.Todos.Add(todo) todo.Finished = true; 代码本身很简单,就算不用去看 TodoList 类和 Todo 类的