————————————————————
希望你在看此章節之前,看完了前面的四個章節,否則可能會不太懂接下來的教學。
終於到了咱們的坑向教學,各位興奮嗎?從這一章開始,Konux將帶領大家逐步進入神奇的觸發器世界,當然本章並不涉及觸發器,下章才會教學,但本章會為學習觸發器打牢基礎,所以一定要好好掌握本章的內容,從這一章開始,學習難度可能會直線上升,同時,你的編輯器實力也是如此,是挑戰,也是機遇,希望大家hold的住。
以下為本章知識點:
· 坑向製作的思路
· 動畫的製作
· 玩家單位相關技能
· 觸發區域的使用
· 函數編輯器的使用
· 常量、變量與函數
· 單位的中心點
· 常見函數詳解
· 對單位部分屬性的使用
· 物理單位的使用
新的開始
啊哈,又是熟悉的界面,又是熟悉的畫風!




坑向製作思想
相信有不少新人在首次製作坑向時,都會露出張三般邪惡的笑容,想把玩家往死裡整,以發洩自己玩坑向時的憤怒,這種行為超級正常,但是它行不通。我們如果是站在玩家對立面的角度來設計一個地圖或者說遊戲,那麼它一定是失敗的!我們製作遊戲的初衷是什麼?遊戲應該是能給人帶來快樂的第九藝術,不管是什麼形式的快樂,總之絕對不是折磨。跳刺,玩家一直死,他有快樂嗎?有,當他過了某個刺型之後,會產生非常大的成就感(雖然這個成就感只適用於有實力的個體),坑向,玩家一直被坑,他快樂嗎?非常快樂,因為那些坑非常有意思,那如果這個坑向做的很無聊而且各種惡意(不是惡趣味),還快樂嗎?快樂個錘子,玩家可以選擇不玩,並給你個踩,這樣你滿腦子的惡意坑不到任何人,相當於你白做了。
那麼什麼叫做惡意的坑?比如設置一個磚塊、存檔等無傷害的東西碰到就死且不給出任何提示效果,速度特別快的刺使玩家反應不過來秒死、坑向結合難度高的跳刺、滿屏的碰撞顯示磚塊等等,最直接的方法是去自制關卡的萌新區找坑向地圖,多玩幾個(因為有的萌新做的坑向還可以)你就能感受到了。
坑向注重坑,坑一般需要合理的展現,而不是讓玩家啥都沒幹就死了,坑的過程要讓玩家能反應過來是怎麼被坑的,而不是讓玩家去猜。所以做坑向時,應該打開腦洞去想坑型,怎麼離譜怎麼想,並且要站在玩家的角度去思考坑法,將自己帶入進去,想像如果自己是玩家,該怎麼走,該怎麼想,從而針對玩家做出相應的坑型。
好了廢話就說到這裡(才不是),我們做坑向的第一步就是做出地形,地形要怎麼樣有創新呢?拿官方教程裡Aikesi做的地形舉例子,咱大致勾畫一下,就長下面這樣

那麼首先我們得瞎糊一個玩家路線,路線不要太簡單,不要太複雜,不可交叉(新手階段建議別交叉,高級製作可以),Konux在這裡隨便畫一個,注意路線是橫豎組成的直線



如果需要了解坑型的常規套路,可以進入下方我寫的坑向理論的教程鏈接進行閱讀:
https://easydoc.net/s/85829661/USXlrH6u/skih7IXY
函數編輯器
好了,接下來就開始講解重點技術環節,在坑向中如果想讓刺能聽我們的命令來做一些事,就需要寫動作了,動作是個啥呢?你可以理解為腳本,你寫好動作後,遊戲就會根據你寫的動作裡的內容而執行相應的一些事情,而動作裡裝的就是一堆的函數(腳本里對應為代碼)。可能這並不易於理解,我們先上手試試就行。
找到觸發區域單位,將它擺出來



接下來我們雙擊動作屬性,寫一下動作(也叫函數組,因為動作裡裝的就是一堆函數),點擊左上的新建函數,就可以看到以下的東西

