<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                本篇本來是作為原來優雅的 QChain 的第一篇的內容,但是 QChain 流產了,所以收錄到了游戲框架搭建系列。本篇介紹如何實現 GameObject 的鏈式編程。 鏈式編程的實現技術之一是 C# 的靜態擴展。靜態擴展可以做到無需繼承 GameObject 就可以為 GameObject 的對象添加成員方法。其實這么說不太嚴謹,但是看起來就是這樣:) ## C# 靜態擴展快速入門 首先我們要實現給 GameObject 添加一個DestroySelf方法。使用方式如下: ```cs gameObject.DestroySelf(); ``` 貼上具體實現代碼 : ```cs 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); } ... } ``` 代碼非常簡單。 以上代碼要注意的是: 1. 靜態擴展方法必須在靜態類中實現。 2. 第一個參數前要加this關鍵字。 當然也可以用這種方式使用: ``` csharp GameObjectExtension.DestroySelf(gameObject); ``` 這樣寫的意義不大,不如直接用Object/GameObject.Destroy(gameObject);不過也有可以使用的情形,就是當導出給腳本層使用的時候。這里不多說。 初步入門就介紹到這里。下面實現鏈式編程。 ## GameObject 實現鏈式編程 鏈式編程實現方式多種多樣。但是對于 GameObject 來說有一種最簡單并且最合適的方法,就是靜態擴展 + 返回 this 的方式。 為什么呢?鏈式編程如果可以使用繼承實現的話有很多種玩法,只不過 GameObject 是 sealed class,不能被繼承。所以只能通過靜態擴展 + 返回this的方式。這也是為什么會把這篇文章作為第一篇的原因。 先看下如何使用。 ```cs gameObject.Show() // active = true .Layer(0) // layer = 0 .Name("Example"); // name = "Example" ``` 接下來貼出實現: ```cs 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,就是調用方法時返回自己,這樣可以接著調用自己的方法。原理很簡單。 ## 目前 GameObject 鏈式編程的優劣: * 優點:代碼緊湊,寫起來很爽快,以自己的習慣設計接口,會提高開發效率。 * 缺點:性能會損耗一丟丟,調試不方便,出異常時候會發現堆棧信息超級長,別人看了會誤認為Unity 升級又加了API。不過 DoTween,UniRx 都在這么用… 執行效率 vs 開發效率 + 低 bug 率,就看各位怎么權衡啦。 OK,本篇就介紹到這里。 轉載請注明地址:涼鞋的筆記:[liangxiegame.com](http://liangxiegame.com) ## 更多內容 * QFramework 地址:[https://github.com/liangxiegame/QFramework](https://github.com/liangxiegame/QFramework) * QQ 交流群:[623597263](http://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce66) * **Unity 進階小班**: * 主要訓練內容: * 框架搭建訓練(第一年) * 跟著案例學 Shader(第一年) * 副業的孵化(第二年、第三年) * 權益、授課形式等具體詳情請查看[《小班產品手冊》](https://liangxiegame.com/master/intro):https://liangxiegame.com/master/intro * 關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。 ![](http://file.liangxiegame.com/38eccb55-40b2-4845-93d6-f5fb50ff9492.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看