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

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

21_209~218SoulsAndStamina

2023-03-25 17:43 作者:俯瞰萬千風(fēng)景  | 我要投稿

209?Souls Niagara System給靈魂創(chuàng)建一個(gè)特效粒子

Creating A Niagara System For Souls

使用Niagara創(chuàng)建一個(gè)靈魂的特效

210?Soul ?Class

Creating the soul pickup創(chuàng)建可以撿起的靈魂

創(chuàng)建了一個(gè)Soul類,繼承自Item

然后新建一個(gè)Soul類的藍(lán)圖

添加上一節(jié)創(chuàng)建的Niagara特效

拾取的邏輯與Treasure類相同


class UNiagaraSystem;

UCLASS()
class UE5_0307_API ASoul : public AItem
{
	GENERATED_BODY()
	

public:
	FORCEINLINE int32 GetSouls() const { return Souls; }
	FORCEINLINE void SetSouls(int32 SoulNum) { Souls = SoulNum; }
protected:

	virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;

private:

	UPROPERTY(EditAnywhere, Category = "Souls")
	int32 Souls = 1;
	
};
#include "Items/Soul.h"
#include "Interface/PickupInterface.h"



void ASoul::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	IPickupInterface* PickInterface = Cast<IPickupInterface>(OtherActor);//將傳入的AActor* OtherActor轉(zhuǎn)成EchoAcharatcer,需要識別參與碰撞的是我們控制的角色類
	if (PickInterface)
	{
		PickInterface->AddSouls(this);

		SpawnPickEffect();
		SpawnPickSound();
		
		Destroy();
	}
}

211?Pickup interface拾取接口

Creating an interface for picking up items創(chuàng)建一個(gè)拾取物品的接口


我們通過創(chuàng)建一個(gè)pickup的接口來實(shí)現(xiàn)一個(gè)統(tǒng)一的拾取功能

在UE中,創(chuàng)建一個(gè)接口類,命名為PickupInterface

將Item中的OnShpereOverlap方法移動到這個(gè)接口中

讓EchoCharacter類繼承PickupInterface類


在item類中 OnSphereOverlap 和OnSphereOverlapEnd方法中,將EchoCharacter替換為pickupInterface

在EchoCharacter類中,刪除之前的FORCEINLINE OnSphereOverlap方法,使用重寫

在PickupInterface類中,添加一個(gè)方法AddSouls

212?Soul Pickup Effects拾取靈魂的效果

Effects for picking up souls

創(chuàng)建一個(gè)Niagara粒子特效

然后在Soul類中,添加Niagara對象

在OnSphereOverlap方法中實(shí)現(xiàn)這個(gè)效果

編譯之后進(jìn)入游戲,給soul的藍(lán)圖類設(shè)置之前創(chuàng)建的Niagara特效 然后運(yùn)行游戲就可以看到效果

我們可以進(jìn)一步吧拾取特效和播放聲音 提升到item類中

213?Soul and Gold Attirbte靈 魂和黃金屬性

在AttributeComponent類中,添加金幣和靈魂的get和set方法 和對應(yīng)的變量

AttributeComponent類

Soul類

完善EchoCharacter類中, AddGold和AddSoul的方法

在方法中,對界面MainInterface的文字進(jìn)行設(shè)置

214?Enemies Spawning Souls敵人產(chǎn)生的靈魂

Getting Souls when Killing Enemies殺死敵人時(shí)獲得靈魂

給Enemy添加掉落soul

在Die方法中添加掉落

我們可以進(jìn)一步在Enemy實(shí)例中,修改每一個(gè)敵人掉落的魂的數(shù)量

視頻中的代碼是通過enemy的Attribute進(jìn)行的設(shè)置

215?Dodge Animation躲避動畫

Getting an Animation for Dodging獲得躲避的動畫

導(dǎo)入一個(gè)閃避動畫

視頻里面使用的是echo在遠(yuǎn)古山脈中的動作,展示了一下資產(chǎn)遷移

我自己使用了mixamo上的動畫

216?Dodge Montage躲避

montageSetting up Dodge Functionality設(shè)置躲避的功能

在BaseCharacter類中,新建方法PlayDodgeMontage


void ABaseCharacter::PlayDodgeMontage()
{
	PlayMontageSection(DodgeMontage, FName("Default"));
}


然后在項(xiàng)目設(shè)置中設(shè)置按鍵

繼續(xù)在EchoCharacter中創(chuàng)建播放montage的方法Dodge()

void AEchoCharacter::Dodge()
{
	PlayDodgeMontage();
}

SetupPlayerInputComponent方法綁定按鍵和對應(yīng)的方法

編譯之后,在UE中給玩家設(shè)置Dodge的montage,然后運(yùn)行游戲查看

視頻中,給Dodge添加了狀態(tài)判斷,在Montage中添加了一個(gè)DodgeEnd,在藍(lán)圖中調(diào)用

217?Stamina體力

Using Stamina When We Dodge躲避時(shí)使用體力

在AttributeComponent類中,添加了恢復(fù)體力和使用體力的方法

void UAttributeComponent::ReceiveDamage(float Damage)
{
	//Health -= Damage; ?
	//這樣寫 需要去做是否小于0的判斷,避免在計(jì)算進(jìn)度條或者其他的時(shí)候報(bào)錯(cuò),所以我們選擇下面這種方式

	Health = FMath::Clamp(Health - Damage, 0.f, MaxHealthl);
	//使用Clamp,可以將結(jié)果限制在一個(gè)指定的范圍,不用專門去做判斷

}
void UAttributeComponent::UseEnergy(float EnergyCost)
{
	Energy = FMath::Clamp(Energy - EnergyCost, 0.f, MaxEnergy);
}

完善了Dodge方法,在使用時(shí)判斷體力值

void AEchoCharacter::Dodge()
{
	if (Attributes && Attributes->GetEnerge() < Attributes->GetDodgeCost())
	{
		UE_LOG(LogTemp, Warning, TEXT("Dodge() OUT"));
		return;
	}

	PlayDodgeMontage();

	AttackState = EAttackState::EAS_Dodge;
	if (Attributes && MainInterface)
	{
		Attributes->UseEnergy(Attributes->GetDodgeCost());
		MainInterface->SetEnergyProgress(Attributes->GetEnergyPercent());
	}
}

在Tick方法中,對體力值進(jìn)行恢復(fù)

void AEchoCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	
	if (Attributes && MainInterface)
	{
		Attributes->RecevieEnergy(DeltaTime);
		MainInterface->SetEnergyProgress(Attributes->GetEnergyPercent());
	}

}

218小結(jié)

嘗試創(chuàng)建一個(gè)拾起恢復(fù)血量的特效

21_209~218SoulsAndStamina的評論 (共 條)

分享到微博請遵守國家法律
沂南县| 麻阳| 广西| 迭部县| 舟曲县| 宿迁市| 萍乡市| 阳山县| 文水县| 阳高县| 丹凤县| 鄢陵县| 涞源县| 若羌县| 云浮市| 赤峰市| 钟祥市| 沛县| 同江市| 邯郸市| 东城区| 五莲县| 晋城| 诏安县| 资源县| 东光县| 金湖县| 台州市| 呼玛县| 青田县| 鄂尔多斯市| 时尚| 喀喇沁旗| 扶沟县| 陆丰市| 本溪| 巴中市| 襄樊市| 久治县| 启东市| 九寨沟县|