Unity 2D RogueLike

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

Issue)

이전의 코드에선 weaponSlots[weaponIdx]가 musicWeapon의 정보가 아니라 비어있는 정보를 참조하고있던 이슈로 인해 Coroutine inactive 버그가 발생했었다.

이를 Instantiate한 오브젝트를 담아서 오브젝트를 배열에 저장하였다.

Laser System) Shader를 사용해서 만들었는데 Shader에 대한 정보는 제대로 알지 못해서 정확하지 못하다

먼저 다음과같이 변수를 정했고 해당 변수를 조절해서 Material을 LineRenderer에 적용하였다.

다음과같은 shader Material이 만들어진다.

이를 통해 외부의 부드러운정도 스피드 느낌을 내줄 x좌표 그리고 Laser의 크기를 지정해줄 수 있다.(당연히 Color는 색상이 변경가능하다)


Script

Singleton)

PlayerWeaponController)

마우스 버튼에 따른 currentWeapon이 Violin이였을경우 싱글턴의 IsPress값을 변경해준다

ViolinProjetile)

UpdateLaser : 오브젝트의 LinRenderer가 false가 아닐경우 마우스 위치를 받아와서 해당 LineRenderer의 SetPosition 시작지점(0)에서 싱글턴을 참조해서 플레이어 위치를 받아오고,
SetPoition 두번째에서 끝지점(1)은 mousePos로 targetPos(부모클래스인 Projectile에서 위치를 받아옴)의 위치로 설정한다.

이 때, RaycasHit2D를 통해 맞은 부위를 반환하는데 맞은(맞은 부위를 LayerMask로 설정가능할듯)부위가 있을경우 SetPosition의 끝점(1)을 hit.point 맞은곳으로 끝을 정한다.

PressLaser의경우 싱글턴 이벤트를 받아와서 값에따라 value가 true일때 Linerenderer가 true,
value가 false일경우 만약 ViolintProjectile이 하이라키에 존재할경우 Coroutine을 실행하는데 이 코루틴은 안전하게 다음 프레임이 지나고 레이저를 없애주도록 하기위해 설정하였다.


실행영상

0개의 댓글