본문 바로가기
[ CODING STUDY ]/》유니티 실습

유니티 - [마우스 위치로 발사, ScreenToWorldPoint, 프리펩]

by MRG 2022. 3. 3.
728x90
반응형

▣ 안녕하세요. 이번장에서는 마우스 위치로 총알을 발사하는 코드를 공부해보겠습니다.

 

▣ 우선 플레이어 오브젝트를 생성해주시고 플레이어 오브젝트 안에 스크립트를 생성해주세요.

 

▣ 그런 다음에 Pos라는 빈 오브젝트를 자식으로 생성해서 넣어줍니다. 

위치는 총알이 생성되고 나갈 위치로 지정해주세요. 

플레이어 자식으로 넣기 전에 꼭 포지션을 초기화해서 넣어주시는 거 잊지 마세요.

 

 

▣ 이제 총알을 만들어주겠습니다. 

저는 기본 도형으로 만들었습니다. 여기에 Rigidbody 2D를 넣어주시고 

에셋에 넣어서 프리 펩으로 생성한 다음에 삭제해주세요.

 

▣ 이제 플레이어에 있는 스크립트로 들어가서 코드를 작성하겠습니다. 

총알 생성 위치, 프리 펩 총알에 대한 오브젝트, 날아갈 총알 속도에 대한 변수를 작성해주세요.

Vector3 dir은 마우스 포인터를 보는 방향에 대한 값을 지정해줄 겁니다. 

Camera cam까지 변수를 선언했다면 

Start() 함수에서 cam = Camera.main;으로 지정해주세요.

 

 

▣ 그런 다음에 Update() 함수에서 Shoot()라는 함수를 호출하는 코드를 넣어주시고,

dir = cam.ScreenToWorldPoint()라는 함수를 사용하겠습니다.

이름에서 의미가 나오는 것처럼 스크린에 월드 좌표로 반환해주는 함수입니다. 

쉽게 이야기하면 화면에 전체 화면을 기준으로 값을 반환해준다고 생각하시면 됩니다.

우리가 마우스 위치를 알려면 화면 전체에 대한 포지션을 알아야 하기 때문에 이 함수를 사용했습니다. 

Vector3에 x, y값에 우리가 필요한 input.mousePosition.x, y 값을 넣어 그 위치를 반환하게 하고 

2D이기 때문에 z값에 대한 값은 기본으로 카메라 포지션으로 지정했습니다. 

 

▣ 그리고 Shoot() 함수 안에 프리 펩을 생성하고, 생성한 총알에 처음 위치 

우리가 지정했던 Pos에 값에 넣어줍니다. 그럼 총알을 발사할 때마다 

처음에 Pos위치에서 생성되겠죠?

그리고 생성한 총알마다 Rigidbody2D에 대한 값을 컴포넌트 하고 AddForce() 함수로 발사합니다.

여기에 아까 우리가 ScreenToWorldPoint로 반환했던 값이 있는 dir로 넣어주면 

월드 좌표에 마우스 포지션으로 발사하게 되고 bulletSpeed로 그 값을 곱해주면 그쪽으로 힘을 주게 됩니다. 

ForceMode2D.Impulse로 지정하게 되면 총알이 한방에 빡 나가는 모드로 나아가게 됩니다.

이제 코드를 완성했다면 저장을 하고

 

▣ 프리 펩과 Pos오브젝트를 스크립트에 맞게 넣어주고 플레이를 해서 발사를 하면 

마우스 위치로 총알이 발사되는 걸 확인할 수 있습니다. 

728x90
반응형

댓글