今天讓我們回到事件表中,我曾經介紹過,在事件表中,幾乎所有可以填寫數字的欄位,都可以使用數學式,也就是在欄位中進行加減乘除之類的數學運算,但實際上可以使用的數學式可沒這麼簡單,還提供了一些 Math 函示庫裡面的數學函數,讓我們可以直接在事件表中使用,所以今天我就是要來跟各位介紹,如何在事件表中使用這些數學函數,以及有哪些比較常用的數學函數。
首先,我們必須先能夠判斷什麼地方可以使用數學式,最簡單的判斷方法,就是當你打開任意動作、檢查、觸發時,該欄位的目的是希望你可以輸入一個數字,而且可以輸入除了數字以外的任何字元,而不限定你只能填寫 number,那就可以使用,舉個例子。
上圖是動作 儲存全域變數 的內容,其中 變數的值 就是要我們輸入一個數字,以便儲存到變數之中,並且可以輸入數字以外的字元,這時就可以使用數學函數,例如圖中就是其中一種,而像是 變數名稱 這種要讓我們輸入字串的欄位,就沒有辦法使用任何數學式,包括加減乘除。
至於要我們填寫數字,但又不能填寫數字以外的字元的欄位,讓我們繼續往下看。
上圖就是其中一個例子,當輸入了數字以外的東西之後,該欄位就會變紅並跳出警告,這時就不能儲存了,所以自然也就沒辦法使用數學式,大部分的事件表模組作者,應該都會盡量避免出現這種欄位,因為這樣會大幅降低這個功能的自由度,所以如果在製作的過程中有發現這種欄位,也許可以考慮回報給模組作者,也許下次更新時就可以輸入數學式了。
在我們開始介紹那些數學函數之前,先讓我們來聊聊什麼是函數,老實說事件表裡面到處都是函數,其中與函數最像的就是動作,動作就是讓我們輸入一些數值,當動作被執行時,它就會根據我們輸入的那些資料,去執行被寫在動作裡面的程式碼,來達成某些效果,但我們不需要考慮裡面的程式碼怎麼寫,我們只要會用就好。
函數就跟動作一模一樣,同樣是可以輸入一些資料,同樣是根據我們輸入的資料去做某件事情,同樣會給我們一些回饋,這麼看起來函數對於已經了解動作的我們是不是簡單多了呢?
這個部分其實很簡單,直接在欄位裡面輸入對應的函數名稱,再利用 () 帶入要計算的數字就好了,例如第一張圖的 num = min(10, 20)
,這個函數的意思就是取最小值,而 10 < 20,所以最終的結果就是 num = 10
。
另外在函數裡面仍然可以填寫其他數學式,也就是其他數學函數,例如 num2 = max(0, min({num}, 100))
,看起來一下子複雜了不少,但沒關係,我們來一一解析,還記得我說過有多層括號的話,最裡面的括號要先看嗎?這個部分在數學式也是一樣,由於 num = 10
,在使用 {} 帶入之後,裡面的 min 就會變成 min(10, 100)
,取最小值就是 10,接下來就是 max(0, 10)
,這個數學函數是用來取最大值的,所以最終結果就是 num2 = 10
。
上面那一串數學式雖然看起來有點長,但卻在很多地方都會用到,那個數學式的用途是為了將數字控制在一個範圍之內,例如上面那個例子就是控制到 0 ~ 100 之間,總之了解數學式,對於各位未來在製作某些功能時,一定會派上用場的。
接下來我就用表格來跟各位簡單說明,我個人測試在事件表中可以使用的數學函數。
函數名稱 | 函數用途 |
---|---|
min(x, y) | 取最小值,用於回傳 x, y 中較小的一方。 |
max(x, y) | 取最大值,用於回傳 x, y 中較大的一方。 |
abs(x) | 取絕對值,用於將 x 無條件設為正數。 |
ceil(x) | 無條件進位,用於回傳一個大於等於 x 的最小整數。 |
floor(x) | 無條件捨去,用於回傳一個小於等於 x 的最大整數。 |
round(x) | 四捨五入,用於回傳一個離 x 最近的整數。 |
random() | 取隨機數,用於回傳一個 0 ~ 1(不包含)的隨機數。 |
random(x, y) | 取隨機數,用於回傳一個 x ~ y(不包含)的隨機數。 |
randomInt(x, y) | 取隨機整數,用於回傳一個 x ~ y(不包含)的隨機整數。 |
pow(x, y) | 指數運算,用於回傳 x 的 y 次方的值。 |
exp(x) | 指數運算,用於回傳 e 的 x 次方的值。 |
log(x) | 對數運算,用於回傳 x 的自然對數。 |
sqrt(x) | 取根號,用於回傳 x 的根號。 |
pi | 圓周率,等同於我們在數學中寫 π,讓我們更方便使用圓周率。 |
number(x deg, rad) | 單位換算,用於將角度 x 換算成弧度。 |
number(x rad, deg) | 單位換算,用於將弧度 x 換算成角度。 |
atan2(y, x) | 計算弧度,用於計算從 (0,0) 到 (x,y) 的弧度。 |
sin(x) | 三角函數,用於計算 x 弧度的正弦值。 |
cos(x) | 三角函數,用於計算 x 弧度的餘弦值。 |
tan(x) | 三角函數,用於計算 x 弧度的正切值。 |
asin(x) | 三角函數,用於計算 x 弧度的反正弦值。 |
acos(x) | 三角函數,用於計算 x 弧度的反餘弦值。 |
atan(x) | 三角函數,用於計算 x 弧度的反正切值。 |
以上就是在事件表中可以使用的各種數學函數,大概除了 exp、log、sqrt 以外,我幾乎都有用過,只能說了解這些函數的用途,可以讓我們在遊戲中製作出更多更酷的東西,而且也不用了解它怎麼算的,只要知道怎麼用,以及用了的結果是什麼,就可以了。
今天介紹了在事件表中,數學式除了加減乘除以外,還有數學函數可以使用,並且列出了一個列表,供各位可以參考,我自己最常使用的,大概是最小最大值,以及弧度角度的計算與轉換,因為在程式中,一般計算角度的單位都是以弧度為主,而事件表為了方便,幾乎都讓使用者直接輸入角度即可,但還是有某些變數的值讀取出來會是弧度,又或是 atan2 計算出來的值為弧度,就會常常需要進行單位的轉換。
總之表整理在這裡了,可能我們現階段用到數學函數的機會還很少,但萬一有一天需要用到時,想起酷可好像曾經提到過,就可以回來翻翻有哪些函數可以用拉~