본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티 구현 정리_Implement Summary

유니티 각개격파_014_벡터(Vector)와 이동(Translate)_마우스 이동

계속해서 이번에는 큐브를 마우스를 클릭해서 움직여보자.

 

큐브에 Movement (움직임)라는 스크립트를 만들어서 컴퍼넌트로 추가한다.

 

Scripts 폴더에 Movement라는 스크립트를 만든 후 큐브에 컴퍼넌트로 붙이거나

큐브에서 바로 Add Component 버튼으로 새 스크립트를 만들 수 있다.

 

 

코드 편집에서 다음과 같이 입력한다.

 

6번 줄에 변수 movingSpeed (이동 속도)를 만들고 초기값은 0으로 한다.

private으로 지정해서 이 클래스 밖에서는 호출할 수 없도록 한다.

초기값을 0으로 해 두면 테스트 할 때 매번 이 숫자를 수정해야 하는 번거러움이 생긴다.

이런 경우 SerializeField(직렬화)를 사용할 수 있다.

 

위 상태에서 5번 줄 처럼 대괄호와 함께 SerializeField를 사용하면 Inspector창에 필드가 만들어져서 코드 수정없이 변수값을 조정하면서 테스트 할 수 있다. [SerializeField] private float ~ 처럼 한 줄에 붙여 써도 된다.

 

13번 줄에 이동을 위한 TouchMovement 메서드를 만든다.

15번 줄에 if 조건문 작성한다.

'만약 (입력으로 마우스 왼쪽 버튼 클릭)하면' 

 

GetMouseButton( ) 매서드의 매개변수로 0을 입력하면 마우스 왼쪽버튼 클릭, 1은 오른쪽 클릭, 2는 가운데 버튼 클릭을 전달한다.

 

17번 줄에 벡터3 타입의 변수 mousePos(마우스 위치)를 만들고 world space 포인트로 변환한 마우스 위치를 저장한다.

마우스 포인터 클릭 위치는 Input.mousePosition으로 좌표값을 얻을 수 있다.

 

즉, 위 코드의 뜻은 다음과 같다.

벡터3 타입의 변수 mousePos에 저장하라.

(저장할 내용은) 메인 카메라에서 ScreenToWorldPoint ( ) 메서드를 사용해서 world space 좌표로 변환하라.

메서드에는 입력받은 Input.mousePosition(마우스 포인터의 위치)를 전달하라. 

 

*Screen To World Point ; 스크린을 월드 포인트로

 

스크린 좌표와 월드 좌표에 대해서는 각개격파015에 따로 정리했다.

 

19번 줄에는 중첩 조건문에 '마우스 포인터 위치의 x값이 1보다 크면'을 넣는다.

이 말은 월드좌표계에서 원점(0, 0)인 중앙에서 x축 방향으로 오른쪽을 클릭한다는 뜻이다.

그러므로 21번 줄에서 x축은 오른쪽으로 이동하도록 작성한다.

 

23번 줄에서 추가 조건문을 작성한다.

이번에는 '왼쪽을 클릭한다면' 왼쪽으로 이동하도록 movingSpeed(이동 속도)에 -(마이너스)를 붙여 코드를 작성한다.

 

코드를 저장한 후 실행해서 마우스로 게임 화면을 오른쪽 또는 왼쪽 클릭하여 큐브가 이동하는지 테스트한다.

 

성공했다면 계속해서 else if 조건문을 사용해서 y축을 기준으로 위, 아래로 움직이는 코드도 추가해서 마우스 클릭으로 상하좌우 이동이 가능하도록 코드를 작성해 보자.

 

이렇게 움직이는 방법은 휴대폰을 연결해서 터치를 사용해도 똑같이 작동한다.

'각개격파007; 휴대폰 연결하는 방법'을 참고해서 확인할 수 있다.

 

참고로 이 글에서 큐브를 이동하는 모양이 마음에 들지 않을 수도 있다.

게임오브젝트를 이동하는 방법은 다양하므로 이렇게 움직이게 하는 코드도 있다는 것을 이해하는 것이 중요하다.

하나씩 만들다 보면 자신이 원하는 이동법을 찾을 수 있을 것이다.

 

물리를 이용한 이동에 대해서는 다른 글에서 알아본다.

 

끝.

Wraven...