게임프로그래밍/TheZombie

게임 개발 - 데이터 테이블(3)

설련 2022. 2. 7. 19:27

몬스터와 캐릭터는 객체를 기준으로 상승치를 조정할 필요가 있다고 생각했다.

몽타주가 순차적이 아니라 랜덤적 레벨마다 다르게 변경되고, 레벨마다 상승치를 구체적으로 지정해야한다고 하면 모를까

우선적으로 일정 레벨 이상의 패턴이 달라진다고 가정할 때 우리는 다양한 테이블을 굳이 상속하여 지정할 필요가 없다.

 

예를들면

 

좀비1, 좀비2가 있다고 하자.

좀비1과 좀비2는 라운드 10부터 패턴이 달라진다.

하지만 스테이터스는 고정적으로 상승한다.

라고 가정해볼 때

 

LessThanorEqualLevel10Monster 테이블과 GreaterThanLevel10Monster 테이블 두 개로 구현하면 될 것이다.

 

다만 몬스터가 플레이어보다 상승치가 보다 높아져야 하므로

일정라운드마다 추가수치 상승치를 두어 난이도를 점점 높이는 방향으로 한다.

또한 rarity를 두어서 보스/정예/일반을 나누고 Upper Interval을 레어리티에 따라 조정하면서 다채로운 변화율을 고려한다.

 

캐릭터의 경우 현재는 1개를 이용해서 다루고 있지만 공부겸 테이블을 작성하고 Montage도 추가하였다.

 

이제 남은 부분이

1, 테이블을 모두 지정했으니 수치를 조정하고 테이블을 채우기.

2, 테이블을 채우면서 모든 스태틱, 스켈레탈 메시들을 지정, 애님인스턴스와 몽타주를 조정.

3, 애님인스턴스 고도화

4, 맵 조정 or 레벨 스크립트 구현

5, AI 고도화

6, 플레이어블 스킬 구현(미정)

7, 건설트리 구현(NPC 추가)

 

USTRUCT(BlueprintType)
struct FMonsterData : public FTableRowBase
{
    GENERATED_BODY()
 
public:
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float BaseArmor;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float BaseDamage;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float BaseHP;

    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
 int32 rarity;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float ArmorIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float DamageIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float HPIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float ArmorValueIncreasePerUpperLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float DamageValueIncreasePerUpperLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float HPValueIncreasePerUpperLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float DetectRange;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float AttackRange;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        class UAnimMontage* AttackMontage;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        class USkeletalMesh* Body;
 
    FMonsterData() {};
};
 
USTRUCT(BlueprintType)
struct FCharacterData : public FTableRowBase 
{
    GENERATED_BODY()
 
public:
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float BaseHP;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float BaseSP;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float Armor;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float HPIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float SPIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float ArmorIncreasePerLevel;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        class UAnimMontage* FireMontage;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        class UAnimMontage* KnifeMontage;
 
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        class UAnimMontage* HitReactMontage;
 
    FCharacterData() {};
};
 
USTRUCT(BlueprintType)
struct FExpendablesData : public FItemData
{
    GENERATED_BODY()
 
public:
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Data)
        float EffectAbility;
 
    FExpendablesData() { Super(); };
};