TTF2裡,我相信大夥都不會忘記時空穿梭的關卡,玩家可以通過手套在相同的地圖中穿梭不同的時間,現在過不去的地方,“唰”的一下就能從過去通過,並且在過去與現在的來回穿梭之間不需要讀條,那麼這是怎麼做到的呢?我們先從遊戲裡看一看。
這裡我就以B站up主“小慫貓人”的視頻裡得知,實際上游戲的這個關卡里,存在兩個相同的場景,兩個場景的高低差不同,玩家在使用技能的時候,改變角色的座標就可以實現無縫切換了。
圖解,“過去”與“現在”其實就是高度不同的兩個場景
這麼設置的原因,就是為了讓玩家在使用技能後能夠無縫切換,達到流暢的體驗,並且製作起來也非常簡單。既然簡單,那麼我就在虛幻引擎5中試著還原一下這個酷炫的技能。
UE5默認的第三人稱模式
首先我們簡單的打開一個新的UE5項目,那麼這個默認的場景我們就直接保留了。
接下來,我們應該在這個場景的上方,創建另一個場景用於我們的“時空回溯”。
在頭上創建一個新的場景
下方場景,地板的高度是-50
上方場景,地板的高度是10000
因為我們是要做成時光回溯的效果,那麼我們上下兩個場景的地堡,應該除了高度不一樣,其他地方都一樣,否則我們的人物在穿越的來回會感覺到位置的偏移,這個很好理解吧!
那麼,簡單的設定好兩個場景之後,我們就需要幹嘛?
設置我們的技能嘛!
右上角編輯-項目設置-輸入-操作映射 ,名字記得改一下,我這隨便添了個Skll,後面改成timetravel
接著,我們需要進入項目設置菜單,找到輸入,添加一個新的技能輸入,這裡我把這個技能名字叫"timetravel",並且設定了,按“F"鍵觸發。
設定好了技能之後呢,接下來,我們就要進入藍圖頁面,把這個技能教會我們的角色。
雙擊這個打開它
打開我們人物的藍圖,這裡原本是保存了UE第三人稱模板自帶的人物、攝像機、移動、跳躍等。
模板人物默認的藍圖
OK,打開我們的藍圖了,接下來,該是我們大展拳腳的時候了!
那麼,怎麼完成這個技能呢,我們需要先構思一下。
首先,這個技能是我按下F鍵釋放的是吧!
因此,我們先找到我們設定好的技能案件,timetravel。
右鍵任意空白處,輸入我們設定好的名字
接著,我們再想一想,是不是應該將我們的人物,移動到高度10000的位置?
直接用中文打字:瞬移,就能找到這個藍圖
這裡UE是很方便啊,直接給了我們瞬移藍圖。
但是,這裡就需要再次思考了。
要完成這個瞬移,我們需要一個目標吧,誰去瞬移——角色,那我們看這個目標節點,寫的是"self"那就是自己,OK,不需要改。
接著,我們是不是要設定瞬移到哪裡?
這裡黃色節點後邊就是位置的座標,OK,那我們是不是要把垂直的Z軸的數字,改成10000?
這樣做對嗎?
那麼,OK,操作到這一步,請問這麼做對嗎?不要滑下去,先自己想一想。
不對,為什麼不對?
因為下層地板的高度是-50,上層地板的高度是10000,那麼兩個場景的高度差是多少?10050,想到這點了嗎?
並且,這裡設定的瞬移座標,實際意義是(0.0.10000)這個點,意味著你的角色如果走到了(50.23.-50)這個位置,你使用了技能,會瞬移到(0.0.10000)這個點,而不是(50.23.10000),這顯然與我們想要的結果不同,這一點想到了嗎?
對吧,明顯不對,並且,我們希望技能是能在兩個時空來回穿梭的,《泰坦隕落2》裡也是如此,使用技能能夠反覆在過去與現在跳躍,所以,我們應該怎麼做?
我說說我的想法吧,我們是不是可以增加一個判定條件,假如我們的角色,高度超過了10050,那麼是不是使用技能,就讓我們的角色高度下降?
那假如我們的角色,高度低於10050,那麼是不是使用技能,就讓我們的角色高度上升?
所以,這裡需要添加一個判定條件,我們使用一個布爾值保存判斷的結果。
新建一個布爾變量
我們新建一個布爾值,用來保存我們高度的判斷,這裡點擊加號就能創建。
我們將這一變量,拖到藍圖裡,選擇”設置InHigh”。
接著,我們需要獲取到角色的位置,計算機是個笨比,你看得到你角色的位置,計算機是不知道的,所以我們需要先獲取一下。
接著,我們是不是隻用知道Z的值是多少就行了?X和Y關我屁事。
所以我們使用拆分,把(X,Y,Z)拆分出單獨的Z的數字。
接著做對比,右鍵點擊空白處,輸入一個簡單的>或者中文“大於”都行,做一個判斷,數字大於10050,就輸出為真,如果小於10050,就輸出為假。
藍圖如圖所示
這一步也很好理解吧,並且UE的藍圖非常方便,相同的顏色相連就行了。
當我們做完這一步,接下來也很好理解了。
如果是“真”,那麼意味著,人物的高度大於10050,OK,說明人物在上面的場景裡,那我們使用技能的目的是不是給它降下去?
並且,我們不能簡單的去改變數字,我們是不是要先獲取角色的位置,我得知道人在哪裡吧?
接著,我X和Y的數字不變,Z的數字減去10050,這個是不是才是我們想要的XYZ的值?
如果是“False”,那麼是不是人物在下面的場景,那麼藍圖這一塊我們複製黏貼,把減去10050,改成加10050,就OK啦?
瞬移操作部分
OK,那麼做到這一步,我們的這個技能就大功告成了。
不重要的部分
當然,為了測試我們的技能,在後面我又補充了一個打印文本的操作。
如果傳送成功,那麼就會在屏幕中出現文字,如果傳送不成功,傳送的那個位置有別的東西擋住了,就會在屏幕中出現文字“卡住了,回不去”。
這個“僅限開發”的意思是,只在UE編輯器裡你會看到它,但是在遊戲中你看不到,這個主要是用來方便設計師找問題的。
完整的技能藍圖
最後,我們進入到遊戲裡實際測試一下。
傳送成功
OK,來回傳送非常成功!
但是有一個忘了,我們忘記設置瞬移後的旋轉值了,因此每一次瞬移後,人物的面向都會迴歸默認,我們想要更絲滑順暢的體驗!
補充一下旋轉
這裡我們獲取到人物實時的旋轉,然後給到瞬移就行了,不需要改變,這樣我們的角色每次使用技能都不會改變面向!
OK,到這裡,技能的實現就已經制作完成了。
但是呢,想要讓技能真正用在遊戲裡,讓玩家們接受,還需要仔細的打磨。
例如,是不是該添加一個使用技能的動畫?
然後,還需要添加不同的後期處理等等,讓玩家感受到這是同一個地方,但是不同一個時空。
總結一下,其實想要實現《泰坦隕落2》裡的時空穿梭不難,做出兩個場景也不難,其實難的還是在怎麼去想到這個,讓玩家會覺得真的像是那麼回事兒。
就同樣的這個瞬移,它可以是時空回溯,它也可以是《寂靜嶺》的鏡子世界,也可以是玩家走著走著來的一段回憶...
總之原理上大概都是可以這麼實現的,但是更重要的是你要想的到這麼一個環節,然後去實現它。
我在學習遊戲開發的過程中,越來越感覺到,就是想要做的好玩是很難的,很容易就是做出一坨,畫面精美但缺乏遊戲性和關卡設計的垃圾,所以說越發覺得任天堂牛逼,他們在製作遊戲的時候始終是會想到如何做的好玩,做出有意思的關卡設計。
自己在學習UE,發帖記錄一下自己的心得筆記,不定期隨緣更新!也希望幫助到一些想要學習的盒友!