Unity 2D RogueLike

장현태입니다·2025년 6월 23일

무기 생성 : 5가지 무기 생성(기본무기 + 특별무기)

Weapon) Weapon에 대한 정보를 Scriptable로 생성

MusicWeapon) Weapon의 정보를 담고 Weapon의 정보를 변경하거나 이벤트를 관리

PlayerWeaponController) 플레이어의 무기를 저장하고 관리

무기가 처음인지 아니면 이전에 할당 된 무기인지 구분하기 위해 List를 사용하고 string으로 무기의 정보를 저장할 것이다.

무기의 이름과 현재 리스트에서 해당무기의 이름이 없을경우 if문에 들어가고, 리스트에 추가, weapon에 Instantiate해서 오브젝트를 생성하고, MusicWeapon에 대한 weapon을 반환한다.

그리고 만약 string이 리스트에 존재했다면 해당 리스트의 인덱스의 string과 무기데이터의 itemName을 구분해서 같은 인덱스에 해당하는 오브젝트를 가져오고 그 오브젝트의 MusicWeapon에 해당하는 Count를 늘려줬다(count의 어느정도 수가 늘어났을경우 Particle효과 적용)

각각의 MusicWeapon에 대해 Count를 통해 이벤트를 실행시키는 함수이다.

마우스를 통해 위치를 받아오고 해당 위치를 통해 Projectile을 생성하는 함수이다.
이전에는 GetMousePos와 SetProjectile이 같이 붙어있었지만 코드 정리를 통해 나누어졌다.

Trumpet : MusicWeapon) MusicWeapon의 상속을 받아 Attack함수를 오버라이드하여 생성하였다.

여기서 Coroutine Issue가 발생하는데

다음과같이 상속받아 실행하는 Attack은 가능하지만 Trumpet에서의 Coroutine은 오브젝트가 Inactive형식이라 설정되어(시각적 요소가 상호작용 되지 않는다) Coroutine이 동작하지 않는다.

나는 Violin일 경우 Attack은 잘 동작되지만 안되는 이유를 아직 파악하지 못했다. 추후 더 알아본 후 접근할 것이고, 해결책은 앞의 AddMusicWeapon에서 MusicWeapon형식을 반환하는데 이 때 해당 반환된 정보를 AddMusicWeapon을 받아서 사용하는 오브젝트의 경우 무기의 Attack을 바로 사용하는 것이 아니라 반환된 AddMusicWeapon을 저장하고 저장된 무기를 Attack에 넣어주어서 오브젝트가 상호작용이 가능한 상태에서 실행하면 된다.

curWeapon = AddMusicWeapon(weapon) -> Attack(curWeapon) 으로 구성

++추가적으로 : Vector의 방향을 받아와서 mousePosition을 가져오는데 violin의 경우 해당 마우스 위치만, Trumpet의 경우 방향을 가져오기 때문에 Trumpet은 마우스 위치정보를 normalize를 통해 가져왔다.

Projectile)

이전의 Attack을 실행할경우 나오는 Projectile로 virtual를 통해 일단은 오브젝트가 _targetPos방향으로 나아가게 설정하였다.

이후 Projectile을 상속받은 오브젝트는 이미지만 달라지고 특이한 두개의 무기 Projectile이 있는데 먼저
Cymbals)

sprite를 받아와서 해당 스프라이트에 Material을 적용하고 그 지점에 material의 정보를 SetFloat를 통해 string의 이름을 가진 value를 사라지는 시간과 연결시키는 time을 통해 0~1까지 조절해서 진동을 구현하였다.

마우스 위치에 해당하는 오브젝트가 날라가는것을 볼 수 있다..

두번째 특이한 무기는 레이저를 통해 오브젝트와 상호작용 하는것인데 이거는 조금 더 살펴본 뒤 해봐야할 것 같다.

0개의 댓글