当前位置: 首页 > news >正文

商丘家具网站建设泉州平台网站建设

商丘家具网站建设,泉州平台网站建设,wordpress 建博客教程,群晖 建wordpress 500一、给角色的武器添加弹药 1.创建界面,根据笔记23的界面中添加 2.绑定界面控件 UPROPERTY(meta (Bindwidget))UTextBlock* WeaponAmmoAmount;UPROPERTY(meta (Bindwidget))UTextBlock* CarriedAmmoAmount; 3.添加武器类型枚举 3.1创建武器类型枚举头文件 3.2创建文…

一、给角色的武器添加弹药

        1.创建界面,根据笔记23的界面中添加

        2.绑定界面控件

	UPROPERTY(meta = (Bindwidget))UTextBlock* WeaponAmmoAmount;UPROPERTY(meta = (Bindwidget))UTextBlock* CarriedAmmoAmount;

        3.添加武器类型枚举

        3.1创建武器类型枚举头文件

         3.2创建文件时,默认添加的路径是在Intermediate/ProjectFiles文件夹中,通过#include 包含头文件时会找不到对应的头文件,需要更改路径,我是将所有武器类的C++文件放到Weapon文件夹中,所以我将武器类型头文件放到了Weapon文件夹中。

        3.3创建枚举

#pragma onceUENUM(BlueprintType)
enum class EWeapoType : uint8
{EWT_AssaultRifle UMETA(DisplayName = "Assault Rifle"),EWT_MAX UMETA(DisplayName = "DefaultMAX"),
};

         3.4创建武器弹药数量,捡起武器的声音

	/***	弹药数量 */UPROPERTY(EditAnywhere, ReplicatedUsing = OnRep_Ammo)int32 Ammo;//弹药数量UFUNCTION()void OnRep_Ammo();UPROPERTY(EditAnywhere)int32 MagCapacity;//最大弹药数量void SpendRound();void SetHUDAmmo();UPROPERTY()class ABlasterCharacter* BlasterOwnerCharacter; // 当前持有武器的角色UPROPERTY()class ABlasterPlayerController* BlasterOwnerController; // 当前持有武器的角色控制器UPROPERTY()EWeapoType WeaponType;/***	武器的声音*/UPROPERTY(EditAnywhere)class USoundCue* EquipSound;bool IsEmpty();
FORCEINLINE EWeapoType GetWeaponType() const { return WeaponType; }
FORCEINLINE int32 GetAmmo() const { return Ammo; }
FORCEINLINE int32 GetMagCapacity() const { return MagCapacity; }
bool AWeapon::IsEmpty()
{return Ammo <= 0;
}void AWeapon::OnRep_Ammo()
{//BlasterOwnerCharacter = BlasterOwnerCharacter == nullptr ? Cast<ABlasterCharacter>(GetOwner()) : BlasterOwnerCharacter;SetHUDAmmo();
}void AWeapon::SpendRound()
{Ammo = FMath::Clamp(Ammo - 1,0,MagCapacity);SetHUDAmmo();
}void AWeapon::SetHUDAmmo()
{BlasterOwnerCharacter = BlasterOwnerCharacter == nullptr ? Cast<ABlasterCharacter>(GetOwner()) : BlasterOwnerCharacter;if (BlasterOwnerCharacter){BlasterOwnerController = BlasterOwnerController == nullptr ? Cast<ABlasterPlayerController>(BlasterOwnerCharacter->Controller) : BlasterOwnerController;if (BlasterOwnerController){BlasterOwnerController->SetHUDWeaponAmmo(Ammo);}}
}

        3.5.因为新添加了两个显示弹药数量的地方,所以给PlayerController添加设置界面的函数

	void SetHUDWeaponAmmo(int32 Ammo);void SetHUDCarriedAmmo(int32 Ammo);
