1인 개발/PushAndSlash

푸쉬앤슬래시 개인 프로젝트 6일차

잼잼재미 2024. 5. 9. 02:31

구현 내용


1. SoundManager 구현


https://kkln2486.tistory.com/213

 

SoundManger

SoundManger BGM을 담당하는 AudioSource 1개, Player SFX를 담당하는 AudioSource 1개,  그 외 SFX를 담당하는 AudioSource 여러개를 가지고 있음BGM과 SFX의 사운드가 모두 SoundManger에서 재생MainCamera 자식 오브젝트

kkln2486.tistory.com

 

이전 프로젝트에서 구현했던 방법으로 사운드매니저 구현 및 사운드 적용

 

 

2. BattleScene 수정


  • 전투 UI 수정
  • 맵 수정

 

 

3. Enemy 추가 구현


근거리 적 구현

 

각각 무기 종류에 맞는 애니메이션을 각각 설정

 

 

 

원거리 적 구현

 

마법, 화살 적 구현

 

 

 

각각 발사체 프리팹을 구현하고 애니메이션 Event를 설정

 

 

발사체 생성

public void ShootRangedAttack(string name)
{
    GameObject obj = Instantiate(Resources.Load<GameObject>("Prefabs/Skills/Enemy/" + name), _shootPosition.position, Quaternion.identity);
}

 

구현한 발사체 프리팹을 Resources 폴더에 넣고 프리팹을 생성

 

 

발사체 스크립트

private void Update()
{
    transform.position += _dir * _speed * Time.deltaTime;
}

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        _player.GetComponent<PlayerCharacter>().PlayerNuckback(transform.position, Atk);
        Destroy(gameObject);
    }
}

private IEnumerator CODestroyAttack()
{
    yield return new WaitForSeconds(5f);
    if (gameObject != null)
    {
        Destroy(gameObject);
    }
}

 

 

원거리 적의 Player 감지

 

 public bool CheckPlayer()
{
    if(Type == EnemyType.Enemy4 || Type == EnemyType.Enemy5)	// 원거리 적
    {
        Debug.DrawRay(transform.position + new Vector3(0, 0.7f, 0), transform.forward * 8.5f, Color.green);

        if (Physics.Raycast(transform.position + new Vector3(0, 0.7f, 0), transform.forward, out ForwardHit, 8.5f))
        {
            if (ForwardHit.transform.CompareTag("Player"))
            {
                return true;
            }
        }
    }

    return false;
}

 

근거리 적의 Player를 감지하는 Physics.Raycast의 범위를 더 길게 조절

 

 

적의 마법 범위 적용

private void Targetting()
{
    int layerMask = (1 << _layerMask);  // Layer 설정
    _targets = Physics.OverlapSphere(transform.position, _overlapSphereRange, layerMask);

    if(_targets != null)
    {
        for (int i = 0; i < _targets.Length; i++)
        {
            _targets[i].GetComponent<PlayerCharacter>().PlayerNuckback(transform.position, Atk);
        }
    }
}

 

Physics.OverlapSphere로 주위 범위의 Player 감지 및 Player 넉백  적용

 

 

회고


난이도를 조절해서 여러가지 Stage를 만들기 위해 다양한 적들을 구현했다. 기존 구매했던 에셋에 다양한 종류의 무기가 있고 무기별로 애니메이션이 있어서 적용하기가 크게 힘들지 않았다. 원거리 공격의 마법 이펙트는 에셋을 구매했을 때, 있었던 스크립트를 변형해서 구현했다. 추가로 BattleScene 맵과 UI를 적용해서 더욱 실제 게임과 같도록 수정했다. 이번 프로젝트에서는 유료 에셋을 최대한 활용했기 때문에 아직 많이 구현하지 못했지만 훨씬 게임의 퀄리티가 높아졌다고 느꼈다. 다음은 적 프리팹을 배치하여 Stage를 구현하고 Stage 정보를 실제 UI에 적용되도록 하겠다!