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

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

斯坦福UE4C++課程P17-P22調(diào)試工具

2022-10-26 22:04 作者:_Hide-on-bush_  | 我要投稿

這一章主要是說作業(yè)和debug工具

作業(yè)一中,我們使用以下方式讓MeshComp和OnActorHit綁定。

如果不重寫ASExplosiveBarrel::PostInitializeComponents(),而是在構(gòu)造函數(shù)里使用

用熱重載編譯可能會(huì)出現(xiàn)問題。

tip:PostInitializeComponents運(yùn)行在構(gòu)造函數(shù)之后,BeginPlay之前。

使用熱重載,可能有如下問題:

  1. 無法編譯,就算代碼正確

  2. 熱重載崩潰了

  3. 告訴我們編譯完成,但沒有重載變化的代碼

以下是C++實(shí)現(xiàn)的爆炸桶代碼:

SExplosiveBarrel.h

SExplosiveBarrel.cpp

UE_LOG(CategoryName, Verbosity, Format)宏用于輸出信息到日志;

TEXT()宏把在里面輸入的字符串字面值轉(zhuǎn)換為ue期望的形式,并且使用更廣泛的字符集。所以字符串最好都加上該宏。

以下方式把撞擊的位置信息輸出到屏幕:

下面介紹添加斷點(diǎn),作者用的VS,點(diǎn)擊代碼界面左側(cè)添加斷點(diǎn),運(yùn)行到斷點(diǎn)時(shí)暫停,然后逐語句執(zhí)行(F10step over跳下一個(gè)),和常規(guī)C++調(diào)試基本一致,我用的Rider設(shè)置的VS快捷鍵,操作一致。

接下來是在藍(lán)圖中添加斷點(diǎn),選擇某個(gè)節(jié)點(diǎn)右鍵Toggle breakpoint(F9)添加斷點(diǎn),然后選項(xiàng)卡里都有以上類似debug功能。

接下來我們讓相機(jī)平移,不讓角色擋住魔法球發(fā)射的位置(準(zhǔn)星)

我們可以直接拖動(dòng)相機(jī),但是彈簧臂還在原來位置,所以不能直接拖

我們選中彈簧臂組件,調(diào)節(jié)Socket offset讓彈簧臂和相機(jī)一起移動(dòng)即可。

接下來用空控件藍(lán)圖做一個(gè)準(zhǔn)星Crosshair_Widget,添加一個(gè)image,錨點(diǎn)設(shè)置為中央,位置設(shè)置為x=0,y=0,尺寸為8×8,alignment設(shè)置為0.5,0.5。

在角色藍(lán)圖中把準(zhǔn)星顯示在視口中。

現(xiàn)在我們發(fā)射魔法球,當(dāng)右手接近屏幕中央時(shí),魔法球會(huì)以正確的方向射出,但角色轉(zhuǎn)個(gè)身讓右手遠(yuǎn)離中央時(shí),魔法球會(huì)偏離很遠(yuǎn)。

作業(yè)2(1/3),用C++解決上面的問題。

首先提示我們用藍(lán)圖如何實(shí)現(xiàn):

在ProjectileCannon藍(lán)圖添加以下節(jié)點(diǎn),意思是獲取玩家和炮的位置,玩家位置向量減去炮位置向量得到的是炮指向玩家的向量,然后設(shè)置魔法球發(fā)射的方向旋轉(zhuǎn)到前者的的方向。

根據(jù)以上提示,我們可以讓魔法球發(fā)射的方向旋轉(zhuǎn)到從相機(jī)中心(準(zhǔn)星)發(fā)射碰撞檢測(cè)射線所碰到的第一個(gè)物體上的碰撞點(diǎn)(若無碰撞說明無限遠(yuǎn),直接用前面的發(fā)射方向),在角色C++類PrimaryAttack函數(shù)中添加代碼(可借鑒SInteractionComponent類的射線碰撞檢測(cè)方法):

我們用攝像機(jī)正前方發(fā)出射線1000米的范圍內(nèi)檢測(cè)是否有以下三種類型物體碰撞(WorldDynamic,WorldStatic,PhysicsBody,因?yàn)槟壳皥?chǎng)景中除了魔法球的Projectile碰撞配置外只有這三種)

效果如下:

作業(yè)2(2/3)Blackhole Projectile黑洞發(fā)射物藍(lán)圖實(shí)現(xiàn)

首先在C++里為發(fā)射黑洞綁定動(dòng)作,發(fā)射邏輯和MagicProjectile一致(有攻擊發(fā)射的Actor和攻擊動(dòng)畫被顯示在藍(lán)圖中)。

然后創(chuàng)建能被黑洞吸引的模擬物藍(lán)圖(先在角色藍(lán)圖把blackhole下的類選為模擬物類,動(dòng)畫設(shè)為攻擊動(dòng)畫),注意徑向力組件的force要大一點(diǎn)(我設(shè)的-1500000),否則影響輕微

作業(yè)2(3/3)Dash Ability C++實(shí)現(xiàn)

實(shí)現(xiàn)按Q發(fā)射一個(gè)魔法球,飛行0.2秒后(或者提前碰到物體)爆炸,爆炸后0.2秒,角色傳送到爆炸的位置。

這里告訴我們可以做一個(gè)共享的類,讓左鍵攻擊魔法球、Q傳送魔法球、黑洞都繼承自一個(gè)類(因?yàn)樗鼈冇写罅恐貜?fù)代碼、組件)。

我們做了共享類,然后用藍(lán)圖實(shí)現(xiàn)0.2秒傳送效果。

上半部分是飛行0.2秒傳送,下半部分是提前發(fā)生碰撞傳送。

最后是ensure/ensureAlways宏,前者第一次被執(zhí)行時(shí)會(huì)中斷運(yùn)行到當(dāng)前位置,后者每次執(zhí)行都會(huì)中斷運(yùn)行到當(dāng)前位置,因?yàn)榫幾g器認(rèn)為此宏處出現(xiàn)了一個(gè)問題。這類似C的主動(dòng)檢測(cè)錯(cuò)誤的assert斷言。

值得注意的是,該宏在游戲打包后會(huì)自動(dòng)刪除,并不會(huì)影響正常游戲。

斯坦福UE4C++課程P17-P22調(diào)試工具的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
民权县| 乡宁县| 四川省| 壶关县| 洮南市| 石楼县| 彭阳县| 简阳市| 赤壁市| 嘉定区| 阿瓦提县| 大洼县| 福海县| 双峰县| 南通市| 中西区| 中牟县| 阳曲县| 泸定县| 长丰县| 嘉义县| 禹城市| 台南县| 汉沽区| 太康县| 昌吉市| 利辛县| 会宁县| 新蔡县| 达日县| 仪征市| 上饶县| 读书| 赤壁市| 什邡市| 成安县| 太湖县| 怀化市| 乡城县| 堆龙德庆县| 巨野县|