1:新建函數(快捷鍵:C)
2:編輯函數(快捷鍵:E)
3:複製函數(快捷鍵:Ctrl+C)
4:剪切函數(快捷鍵:Ctrl+X)
5:粘貼函數(快捷鍵:Ctrl+V)
6:設置函數的激活狀態(函數是灰色的就表示未激活,此狀態下,函數不執行)( 快捷鍵:A)
7:刪除函數(快捷鍵:Delete)
咱上面講了一堆的函數,那麼說到底,啥是函數?是數學裡的函數y = f(x)嗎? 是,也不是!程序裡的函數和數學上的函數不同,但從廣義上來說又有共通之處,函數一旦它們的參數(比如x值)確定,那麼函數就能輸出一個確定的值,在我們的編輯器中也是類似,只要函數的參數確定,那麼函數就能根據你的參數而去做一些特定的功能,比如讓刺往上飛。



好了,由於我們要對刺做操作,刺是單位,所以就應該選擇的是單位分類裡的相關函數,我們要讓刺干啥?飛?不不,這叫移動,所以可以找到如下的一個函數










那麼或許有人有這樣一個要求,想做一個連環坑,比如讓刺連續移動,就像下圖這樣




要解決這個問題,首先我們需要理解動作(函數組)的運行機制



可能細心的讀者會注意到有這樣一個函數,指定速度的移動

這裡先科普一下速度的概念,我們小學一年級在數學課的講臺上,體育老師就曾經教過我們v = s/t,也就是速度等於位移除以時間,在遊戲裡也一樣,比如速度為2,我們就能算出這大概就是每1秒鐘走s = vt(速度乘以時間) = 1*2的距離,大概是2/0.64 = 3.125個格子(網格)。
現在我們來解釋為什麼坑向一般用指定時間的一些函數,而很少選擇指定速度的函數,這兩個函數其實都可以達到同一效果,但是如果我們要加等待呢?等待多少秒合適?如果是以時間為基準的函數,那麼我們不用算就能得到準確的等待時間,如果用速度呢?這個時間需要計算s/v才能得到一個準確的結果,這個s就是起點到終點的距離,要是做坑向每做一個函數就得做一個計算題,那就相當不方便,所以一般來說,我們更習慣使用指定時間的函數。
好了,以上就是函數編輯器最基本的用法,接下來將以問答的方式來邊問邊學
問中求進
Q:咱看到函數里有些帶偏移的函數,偏移是啥意思?
A:改變分為絕對改變和相對改變,大部分函數的參數是絕對改變,即有一個確定的參考值,而偏移就指的是以自身的參數為標準的相對改變。打個比方,張三上次考試考了100分,這次考試考了90分,那麼這次考試的絕對分數就是90分,而他的分數偏移就是-10分。偏移就是以原本的參數做為基準。比如座標偏移(如下)


Q:能讓玩家不能控制嗎,又如何解除控制?
A:一般需要讓玩家不能操作的,就要使用[暫停]函數,就是下面這個,暫停函數能夠暫停單位上大部分技能的運行。





但我們要研究問題的本質,為什麼暫停主機玩家單位就能讓玩家控制不了角色呢?暫停函數的功能是?暫停單位的技能,那麼想必事情都歸結在了主機玩家單位的技能上,我們打開數據編輯器,看看主機玩家單位


單位 == 屬性 + 技能(再次提醒)
玩家能夠控制角色,就是因為玩家單位有[玩家控制]技能
玩家能使用物品(比如槍),就是因為玩家單位有[物品控制]技能
玩家能重生,就是因為玩家單位有[玩家重生]技能
玩家能存檔,能用傳送門傳送,就是因為玩家單位有[玩家交互]技能
只要把其中的一個技能給刪了,那麼玩家就會失去這個技能所對應的功能,但是強烈建議新手不要這麼幹(特別是[玩家重生]技能),這種操作需要有一定的經驗了才能駕馭,否則相當容易出bug。
在這些技能裡有些屬性,各位可以根據需要進行設置,比如[玩家控制]技能,如果需要玩家空中只能有一段跳,就可以設置空中最大跳躍次數為1(默認值為-1,表示無限次,但因為最大跳躍次數為2,所以空中最大跳躍次數相當於2)

還有移動速度,如果想讓玩家按左鍵,角色朝右走,按右鍵,角色朝左走,就可以直接設置移動速度為-3,表示玩家的速度反向
再看看[物品控制]技能,若想讓玩家一開局就有某種物品,可以設置初始物品,如下圖中的設置攝像頭模式物品,在跳刺地圖中非常常用

那麼要恢復玩家就很簡單了,和暫停玩家一樣的操作,只需要使用[單位]-恢複函數即可

Q:還有哪些移動單位的函數,它們有什麼區別?
A:大概下面這些函數

