iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0

在完成攻擊動畫與判定後新增武器裝備系統

在前幾天的開發中,我們已經完成角色的攻擊動畫與攻擊判定,角色能夠進行連擊,並依據判定範圍對目標造成傷害。下一步,我們要延伸系統,新增武器裝備功能,讓角色可以手持不同武器並切換武器,豐富戰鬥體驗。

設計目標

  1. 武器模組化:每種武器作為獨立資源,包含 Mesh、傷害數值與附著點等屬性,方便後續新增或調整。
  2. 動態裝備與收回:角色可以將武器裝備到手上或收回背上,以支持自由切換武器。
  3. 攻擊與武器結合:攻擊動畫與武器判定結合,確保攻擊時的碰撞判定正確,並可實現連擊、特殊技能等效果。

開發流程概念

  • 武器資料管理:可以透過 DataTable 或 Blueprint 設定每個武器的基本屬性,如 Mesh、傷害值、附著點名稱等,方便修改與擴充。
  • 裝備邏輯:當角色按下裝備鍵時,系統會將武器附著到角色指定的骨骼或 Socket 上,例如手部或背部,並根據狀態切換可見性。
  • 攻擊判定結合:當攻擊動畫觸發時,武器的碰撞判定會隨之啟動,利用 Notify 或自訂事件,確保攻擊期間武器能對目標造成傷害。

透過這樣的設計,我們可以實現一個 可擴充、可模組化、穩定的武器裝備系統,並與已完成的攻擊動畫和判定無縫結合,為角色戰鬥系統增加更多彈性與深度。


Code

iThome30daysCharacter.h

public:
    bool bbHavingWeapon=false;
    UStaticMeshComponent* WWeaponMeshComponent;

iThome30daysCharacter.cpp


void AiThome30daysCharacter::DoAttack(UAnimMontage* AnimMontage, FName ComboNotify, bool bHavingWeapon, UStaticMeshComponent* WeaponMeshC)
{
	if (!bIsAttacking)
	{
		bbHavingWeapon = bHavingWeapon;
		WWeaponMeshComponent = WeaponMeshC;
...

void AiThome30daysCharacter::DoAttackTrace(FName TraceSocketStart, FName TraceSocketEnd, float Radius, TArray<TEnumAsByte<EObjectTypeQuery>> CollideObjectType)
{
    if (WWeaponMeshComponent)
    {
        Start = WWeaponMeshComponent->GetSocketLocation(TraceSocketStart);
        End = WWeaponMeshComponent->GetSocketLocation(TraceSocketEnd);
    }else
    {
        Start = GetMesh()->GetSocketLocation(TraceSocketStart);
        End = (TraceSocketEnd!=NAME_None) ? GetMesh()->GetSocketLocation(TraceSocketEnd) : Start;
    }
...

使用

https://ithelp.ithome.com.tw/upload/images/20250926/20171036MfSKRAyc2g.png
在武器 Mesh 增加兩個 Socket:
https://ithelp.ithome.com.tw/upload/images/20250926/20171036JSIVYNeKsj.png

完成!


上一篇
# Day 11|為攻擊增加判定
下一篇
# Day 13|武器系統
系列文
30 天用 Unreal Engine 5 C++ 開發遊戲15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言