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

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

斯坦福UE4C++課程P50-P54敲定AI,擴展框架

2022-11-07 20:06 作者:_Hide-on-bush_  | 我要投稿

首先給ProjectileBase添加音頻組件,一定記得設(shè)置Attachment,因為音頻組件繼承自場景組件(組件繼承自Actor組件(藍圖中在左側(cè)欄下面)和Scene組件(藍圖中在左側(cè)欄上面)),而場景組件包含位置屬性,不設(shè)置Attachment就會在原點播放。而繼承自Actor組件的,比如Attribute組件,就沒有位置屬性,也不需要位置屬性,僅僅是Actor的'register'。并且場景組件繼承自Actor組件。

下面我們給AI角色類添加一些功能(死亡時停止行為樹、ragdoll效果、自動銷毀)。

ragdoll碰撞profile文件如下:

現(xiàn)在AI死亡'Ragdoll'效果(播放死亡動畫時,開啟骨骼的模擬物理效果(重力、骨骼相互作用)):

另外,為了讓AI子彈傷害和角色不同,我們從魔法球藍圖創(chuàng)建子藍圖類MagicProjectileBP_AI,到行為樹的RangeAttack任務(wù)里選擇該子藍圖類,傷害改成5,而角色用的魔法球藍圖類傷害改成30。

打開AI用的網(wǎng)格體,點擊右上角Physics:

可以看到所有骨骼,有的用的box碰撞,有的用的膠囊體碰撞。骨骼之間會有約束,點擊模擬,可以看出這種約束。

另外,C++項目生成時,會自動給我們添加默認的GameMode類:

如果不想用這個,直接刪掉,重新構(gòu)建項目即可。

下面我們給AI提供更多的感覺,比如添加受到傷害時的反應(yīng)

在AICharacterC++類的OnHealthChanged函數(shù)中,形參的Instigator我們之前一直傳入的nullptr(Attribute組件類Broadcast傳入的nullptr),我們給之前的功能都添加該參數(shù)(魔法球類、生命藥水類)。

現(xiàn)在AI在受到傷害/看到玩家時,就會設(shè)置TargetActor為玩家。

SAICharacter.h

SAICharacter.cpp

下面我們學(xué)習(xí)使用靜態(tài)函數(shù)。

打開UGameplayStatics庫,發(fā)現(xiàn)繼承自UBlueprintFunctionLibrary(和藍圖沒多大關(guān)系,只是一個函數(shù)庫)。其中的函數(shù)都用UFUNCTION()暴露在藍圖中,且都用static聲明,所以UGameplayStatics類不會有實例對象,意義不大,純粹是為了別人用其中的函數(shù)。

為了寫像這樣的靜態(tài)函數(shù)庫,我們可以用C++(新建繼承自UGameplayStatics的類),也可以用藍圖(創(chuàng)建Blueprint Function Library),這兩者純粹是編程方式的區(qū)別。

下面我們在屬性組件中添加靜態(tài)函數(shù)。

因為之前我們要用屬性組件中的東西需要:

這是冗長的一段代碼,我們在屬性組件中寫一個靜態(tài)函數(shù),讓其他類獲取到Actor的屬性組件更加簡便。

在屬性組件.h文件public下添加

.cpp文件實現(xiàn):

現(xiàn)在只需要用

就可以獲取該Actor的屬性組件(沒有屬性組件就返回nullptr)

下面寫第二個靜態(tài)函數(shù),獲取到Actor是否活著的信息。

.h中添加(meta修飾符可以讓該函數(shù)在藍圖中的名字展示為"IsAlive",讓API更加直觀)

.cpp中添加

這一P我們給AI的在RangedAttack任務(wù)中,設(shè)置

讓AI發(fā)射的魔法球ignoreAI自身,即便魔法球半徑再大也不會攻擊到自身。

然后添加

讓AI每次發(fā)射魔法球都有一定的偏差。

最后添加

讓AI在玩家死亡時不再攻擊角色。(查看行為樹,該task返回Failed,其所在sequence就停止執(zhí)行task右側(cè)的節(jié)點)

看下整個RangedAttack類:

SBTTask_RangedAttack.h

SBTTask_RangedAttack.cpp

最后我們通過HitFlash效果進行傷害反饋。

在SAICharacter類OnHealthChanged函數(shù)受到傷害時,添加

.h中對TimeToHitParamName聲明

在構(gòu)造函數(shù)中為TimeToHitParamName賦值為閃光材質(zhì)的TimeToHit參數(shù)名字

于是在藍圖中可以看到TimeToHitParamName的值為TimeToHit,便于美術(shù)人員工作。

我們給原有AI材質(zhì)自發(fā)光顏色Add上閃光材質(zhì)函數(shù)的輸出值即可。(之前作業(yè)我們是直接給AI用的閃光材質(zhì),和這里實現(xiàn)有所不同)

斯坦福UE4C++課程P50-P54敲定AI,擴展框架的評論 (共 條)

分享到微博請遵守國家法律
萨嘎县| 陈巴尔虎旗| 仁寿县| 九龙县| 旬邑县| 康定县| 威信县| 孟州市| 盘山县| 和林格尔县| 神农架林区| 沈丘县| 南投县| 河北省| 濮阳县| 满城县| 分宜县| 望都县| 宁都县| 襄樊市| 淳化县| 灵寿县| 托克逊县| 乾安县| 维西| 仁布县| 青冈县| 西林县| 彭州市| 通道| 伽师县| 茶陵县| 宁海县| 天水市| 利津县| 德惠市| 临桂县| 常熟市| 汉中市| 通州区| 巴彦县|