One_KWS

게임 개발 일지 #13 - 보스 몬스터 만들기 본문

게임 개발

게임 개발 일지 #13 - 보스 몬스터 만들기

One-Kim 2023. 4. 22. 21:02

캐릭터 및 애니메이션

캐릭터 & 무기

보스 몬스터로 아래 캐릭터를 사용했고 무기도 캐릭터에 맞게 골라 넣어 주었다. 

보스 몬스터로 사용한 캐릭터와 무기

애니메이션

일단 공격 패턴 먼저 구현하기 위해 공격 관련 부분의 애니메이션만 추가하였다. 총 3개의 패턴을 넣기 위해 공격 애니메이션도 각각 다른 3개의 애니메이션을 넣어주었다. 

사용한 보스 몬스터 공격 애니메이션

 

 

코드 구조 

보스 몬스터의 이동 및 공격에 대한 구조는 일반 몬스터와 같다. 각 행동은 IBehaviour를 상속받고 있으며 BossController를 이용하여 제어해준다.

BossController

BossController는 보스 몬스터의 이동과 공격을 제어한다. 코드는 EnemyController와 유사하다. 현재는 공격에 대한 코드만 구현되어 있다. 

public class BossController : MonoBehaviour {
    ...
    
    private void Update() {
        if (health.IsDead) {
            return;
        }

        target = FindTarget();
        if (target == null) {
            return;
        }

        bossCombat.Execute(target.position);

        if (bossCombat.IsOngoing) {
            bossMovement.Cancel();
            return;
        }

        bossMovement.Execute(target.position);
    }
    
    private Transform FindTarget() {
        var hits = Physics.SphereCastAll(transform.position, sightRange, Vector3.up, 0);
        foreach (var hit in hits) {
            if (hit.transform.CompareTag("Player")) {
                return hit.transform;
            }
        }

        return null;
    }
}

 

BossCombat

플레이어나 일반 몬스터와 마찬가지로 BossCombat 클래스도 IBehaviour 인터페이스를 구현한다. Execute()에서는 Random 클래스를 이용하여 공격 패턴 1~3에 대한 애니메이션을 랜덤으로 실행시킬 수 있게 구현했다. 

public class BossCombat : MonoBehaviour, IBehaviour {
    private readonly List<int> attacks = new List<int>() {
        Animator.StringToHash("attack_1"),
        Animator.StringToHash("attack_2"),
        Animator.StringToHash("attack_3"),
    };

    [SerializeField] private int currentAttackIndex = 0;

    public void Execute(Vector3 direction) {
    	// attacks의 인덱스를 랜덤 값으로 설정해 준다.
        currentAttackIndex = Random.Range(0, attacks.Count);
        var attack = attacks[currentAttackIndex];
  
        animator.SetTrigger(attack);
    }
}

 


 

원래는 공격 패턴 구현에 대한 글도 썼지만 너무 길어지는 것 같아서 한번 끊게 되었다. 다음 일지에 같이 올려야겠다 .. 최근에 일이 많아져서 일지를 2주가 넘게 못쓰고 있었는데 좀 더 시간을 잘 써봐야겠다. 

 

사용 에셋

Character

POLYGON Modular Fantasy Hero Characters (Synty Studios)

POLYGON Fantasy Rivals (Synty Studios)

 

Animation

Oriental Sword AnimSet (wemakethegame)

DOTween (Demigiant)

 

VFX

Magic Arsenal (Magic Arsenal)

 

UI

GUI PRO Kit - Fantasy RPG (Layer Lab)

 

ETC

UniTask (neuecc - Yoshifumi Kawai)