GameObject Mouse Folloing
마우스 따라오는 게임오브젝트와 스크립트를 만들어보겠습니다.
스크립트를 Mouse로 만들고,
게임 오브젝트는 2D Object>sprite로 만들고 이름을 Mouse로 하고,
sprite renderer에서 sprite를 knob로 정해주자.
sprite renderer에 order in layer를 10으로 정하고
transform.position에서 x,y,z를 0,0,0으로 설정해주자.
Mouse 스크립트를 컴포넌트로 추가해준다.
배경이미지는 없다 생각해도 된다.
준비가 다 되었으면 간단한 프로그래밍을 해보자.
마우스가 움직일때 게임오브젝트가 마우스를 따라 다니게 하기 위해서는
게임오브젝트의 포지션을 마우스 이동 위치 값에 넣어주면된다.
----------------------------------
게임오브젝트의 포지션 =>
gameObject.transform.position
----------------------------------
마우스 이동위치 값은 다음과 같다.
Camera.main.ScreenToWorldPoint(Input.mousePosition)
여기에서 카메라 이름이 main일때 해당된다. 카메라 이름이 다르면 적용이 안된다.
기본적으로 Main Camera로 설정되어있기 때문에 가능하다.
마우스 이동을 디버그로 찍어보자.
-------------------------------------
Vector3 mousePosition =Camera.main.ScreenToWorldPoint(Input.mousePosition)
Debug.Log(mousePosition);
======================
public class Mouse : MonoBehaviour
{
void Start()
{
}
void Update()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition)
Debug.Log(mousePosition);
}
}
======================
플레이 버튼을 누르고 마우스를 움직여보자.
위치가 찍혀서 나오는데 여기에서 문제가 z값이 -10.0이라는 점이다.
마우스는 3d상태에서 카메라 위치 기반으로 감지가 되기 때문에,
Main Camera의 position z값이 -10이기 때문에 화면에 찍히는 z값도 -10이 된다.
그래서 보통 화면에 이동하는 2d상태에서 좌표값을 가져올때는 z값을 따로 상수로 정해주는 것이 좋다.
-------------------------
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 vec = new Vector3(mousePosition.x, mousePosition.y, 0);
-------------------------
mousePosition의 벡터는 메인카메라에서 값을 가져오고,
vec 벡터는 mousePosition에 x,y값만 가져오고, z값은 0으로 설정해주었다.
여기에서 마우스 위치 x,y값을 가지고 있는 vec를 gameObject.transform.position에 넣어주면 된다.
-------------------------
gameObject.transform.position = vec;
-------------------------
======================
public class Mouse : MonoBehaviour
{
void Start()
{
}
void Update()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 vec = new Vector3(mousePosition.x, mousePosition.y, 0);
gameObject.transform.position = vec;
}
}
======================
추가로 오브젝트 이름만 넣으면 움직일 수 있는 함수로 만들어보자.
public class Mouse : MonoBehaviour
{
void Start()
{
}
void Update()
{
objectMove(gameObject);
}
void objectMove(GameObject obj)
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 vec = new Vector3(mousePosition.x, mousePosition.y, 0);
obj.transform.position = vec;
}
}
다음부터 objectMove 함수만 복사해서 사용하면 된다!
Unity Beginner ch. 07] 마우스로 클릭했을때 오브젝트 감지하기 (0) | 2020.05.05 |
---|---|
Unity Beginner ch. 06-1] 마우스 커서 만들기 (0) | 2020.05.05 |
Unity Beginner ch. 05] 다른 오브젝트 다른 클래스의 변수/함수 접근 (0) | 2020.05.05 |
Unity Beginner ch. 04] 다른 오브젝트 Sprite Renderer Scripting (0) | 2020.05.04 |
Unity Beginner ch. 03] 다른 오브젝트 Transform 구성요소 제어하기 (0) | 2020.05.04 |