본문 바로가기

유니티/뱀서라이크

뱀서라이크 따라하기 - 근접 무기 만들기

이번 글은 아래의 링크에 있는 글의 내용에서 이어집니다

https://unityfactory.tistory.com/17

저번시간에 이어서 근접무기를 만들어 보도록 하겠습니다. 

weapon 을 완성한 뒤, 실행을 시켜보면 플래이어의 주변에 붙어서 도는 무기를 확인할 수 있습니다. 

무기와 플래이어간의 거리  차이가 없어서 몬스터에게 무기가 닿지 않습니다.

 

이 경우에는 무기의 위치에서 y축을 1로 바꿔주시면 해결이 됩니다. 

그러고 나면 이제 몬스터와 근접무기가 닿으면서 몬스터들이 사라지는걸 볼 수 있습니다.

 

하지만 무기가 추가될 때마다 이걸 수동으로 조작해줄 수 는 없겠죠?

 

이제 자동으로 무기를 배치하기 위한 로직을 짜도록 하겠습니다.

만약 많은 수의 무기를 배치해야 한다면, 캐릭터의 주변 각도를 나누어서 배치해야겠죠.

 

그렇기에 무기의 숫자만큼 360도를 나누어 배치할 수 있게 코드를 짜주도록 하겠습니다.

 

void Batch(){
        for (int index = 0; index < count; index++){
            Transform bullet;
            if( index < transform.childCount){
                bullet = transform.GetChild(index);
            }
            else{
                bullet = GameManager.instance.pool.Get(prefabId).transform;
                bullet.parent = transform;
            }
            bullet.parent = transform;

            bullet.localPosition = Vector3.zero;
            bullet.localRotation = Quaternion.identity;

            Vector3 rotVec = Vector3.forward*360* index/count;
            bullet.Rotate(rotVec);
            bullet.Translate(bullet.up * 1.5f, Space.World);

            bullet.GetComponent<Bullet>().Init(damage, -1);
        }
    }

저번시간에 작성하였던 weapon의 아래쪽에 있던 batch함수를 추가해주었습니다.

 

처음에 근접무기를 배치하기 전에 무기의 위치와 무기의 돌아간 각도를 초기화해줍니다.

그런 뒤, 360도를 무기의 수인 count 만큼 나누어주고, 무기의 index숫자만큼 곱해서 균등하게 나누어가질 수 있게 해줍니다.

그뒤 translate를 이용해서 근접무기의 위치를 캐릭터보다 위쪽으로 가게 해줍니다

 

또한 무기가 추가될 때 각도를 다시 계산하여 재분배하도록 코드를 짜주었습니다.

 

또한 캐릭터의 래벨이 올라갈수록 더 많은 근접무기가 따라다닐 수 있도록 래벨업을 만들어보도록 하겠습니다.

public void LevelUp(float damage, int count){
        this.damage = damage;
        this.count += count;
        if(id == 0)
            Batch();
    }

다음과 같은 함수를 weapon 스크립트 파일에 추가하였습니다.

인자로는 damage와 count를 받고, 받은 데미지는 그만큼 데미지를 바꾸어주고, count는 추가를 해주도록 하였습니다.

 

그리고 스페이스바를 누를때마다 무기가 하나씩 추가되도록 만들었고, 이것이 그 결과물입니다!

 

이런식으로 자유자재로 추가할 수 있게 되었습니다.

 

다음 글에서는 근접 무기에 이어서 원거리 무기도 만들어 보도록 하겠습니다!

 

이 글은 아래의 영상을 따라하는 과정을 기록하는 글 입니다. 더 궁금하신 점이 있다면 아래의 영상을 참고해주시기 바랍니다!

https://www.youtube.com/watch?v=HPJVVcRKwn0&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=10&ab_channel=%EA%B3%A8%EB%93%9C%EB%A9%94%ED%83%88