iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
Software Development

30 天用 Unreal Engine 5 C++ 開發遊戲系列 第 20

# Day 20|敵人 AI (三) & 玩家血條

  • 分享至 

  • xImage
  •  

今天要再來在敵人 AI 上動手腳了,這次要加上攻擊,不然人現在就走來走去,沒有挑戰性。因為我沒有現成的攻擊動畫,我就直接用 Timeline 來K動畫了。

1. Code

BTTask_Attack.cpp 加上攻擊邏輯

EBTNodeResult::Type UBTTask_Attack::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	// 取得控制的 Pawn
	AAIController* AICon = OwnerComp.GetAIOwner();
	ACharacter* Enemy = Cast<ACharacter>(AICon->GetPawn());
	AActor* Target = Cast<AActor>(OwnerComp.GetBlackboardComponent()->GetValueAsObject("Target"));

	if (!Enemy || !Target) return EBTNodeResult::Failed;

	FOutputDeviceNull ar;
	Enemy->CallFunctionByNameWithArguments(TEXT("DoAttack"), ar, nullptr, true);

	return EBTNodeResult::Succeeded;
}

這裡懶了一點,就直接呼叫 Blueprint 裡的 Custom Event (DoAttack)。

2. Blueprint

  • Enemy
    https://ithelp.ithome.com.tw/upload/images/20251004/20171036RTPpZObd6c.png

這裡是簡單的製作武器揮動動畫 (用 Timeline) 與攻擊判定,一般正式做遊戲還是單獨做攻擊動作比較好。

  • Player
    https://ithelp.ithome.com.tw/upload/images/20251004/20171036Ivn68bHwZe.png

玩家受擊後扣除血量並撥放畫面震動

  • 玩家血條
    https://ithelp.ithome.com.tw/upload/images/20251004/201710366sR2onoQQl.png

血量條跟上次敵人的一樣,創建一個 User Interface Widget,並 Bind Progress Percent,然後在 Event Begin play 創建 Widget,並設定
https://ithelp.ithome.com.tw/upload/images/20251004/20171036xoyRo6PbOR.png

  • Enemy Behavior Tree
    https://ithelp.ithome.com.tw/upload/images/20251004/20171036XmZta3J4Kr.png

3. 完成 !!!


上一篇
# Day 19|敵人 AI (二)
下一篇
# Day 21|整理整理
系列文
30 天用 Unreal Engine 5 C++ 開發遊戲21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言