Unity 遊戲框架搭建 2019 (十八~二十) 機率函數 & GameObject 顯示、隱藏簡化 & 第二章 小結與快速複習

在筆者剛作項目的時候,遇到了一個需求。第一個項目是一個跑酷遊戲,而跑酷遊戲是須要一條一條跑道拼接成的。每一個跑道的長度是固定的,而怪物的出現位置也是在跑道上固定好的。那麼怪物出現的機率決定一部分關卡的難度。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。編碼

結果是正確的。

今天就這些,咱們又能夠進行導出了。

小結

這篇文章中的示例實際上是很是簡單的,可是重點在於一個方法的設計。筆者呢給你們總結以下:

  1. 若是是沒掌握的知識,能夠先寫示例,把示例寫出來,寫出來以後再去思考示例中的代碼哪些是常常更改的,常常更改的值呢能夠做爲咱們要設計的方法的參數。按照這個步驟一個合格的方法就設計出來了。
  2. 若是是已經掌握的知識,這個時候設計方法的目的大多數是爲了實現某個邏輯,好比本篇文章的示例就是此狀況,在這種狀況下咱們要作的固然是對這個邏輯進行一番分析,要分析出來可能要用到哪些 API,接着要思考輸入什麼和輸出什麼,這些梳理清楚了,一個比較合格的方法就設計出來了。

固然,在之後呢,筆者深刻去聊這方面的東西,因此在這裏你們只要儘可能去理解就好,不用達到徹底按照以上結論去作。

GameObject 顯示、隱藏簡化

咱們在作項目的時候,常常會寫以下的代碼。

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,以下圖所示。
006tNc79gy1fzdi32usd7j30i00860t6.jpg
OK,今天的內容就這些。

小結

今天的示例代碼,看似很簡單,其實對於庫的搭建來說內容比較超前了,爲何這麼講呢?

實際上,今天是對咱們的編碼體驗作了一點優化,而這個編碼體驗是筆者本身的體驗,可是這個呢是要對代碼很是敏感或者有大量編碼經驗的人才會注意到這樣一點點細微問題。不過由於代碼自己比較簡單,因此對搭建框架或者庫的初期比較適合你們實踐。

第二章 小結與快速複習

006tNc79gy1fzdi3hfk9tj311l0e378a.jpg

轉載請註明地址:涼鞋的筆記:liangxiegame.com

更多內容

相關文章
相關標籤/搜索