상세 컨텐츠

본문 제목

Unity Beginner ch. 06] 게임 오브젝트 마우스 팔로잉

Unity Beginner

by allma 2020. 5. 5. 01:45

본문

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 함수만 복사해서 사용하면 된다!

 

 

 

 

 

관련글 더보기