在筆者剛作項目的時候,遇到了一個需求。第一個項目是一個跑酷遊戲,而跑酷遊戲是須要一條一條跑道拼接成的。每一個跑道的長度是固定的,而怪物的出現位置也是在跑道上固定好的。那麼怪物出現的機率決定一部分關卡的難度。git
以上有點繞,其實就是,到某一個時刻,怪物是否要出現。而是否要出現是根據機率來決定的。若是一個怪物出現的機率是 100%,那麼每次到達跑道固定的位置時候都要生成怪物。若是是 80% 那麼就有百分之二十的概率不生成怪物。github
那麼如何去寫這個邏輯呢?框架
咱們先分析一下,咱們要輸入的是一個機率,而得出的結果呢,是是否要生成怪物。因此咱們能夠肯定下來返回值呢,是一個 bool 值,而輸入值呢是一個數字。dom
而機率用百分比表示相比用 0 ~ 1的機率值表示更容易被理解。而整數的計算比 float 的計算性能更好,因此要輸入的是一個 0 到 100 區間內的 int 類型。ide
到這裏呢一個方法的輸入輸出,咱們就這樣搞定了。函數
代碼以下:性能
public static bool Percent(int percent) { }
到這裏,要用到一個隨機數生成的 API。UnityEngine.Random.Range(int min,int max)。優化
完整的邏輯實現以下:ui
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class PercentFunction : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/12.機率函數")] #endif private static void MenuClicked() { Debug.Log(Percent(50)); } /// <summary> /// 輸入百分比返回是否命中機率 /// </summary> public static bool Percent(int percent) { return Random.Range (0, 100) <= percent; } } }
輸出結果爲,有一半的機率會輸出 true。編碼
結果是正確的。
今天就這些,咱們又能夠進行導出了。
這篇文章中的示例實際上是很是簡單的,可是重點在於一個方法的設計。筆者呢給你們總結以下:
固然,在之後呢,筆者深刻去聊這方面的東西,因此在這裏你們只要儘可能去理解就好,不用達到徹底按照以上結論去作。
咱們在作項目的時候,常常會寫以下的代碼。
gameObject.SetActive(true); gameObject.SetActive(false);
active 意思是激活,實際上是比較貼切的。
可是筆者是從其餘平臺轉過來的,最初想找到隱藏/顯示 GameObject 的時候有點那麼不適應。
像 Cocos2d 的顯示是 Visible (能夠看見的),而 iOS 的則是 Hidden(隱藏),Quick-Cocos2d-x 的則是 Show/Hide 等等,惟獨 Unity 叫作 active,對剛接觸 Unity 筆者來說,其實很費解。
因此筆者天然就對 gameObject.active 下手了,用方法封裝了一下 Show 和 Hide。
而命名則使用了 Show 和 Hide。
代碼以下:
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class GameObejctActiveImprovements { #if UNITY_EDITOR [MenuItem("QFramework/13.GameObejct 的顯示、隱藏簡化")] #endif private static void MenuClicked() { var gameObject = new GameObject(); Hide(gameObject); } public static void Show(GameObject gameObj) { gameObj.SetActive(true); } public static void Hide(GameObject gameObj) { gameObj.SetActive(false); } } }
這段代碼執行以後,會在場景中建立一個隱藏的 GameObject,以下圖所示。
OK,今天的內容就這些。
今天的示例代碼,看似很簡單,其實對於庫的搭建來說內容比較超前了,爲何這麼講呢?
實際上,今天是對咱們的編碼體驗作了一點優化,而這個編碼體驗是筆者本身的體驗,可是這個呢是要對代碼很是敏感或者有大量編碼經驗的人才會注意到這樣一點點細微問題。不過由於代碼自己比較簡單,因此對搭建框架或者庫的初期比較適合你們實踐。
轉載請註明地址:涼鞋的筆記:liangxiegame.com
QFramework 地址:https://github.com/liangxiegame/QFramework
QQ 交流羣:623597263
Unity 進階小班:
關注公衆號:liangxiegame 獲取第一時間更新通知及更多的免費內容。