持續移動(指定速度、角度)函數就是字面意思,使單位從自身的位置開始,朝某個角度進行持續的移動,當然這個函數內也可以設置移動的距離,而角度的概念我們在第一章就解釋過,上左下右依次為0°、90°、180°和270°
Q:如何讓單位放大或縮小
A:單位大小的變化我們通過縮放操作來實現,可以使用如下函數




接下來我們來試試,我們想讓刺從左圖縮放成右圖所示的樣子






對於想實現以上的效果,我們有兩種方法:
第一種:縮放同步移動(推薦)
既然刺的縮放時中心點不動導致沒能實現這個效果,那麼我們只要刺在縮放的同時把它的座標(中心點)同步移動到縮放後的正確位置就可以了!就像下面這樣,注意兩個函數執行的時間必須相同才能實現同步


第二種:改變中心點(不推薦)
既然中心點不變,那麼我們直接把刺的中心點設置為最下面,也可以實現朝一個方向放縮,如下圖設置刺的屬性

Q:如何讓單位旋轉?
A:旋轉單位也有相關的函數,如下


相信旋轉偏移的概念你們應該能理解,就是逆時針偏移為正數,順時針偏移為負數,如下



那麼咱們做個小小的綜合練習,咱們想讓一堆的刺做如下的運動

有同學就要問了,咱們只教瞭如何讓刺自轉,沒教如何讓刺繞某點旋轉呀,你這不是欺負老實人嗎???嗯?
誒!真的沒教嗎?回憶一下,我們上一章教過旋轉節點的用法,是用指向使單位綁定節點,而節點又在自轉,所以單位可以繞節點旋轉,節點能旋轉是因為它用了一個自動旋轉的技能,這裡我們如果換成函數控制的旋轉,不也一樣可以嗎?
好的,我們直接開始操作,先將其它的單位都指向這個位於旋轉中心座標的刺(為了展示指向,所以把刺移了位置)

很顯然右側的刺需要朝順時針方向旋轉90°,所以偏移就是-90,咱們直接這樣寫





Q:如何讓單位顯示或消失
A:很簡單,有設置顯示狀態的函數,在單位類函數里


Q:如何在遊戲運行時創建和刪除單位
A:創建和刪除單位當然是要使用單位類的函數啦,很快啊,咱就找到了如下函數


好了,我們點擊常量,然後選擇想要創造的單位數據(注意到選項卡上面有個大大的“對象”,啊這,此對象非彼對象,這裡的對象你就可以理解為是單位數據,而通過單位數據造出單位的過程,專業的說法叫做“實例化對象”,這是編程中的概念,無需瞭解)。


刪除單位也是同理,只不過刪除的是單位,而不是單位數據,至於為啥,這裡應該就不用解釋了。後面還有一個刪除(指定時間)其實就是起延時刪除的作用,非常簡單,請自行嘗試就可。需要說明,設置單位刪除和設置單位的顯示狀態為否是不同的,刪除是真正的把單位給刪掉了,而設置顯示狀態為否時,單位還在,只是不顯示而已。
Q:你講了這麼半天,那麼函數編輯器裡的常量、變量和函數到底是個啥?
A:這裡是個超級重點,需要特別注意。
先解釋常量,常量就是一個確定的量,比如放置在場景上的單位,它們都是確定的,你可以去選擇的,在數值上,比如1、2、3、1.114514、(0.64,0.64)等等都屬於常量,你可以準確的知道這個量的值,它們不會變動。
而變量就是會變動的量,也可以說是不確定的量,比如主機玩家單位,可能是散人單位,可能是Kid單位,也可能是其他的單位,它就是個變量,再比如用函數創建的單位,你從場景中選不到,這也是變量,因為創建的單位可能有各種情況,就像每個人都不同,再比如數學上的函數y=f(x),其中x就是一個自變量,x的值不確定。
函數的概念想必你們已經懂了不少,咱們上面介紹了很多的函數,函數有輸入參數(也可以無參數)和輸出,函數的參數可以使用常量、變量和函數,函數可以以函數作為參數(實質上是以函數的輸出作為參數),一級函數(主函數)的輸出是用於實現功能,而作為主函數的參數的函數的輸出,實際上就是變量,所以這就是為什麼舊版函數編輯器裡只有常量和變量。


如下面的簡單函數

Q:咱會用函數創建單位了,但是如何控制這個單位進行移動、縮放和旋轉?
A: 用函數創建的單位屬於什麼?上面講過了,屬於變量,變量有兩種獲取途徑,一是二級函數的輸出,另一個就是直接用變量,而變量我們現在沒講怎麼使用,所以只有函數一個選擇。




