本篇原本是做为原来 优雅的QChain的第一篇的内容,可是QChain流产了,因此收录到了游戏框架搭建系列。本篇介绍如何实现GameObject的链式编程。git
链式编程的实现技术之一是C#的静态扩展。静态扩展能够作到无需继承GameObject就能够为GameObject的对象添加成员方法。其实这么说不太严谨,可是看起来就是这样:)github
首先咱们要实现给GameObject添加一个DestroySelf方法。使用方式以下:编程
gameObject.DestroySelf();
贴上具体实现代码 :c#
using System; using UnityEngine; /// <summary> /// GameObject's Util/This Extension /// </summary> public static class GameObjectExtension { ... public static void DestroySelf(this GameObject selfObj) { GameObject.Destroy(selfObj); } ... }
代码很是简单。微信
以上代码要注意的是:框架
固然也能够用这种方式使用:ide
GameObjectExtension.DestroySelf(gameObject);
这样写的意义不大,不如直接用Object/GameObject.Destroy(gameObject);不过也有可使用的情形,就是当导出给脚本层使用的时候。这里很少说。
初步入门就介绍到这里。下面实现链式编程。性能
链式编程实现方式多种多样。可是对于GameObject来讲有一种最简单而且最合适的方法,就是静态扩展 + 返回this的方式。this
为何呢?链式编程若是可使用继承实现的话有不少种玩法,只不过GameObject是sealed class,不能被继承。因此只能经过静态扩展 + 返回this的方式。这也是为何会把这篇文章做为第一篇的缘由。设计
先看下如何使用。
gameObject.Show() // active = true .Layer(0) // layer = 0 .Name("Example"); // name = "Example"
接下来贴出实现:
using System; using UnityEngine; /// <summary> /// GameObject's Util/This Extension /// </summary> public static class GameObjectExtension { public static GameObject Show(this GameObject selfObj) { selfObj.SetActive(true); return selfObj; } public static GameObject Hide(this GameObject selfObj) { selfObj.SetActive(false); return selfObj; } public static GameObject Name(this GameObject selfObj,string name) { selfObj.name = name; return selfObj; } public static GameObject Layer(this GameObject selfObj, int layer) { selfObj.layer = layer; return selfObj; } public static void DestroySelf(this GameObject selfObj) { GameObject.Destroy(selfObj); } ... }
能够看到新增的几个静态方法与DestroySelf不一样的是,多了个return selfObj,就是调用方法时返回本身,这样能够接着调用本身的方法。原理很简单。
执行效率 vs 开发效率 + 低bug率,就看各位怎么权衡啦。
OK,本篇就介绍到这里。
QFramework地址:https://github.com/liangxiegame/QFramework
转载请注明地址:凉鞋的笔记http://liangxiegame.com/
微信公众号:liangxiegame