void ABlasterPlayerController::SetHUDWeaponAmmo(int32 Ammo)
{BlasterHUD = BlasterHUD == nullptr ? Cast<AABasterHUD>(GetHUD()) : BlasterHUD;bool bHUDValid = BlasterHUD &&BlasterHUD->CharacterOverlay &&BlasterHUD->CharacterOverlay->WeaponAmmoAmount;if (bHUDValid){FString AmmoText = FString::Printf(TEXT("%d"), Ammo); // FloorToInt 向下取整BlasterHUD->CharacterOverlay->WeaponAmmoAmount->SetText(FText::FromString(AmmoText));}
}void ABlasterPlayerController::SetHUDCarriedAmmo(int32 Ammo)
{BlasterHUD = BlasterHUD == nullptr ? Cast<AABasterHUD>(GetHUD()) : BlasterHUD;bool bHUDValid = BlasterHUD &&BlasterHUD->CharacterOverlay &&BlasterHUD->CharacterOverlay->CarriedAmmoAmount;if (bHUDValid){FString CarriedAmmoText = FString::Printf(TEXT("%d"), Ammo); // FloorToInt 向下取整BlasterHUD->CharacterOverlay->CarriedAmmoAmount->SetText(FText::FromString(CarriedAmmoText));}
}

        3.6添加重新加载弹药功能,当前武器弹药的数量,播放换弹动画的功能

	/* 换弹 */UFUNCTION(Server, Reliable)void ServerReload();/* 换弹 *//* 处理换弹 */void HandleReload();/* 处理换弹 *//** 重新加载弹药函数 */void Reload();/** 处理设置完成战斗状态 */UFUNCTION(BlueprintCallable)void FinishReloading();/** 计算重新加载弹药的数量 */int32 AmountToReload();//当前装备的武器弹药UPROPERTY(ReplicatedUsing = OnRep_CarriedAmmo)int32 CarriedAmmo;UFUNCTION()void OnRep_CarriedAmmo();bool CanFire();// 是否可以开火函数UPROPERTY(ReplicatedUsing = OnRep_CombatState)ECombatState CombatState = ECombatState::ECS_Unoccupied;UFUNCTION()void OnRep_CombatState();void InitializeCarriedAmmo();TMap<EWeapoType, int32> CarriedAmmoMap;
void UCombatComponent::OnRep_CarriedAmmo()
{Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;if (Controller){Controller->SetHUDCarriedAmmo(CarriedAmmo);}
}bool UCombatComponent::CanFire()
{if (EquippedWeapon == nullptr) return false;return !EquippedWeapon->IsEmpty() && bCanFire && CombatState == ECombatState::ECS_Unoccupied;
}void UCombatComponent::OnRep_CombatState()
{switch (CombatState){case ECombatState::ECS_Reloading:HandleReload();break;case ECombatState::ECS_Unoccupied:if (bFireButtonPressed){Fire();}break;}
}void UCombatComponent::FinishReloading()
{if (Character == nullptr) return;if (Character->HasAuthority()){CombatState = ECombatState::ECS_Unoccupied;UpdateAmmoValues();}if (bFireButtonPressed){Fire();}
}void UCombatComponent::HandleReload()
{Character->PlayReloadMontage();
}void UCombatComponent::Reload()
{if (CarriedAmmo > 0 && CombatState != ECombatState::ECS_Reloading){ServerReload();}
}void UCombatComponent::ServerReload_Implementation()
{if (Character == nullptr || EquippedWeapon == nullptr) return;CombatState = ECombatState::ECS_Reloading;HandleReload();
}int32 UCombatComponent::AmountToReload()
{if (EquippedWeapon == nullptr) return 0;int32 RoomInMag = EquippedWeapon->GetMagCapacity() - EquippedWeapon->GetAmmo();if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType())){int32 AmountCarried = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];int32 Least = FMath::Min(RoomInMag,AmountCarried);return FMath::Clamp(RoomInMag, 0, Least);}return 0;
}void UCombatComponent::InitializeCarriedAmmo() beginplay中调用需要检查HasAuthority()
{CarriedAmmoMap.Emplace(EWeapoType::EWT_AssaultRifle, StartingARAmmo);
}

         3.7.在装备武器时调用

if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType())){CarriedAmmo = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];}Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;if (Controller){Controller->SetHUDCarriedAmmo(CarriedAmmo);}if (EquippedWeapon->EquipSound){UGameplayStatics::PlaySoundAtLocation(this,EquippedWeapon->EquipSound,Character->GetActorLocation());}if (EquippedWeapon->IsEmpty()){Reload();}

        3.8.蓝图设置

http://www.yayakq.cn/news/270210/

相关文章:

  • 用什么做公司宣传网站搜狗网站排名怎么做
  • 湖南新能源公司中企动力网站建设wordpress toc
  • 网站建设汇编材料wordpress captcha
  • 南京网站开发公司哪家好互联网行业网站建设
  • 网站推广建设加盟招聘信息最新招聘2021
  • 网站域名跟谁买企业网站建设安阳
  • 厦门外贸网站建设 之家公众号如何开通
  • 棠下手机网站开发重庆电子商务网站
  • 织梦网站系统建一个大型网站多少钱
  • aspnet网站开发例题做网站侵权
  • 长沙百度搜索网站排名租木模板多少钱一平方
  • 做网站的服务器有哪些seo优化代理
  • 网站二级栏目北京服饰网站建设
  • 哪家网站游戏做的比较好专业网站设计工作室
  • 服装网站建设课程汉南城乡建设局网站
  • 常州网站建设公司排名百度手机助手网页版
  • 海城做网站公司网推拉新平台
  • 网站建设费属于业务宣传费吗营销平台网站建设
  • 从百万到千万 网站怎么优化没有地址可以注册公司吗?
  • 网站开发招标评分标准泊头网站优化
  • 做那个免费观看视频网站济南建网站工作室
  • 别人做的网站自己根目录吗如何查看一个网站是用什么cms做的
  • 卫浴毛巾架网站建设上海个体工商户如何注册
  • 网站外链软件wordpress网站可以显示中文和英文
  • 做中国旅游网站的目的与必要性软件工程师证
  • 动漫建模代做网站百度一下企业网站开发费用包括哪些
  • 网站建设dyfwzx网络平台推广引流
  • h5手机制作网站开发网页制作素材库哪个网站
  • 怎么用ps做简单网站苏州优秀网站设计企业
  • 企业网站优化公司erp企业管理系统软件开发