最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

傳送門實現(xiàn)思路

2023-03-02 12:56 作者:蔚遲逸  | 我要投稿

免責聲明:本篇不算教程,算是一個我個人的學習記錄,記錄了我做這個功能是的思考過程,僅提供參考,歡迎各位相互交流學習;

展示視頻:傳送門項目展示_嗶哩嗶哩bilibili

參考教程:

https://www.youtube.com/watch?v=TASHWpdQFwc&t=83s(不止一集)

【50CaL】傳送門背后的開發(fā)原理分析 | 游戲之后 EP4 - Portal_嗶哩嗶哩_bilibili(原理講得比較透徹,但不涉及具體的代碼實現(xiàn))


功能總結(jié):

  • 可以通過門看到另一個門的景象

  • 可以傳送物體,并能夠卡在中間

  • 可以傳送玩家,確切來說是玩家攝像機


藍圖實現(xiàn):

  • 第一步視覺的實現(xiàn),簡單地說就是用兩個相機渲染兩張RT,并把這兩張RT分別貼在兩個傳送門上;

通過藍圖來賦予材質(zhì)

注意:以下部分均通過Sequence連接到Tick上

因為RT是通過屏幕映射的方式貼在傳送門上的,所以視口的比例與RT的比例不同則會造成RT的變形,所以要實時調(diào)整RT的長寬比;

如果不是很明白uv的原理,可以看看Youtube上的視頻(大概28min左右):https://www.youtube.com/watch?v=Ju23BFU5TNI&t=2134s

傳送門需要另一個門配對,可以不用我這種方法,手動選取也可以,只要保證能找到另一個連接的門就行;

實時計算玩家相機變換后的Transform,并將Transform賦予捕獲攝像機,并根據(jù)攝像機與門的距離計算近裁切平面的距離,防止被其它物體遮擋;

這里用了一個自己寫的純函數(shù),原理也很簡單(我一共用了三個純函數(shù),都是計算變換的,長得也差不多)

對坐標變換原理不了解的可以看看這個Up的視頻;

【50CaL】傳送門背后的開發(fā)原理分析 | 游戲之后 EP4 - Portal_嗶哩嗶哩_bilibili


  • 第二步,傳送物體的原理也不難,就是在另一個門后復制一個一摸一樣的物體,并且完全繼承本體的Transform,當本體傳送過去后,刪除復制體。但是UE的藍圖里好像并沒有完全復制一個Actor的功能,之后通過類生成Actor,但屬性無法繼承,所以,我就用了C++寫了一個組件完成這部分功能,并把函數(shù)公開到藍圖(Clone Actor、Clone Static Mesh Actor);

創(chuàng)建C++類的方法我就不講的,因為我自己也不是很懂,怕誤人子弟,各位還是去看看別的Up或者Youtuber的教程吧,這里只貼一下我的C++代碼;

如果不是很理解這個原理的,也可以看看這個Up的視頻,基本所有的原理都有講【50CaL】傳送門背后的開發(fā)原理分析 | 游戲之后 EP4 - Portal_嗶哩嗶哩_bilibili


別問為什么不用Collision,慘痛的教訓。因為Collision用的是事件,而事件是異步執(zhí)行的,也就是你完全不能預(yù)估事件執(zhí)行的順序,這對于需要引用前面變量的值的程序來說是致命的,所以不能這么用,還是老實用射線檢測吧;

這部分的判斷看起來確實是有點亂,實際上也確實是有點亂,還有更亂的在后面。這里主要是為了避免Actor傳送過去了,但因為距離原因又傳送回來,從而變成一個無限循環(huán)的情況。還有一個就是為了讓已經(jīng)一半身子進入傳送門的Actor能夠順利出來(反悔)

這里標紅的,設(shè)置速度的,因為不是所用Actor都像靜態(tài)網(wǎng)格體一樣模擬物理的,比如第一人稱模板里的子彈,就是加了發(fā)射物組件的,所以這里需要多要解決方案,像白框那里一樣,在后面加上去就好;


  • 第三步,傳送角色。這里不僅包括玩家Pawn,我把所有Character類都與其它Actor類分開來寫,但整體上思路沒有太大區(qū)別,就多了一個調(diào)整克隆體的姿勢的步驟而已,還有就是玩家Pawn需要一些格外處理;

Pawn的話,主要的還是相機,畢竟相機才是玩家的本體。瞬移沒太多要講的,和普通的Actor差不多,不過相機一般不會繞X軸旋轉(zhuǎn)。判斷是否傳送,這里主要是通過門到相機的向量與門的前向量叉乘判斷的,加上一個球型的范圍限定,防止在大老遠就被誤傳送;

這里的主要難點是,玩家的傳送需要事實上的無縫,和Actor不同,Actor可以在距離門一段距離后再傳送,以至于不會重復觸發(fā)。所以需要多加一個變量判斷Pawn在傳送后是否離開了一定距離。

這個需要多一步,同步骨骼網(wǎng)格體的姿勢;

因為考慮到AI,所以需要和玩家分開判斷,就顯得有點復雜了;

  • 補丁,如果是第三人稱鏡頭,就會出現(xiàn)鏡頭距離角色太遠,而不能很好的傳送的問題,所以需要在接近傳送門時調(diào)整彈簧臂的長度,不過還是因為異步的原因,所以視覺效果有點問題,不過能用。碰撞的設(shè)置是為了避免在第三人稱鏡頭下,因為攝像機碰到了傳送門而發(fā)生傳送的誤操作情況,需要在項目設(shè)置里加多一個Object;

不足:不足的地方太多了,甚至不知道從哪說起,我就列三個比較明顯的吧;

  • 在第三人稱下,人物移動時鏡頭會出現(xiàn)抖動的情況,雖然玩家視角看著好像沒有,但數(shù)據(jù)告訴我確實是有,所以導致了變換Transform的捕捉相機也出現(xiàn)抖動,從而使得RT的抖動會比較明顯,第一人稱倒沒事;

  • 目前傳送門只能水平放置,不能傾斜,傾斜的話,其它Actor可以照常工作沒啥問題,但是Pawn就會出現(xiàn)鏡頭問題,雖然能用,但是不太好用;

  • 還有一個問題就是相機的近裁切面,因為才切面不一定會與傳送門平行和重合,所以就導致了畫面的不連貫,觀感不好,這個問題用不對成視錐體可以解決,但是我不會。關(guān)于這個問題也可以去看看這個Up的視頻,他也有講【50CaL】傳送門背后的開發(fā)原理分析 | 游戲之后 EP4 - Portal_嗶哩嗶哩_bilibili;


傳送門實現(xiàn)思路的評論 (共 條)

分享到微博請遵守國家法律
阳谷县| 梧州市| 垦利县| 西宁市| 青海省| 靖西县| 绩溪县| 德兴市| 蒙自县| 承德市| 镇平县| 德化县| 洞口县| 克东县| 宝兴县| 洪湖市| 伊金霍洛旗| 香港 | 江孜县| 滦平县| 通许县| 托克托县| 墨江| 通化县| 东兴市| 永康市| 黄陵县| 平泉县| 吉水县| 桑日县| 隆昌县| 自治县| 常德市| 法库县| 沈丘县| 盖州市| 望城县| 静安区| 定边县| 紫金县| 佛冈县|