Skill&Container - B477042/GraduationProject GitHub Wiki
About Skill&Container
Skill์ ํ์ฅ์ฑ์ ์ค์ ์ ๋๊ณ ์ค๊ณ๋ฅผ ํ์ต๋๋ค. ์ด Skill Actor๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํด์ Container๋ผ๋ Component๋ฅผ ๋ง๋ค์ด Weak Pointer๋ก ์ ์ด๋ฅผ ํ ์ ์๊ฒ ๋ง๋ค์์ต๋๋ค. Skill์ ๋ฑ ๋ง๋ Container๋ฅผ ๋ง๋ค๊ธฐ๋ ํ์๊ณ ๋ฒ์ฉ Container๋ก ์ฒ๋ฆฌํ ๊ฒฝ์ฐ๋ ์์์ต๋๋ค.
Skill Actor & Container
SkillActor.h
protected:
UCLASS()
class ESCAPEGAME_API ASkillActor : public AActor
{
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
USceneComponent* Root;
//ํํ๋ก ์ฌ์ฉ๋ ์ ์๋ ์ฃผ๋ ์ดํํธ
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "effect")
UParticleSystemComponent* VFX_Main;
//๋ช
์ค์ ์ดํํธ
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "effect")
UParticleSystemComponent* VFX_Hit;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Collision")
USphereComponent* MainCollision;
//๋ง์ผ๋ฉด ๋๋ ์๋ฆฌ
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Contents")
UAudioComponent* SFX_Hit;
//์ฃผ๋ณ์์ ๋๋ ์๋ฆฌ
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Contents")
UAudioComponent* SFX_Passing;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true"), Category = Info)
float Damage;
}
Skill์ ํํํ๊ธฐ ์ํด์ Mesh๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋จ Particle์ด ๊ฐ์ฅ ์ ์ ํ๊ธฐ ๋๋ฌธ์ Particle๊ณผ Sound๋ฅผ ์ ์ดํ๋ ๊ธฐ๋ฅ์ ๋ฃ์์ต๋๋ค.
Component_SkillContainer.h
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class ESCAPEGAME_API UComponent_SkillContainer : public UActorComponent
{
public:
virtual void UseSkill(const AActor& TargetActor,const FVector& Direction , int n_Count=1) PURE_VIRTUAL(UComponent_SkillContainer::UseSkill, );
protected:
void clear();
UPROPERTY(EditAnywhere, Category = "contents", meta = (AllowPrivateAccess = "true"))
TArray< TWeakObjectPtr< ASkillActor > > SkillObjects;
UPROPERTY(VisibleAnywhere, Category = "contents", meta = (AllowPrivateAccess = "true"))
TWeakObjectPtr < ASkillActor> CurrentIndex;
UPROPERTY(VisibleAnywhere, Category = "contents", meta = (AllowPrivateAccess = "true"))
int Index;
//๋ฐฐ์ด ์ด๊ธฐํ ํฌ๊ธฐ. ๋์ด๋์ง ์๋๋ค
UPROPERTY(VisibleAnywhere, Category = "contents", meta = (AllowPrivateAccess = "true"))
int ArraySize;
}
Skill Object๋ค์ ์คํฐํ ํ ์ปดํฌ๋ํธ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ฑํํ์ต๋๋ค. Use Skill์ด๋ผ๋ ํจ์๋ฅผ Pure virtual ํํ๋ก ์ ์ธํ์ฌ ํ์ ์ปดํฌ๋ํธ๋ค์ด ์์ ์ ๋ชฉ์ ์ ๋ง๋ ํํ์ ํจ์๋ฅผ ์ ์ธํ๋๋ก ํ์ต๋๋ค.
Skill Actor & Container ๊ตฌํํ ๋ ์ง์คํ ์
ํ์ ํด๋์ค๋ค์ ์ด๋ค ํน์ฑ์ ๊ฐ์ง๊ณ ๊ฒ์์ ๊ตฌ์ฑํ ์ง ์๊ฐํ๋ฉฐ ๊ณตํต๋๋ ์ ์ ์ฐพ์์ ๋ง๋ค์์ต๋๋ค. Skill์ VFX์ SFX ์ค์ฌ์ด๊ณ Container๋ ์ด Skill actor๋ฅผ ์ค๋ธ์ ํธ ํ๋ง์ ํตํด ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋๋ก ๋ง๋ค์์ต๋๋ค. ์ด ๋ ํด๋์ค๋ฅผ ๋ง๋ ๋ชฉ์ ์ ์์์ ํตํ ํ์ฅ์ผ๋ก ์ฝ๋๋ฅผ ์ค์ด๊ณ Cast๋ฅผ ํตํ ์ ์ด๋ฅผ ํธํ๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค. ์ด ๋ชฉ์ ์ ๋ง๋ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋๊ฒ ์ง์คํ์ต๋๋ค.
ํ์ ํด๋์ค๋ค์ ๋ํ์ฌ
- Projectile ๊ณ์ด์ ์ ์ธํ ํ์ Skill actor๋ ๊ฐ๊ฐ์ ์ฌ์ฉ์ ํธ์ถ ๋ฐฉ๋ฒ๊ณผ ์ด๋ค ํจ๊ณผ๋ฅผ ๋ํ๋ด๊ณ ์ด๋ค ์์ ์ ์ด์ฉํ๋์ง๋ง ์์ฑ๋์ต๋๋ค.Projectile ๊ณ์ด Skill์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ, Gunner์ Mag Component์ฒ๋ผ ๊ตฌํํ์ต๋๋ค
- SKill container ๊ณ์ด ํด๋์ค์ ๊ฒฝ์ฐ, Owner์ ์ฌ์ฉ ์์ฒญ์ด ๋ฐ์ํ๋ฉด ์ง๊ธ ์ฌ์ฉ ๊ฐ๋ฅํ Skill actor์ค ํ actor์๊ฒ Transform ์ ๋ณด๋ฅผ ๋ณด๋ด์ค๋๋ค. ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Container ๋ด๋ถ์์ Skill์๊ฒ ๋ช ๋ น์ ํ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค.
๊ตฌํ์ ์ง์คํ ์
- ์์์ ๋ฐํ์ผ๋ก skill์ ์ถ๊ฐํ๊ธฐ ํธํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ง์คํ์ต๋๋ค. ์ฝ๋์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ์์์ ํน์ฑ์ ์ด์ฉํ ์ฝ๋ ๊ด๋ฆฌ๋ฅผ ํตํด ์์ฐ์ฑ์ ์ฌ๋ฆฌ๊ณ ์ถ์์ต๋๋ค.
- ์์์ ์ ์ฉ์ํค๊ธฐ ์ ์๋ ๊ฐ์ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ๊ณตํต๋๋ ๋ถ๋ถ์ ๋ฐ๋ณตํด์ ์์ฑํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์๋ก์ด Skill๊ณผ ๊ด๋ฆฌํ๋ Component๋ฅผ ์์ฑํ ๋๋ง๋ค ์๊ฐ์ด ์ค๋๊ฑธ๋ ธ์ต๋๋ค.
๊ตฌํ์ ์ด๋ ค์ ๋ ์
- ์์์ ์ ์ฉ์ํค๊ธฐ ์ , ๋ง๊ตฌ์ก์ด๋ก ๋ง๋ ํด๋์ค๋ค์ ๊ณตํต์ ์ ํ์ ํ๋ ๊ณผ์ ์ด ์ด๋ ค์ ์ต๋๋ค. ๊ณตํต๋ ํน์ฑ์ ์๊ฐ์น ๋ชป ํ๊ณ ์์ฐ์ฑ์ด ๋จ์ด์ง๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์์์ ์ ์ฉ์์ผ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ ๊ณ๊ธฐ๋ ์ด๋ฐ ์ ํ์ Actor์ Component๋ฅผ ์๊ฐ๋ณด๋ค ์์ฃผ ๋ง๋ค๊ฒ ๋๋ค๋ ๊ฒ์ ๋์น์ฑ ์์ ์ด์์ต๋๋ค. ๋น์ 3๊ฐ์ง ์ ๋์ Skill์ด ์์๊ณ ์ด ์คํฌ์ ๊ฐ์ ๋ ๋ฆฝ๋ ์ํ์์ต๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ถ๊ฐ๋ฅผ ํ๋ฉด ๋์ด ์์ ๊ฒ ๊ฐ์์ต๋๋ค. ์ด ๊ฒ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์์์ด ๋ ์ฌ๋๊ณ ๊ฐ์ ์คํฌ์ ๊ณตํต๋๋ ๋ถ๋ถ์ ์ ๋ฆฌํด๋ดค์ต๋๋ค. ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก Actor๋ค์ Skill Actor๋ก Component๋ค์ Container๋ก ์์์ ์์ผฐ์ต๋๋ค. ์ด ๊ณผ์ ์์ ์ค๊ณ์ ์ค์์ฑ๊ณผ ์์ฐ์ฑ์ ์ฌ๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์์์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๋ฐฐ์ฐ๊ฒ ๋์ต๋๋ค.