所以最後創建的單位的獲取函數一定要跟在創建單位的後面,否則就容易張冠李戴了。
那麼如果我們非得要等待呢?等待之後我還想操控這個單位咋辦?這個時候就得使用變量,變量簡單來說就是給數據(單位、座標、整數、實數(小數)等等)取名,比如咱令某個新創建的單位叫張三,那麼以後我叫張三時,就是叫的這個單位,就像給單位起外號一樣,至於為啥是外號呢,因為可以對同一個數據起不同的名,比如咱又叫張三為王二麻子,那麼以後不管叫哪一個名字,都是指的這個單位,很顯然的,你不能把兩個單位都叫做王二麻子(變量不能重名),不然你叫來的單位就可能是你最後叫王二麻子的那個單位(變量重名則後面的數據會覆蓋前面的數據),因為時間短記性好。
我們看看設置變量的函數。

變量有三種,全局變量,局部變量和單位變量
全局變量就是全局的(廢話),比如我們有兩個觸發區域,那麼第一個區域設置了一個整數變量為1919810,那麼第二個區域也能接收到這個變量的值
而局部變量就是局部的,只能在設置這個變量的這個地兒用,其他地方都不認,就像你們班同學認識你,而其他班同學就不認識你一樣的道理,但是由於局部變量不好用,如果使用不當就容易出bug,所以建議新手可以不使用局部變量
單位變量就是一種只能在同一個單位上使用的變量,你可以理解為單位的附加屬性,或者說是掛在單位上的局部變量。
我們這裡只講全局變量(因為最常用),如果對其他的變量感興趣的可以去查看官方文檔裡的變量教程:
https://easydoc.net/s/85829661/USXlrH6u/N2QX5DlZ
當單位創建時,我們立即在下面寫上變量,給單位起一外號

那麼以後我們再需要控制這個單位時,就直接喊外號就好了!



Q:咱這是做坑向來著,咋讓機關觸發之後,玩家重生後,機關能還原?
A:簡單,在遊戲屬性裡,加載模式中把死亡重置物品選項打開

A:動畫的製作可以參考官方文檔:
https://easydoc.net/s/85829661/USXlrH6u/fVKrYLhk
需要注意的是,動畫的名字是Idle(默認),否則動畫不播放
Q:玩家有皮膚,但是我想讓玩家玩我圖時,用我規定的皮膚咋辦?
A:在遊戲屬性裡,將禁止自定義皮膚改為是


Q:我想重複某個操作,比如想讓單位一直髮射子彈咋做?
A:這裡需要用到[系統]-[內部計時器]函數,咱們來了解一下


我們在計時器到期動作裡寫上這樣一些東西就好了

可能這裡的第一個函數比較難設置,因為它用到了三層函數,下面給出方法


Q:別人觸發坑時有聲音,是怎麼弄的?
A:其實很簡單,有播放音效的函數,直接用就好了

Q:我使用了死亡重置物品之後,為啥重生後機關還可以動?如何解決?
A:這確實是個很令人頭大的問題,因為死亡重置其實是重置的單位,但並不會重置動作,所以在動作還沒執行完畢的時候復活,就會出現這種情況,這是由於等待或者計時器延遲了函數的運行造成的問題,所以我們需要在延時操作(比如等待函數)的後面,加上如下所示的東西就可以了。


這是大家第一次接觸條件函數,所以詳細的操作步驟如下,點擊條件以添加函數




Q:咱想做一個單位,使它可以受重力影響,並且剛創建時,往上拋動之後下落,能整嗎?
A:當然能!要使單位能受到重力,那麼就需要單位有物理屬性,所以就需要把單位設置為物理單位類型(這裡新造了一個單位數據,名為“重力牆”)


接著,我們可以使用設置速率函數(此函數只能用於物理單位)以給單位一個初速度,但是由於需要這個單位一創建就給它一個往上的速率,所以咱得寫在[自定義技能(初始)]技能裡,我們給這個牆加上這個技能


將這個單位放置在場景中,我們運行一下就會發現,這個單位只下落,而一開始沒有上拋,說明我們的函數沒有起效,這就需要在我們在技能的動作裡的第一條寫上:等待0.01秒

好了以上就是本章的全部內容了,內容非常的多,也非常的精彩,感謝收看!希望在通過以上教程的學習後,你們能做出讓自己滿意的作品!
編輯器新手入門交流與討論可加入官方二群,群號:979717879