객체 또는 플레이어를 이동 시키기 위해 키보드 또는 마우스의 입력을 받아 위치 값을 변경합니다. 이번 글에서는 마우스를 입력으로 받아 객체를 이동시키는 것을 해보려고 합니다! 👍
🚀 Raycast
마우스 입력 받기 위해 먼저 생각해 보아야 할 것이 마우스 클릭했을 때의 시점과 그 시점에 포인터가 가리키는 곳이 필요합니다.
해당 정보는 Raycast를 사용하면 아주 간편하게 정보를 얻어올 수 있습니다!
💡 Raycast 는 레이저 광선을 쏘는 것을 의미합니다! 😎
마우스 클릭했을 때 레이저를 쏘고 해당 레이저가 콜라이더에 닿았을 때 이를 감지하여 정보를 불러올 수 있습니다.
객체 생성
💡 저는 STUDY 라는 프로젝트를 만들고, Scene으로 구분하여 유니티의 여러 기능을 공부하려고 합니다!
우선 땅과 플레이어(Capsule) 을 생성했습니다. 그리고 Scripts 폴더를 만들고 Capsule 이라는 스크립트 파일을 생성했습니다.
스크립트
|
|
14: if (Input.GetMouseButtonDown(0))
마우스 입력이 있다면
16: Camera.main.ScreenPointToRay(Input.mousePosition);
메인 카메라 현재 포인터의 위치에 광선을 만들고
18: Physics.Raycast(origin, out hit)
발사하고 맞은 지점을 hit로 반환
22: destination = hit.point;
클릭한 지점을 목적지로 설정
29: if ((transform.position - destination).magnitude > 0.1)
현재 객체의 위치와 레이저가 콜라이더에 충돌한 곳과의 차이의 백터 크기가 0.1 보다 크다면 (현재 위치와 목적지와의 차이가 있다면)
30: transform.position = Vector3.MoveTowards(transform.position, destination, Time.deltaTime);
목적지로 이동! 😄
💡
FixedUpdate
함수 Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출됩니다. 물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용됩니다(Update는 불규칙한 호출임으로 물리엔진 충돌검사 등이 제대로 안될 수 있음). - Developug