Unity 2 - GetMouseButton

터치, 혹은마우스 클릭 입력을 받으려면 GetMouseButton()을 사용한다. 해당 함수는 마우스를 누르고 있는 동안 true를 반환하며 GetMouseButtonUp()은 클릭을 놓을 때, GetMouseButtonDown()은 버튼을 클릭할 때만 true를 반환한다. 

괄호에는 0,1,2를 넣을 수 있는데, 순서대로 좌클릭, 우클릭, 마우스 휠버튼 클릭이다. 아래는 gameobject를 클릭 위치로 이동시키는 간단한 코드이다.

 

public class Playermovement : MonoBehaviour
{
    public float speed;
    Transform tr;
    Vector2 mousePosition;
    public Vector2 limitPoint1;
    public Vector2 limitPoint2;

    // Start is called before the first frame update
    void Start()
    {
        tr = GetComponent<Transform>();    
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButton(0))
        {
            mousePosition=Camera.main.ScreenToWorldPoint(Input.mousePosition);

            if (mousePosition.x < limitPoint1.x)
            {
                mousePosition = new Vector2(limitPoint1.x, mousePosition.y);
            }
            if (mousePosition.x > limitPoint2.x)
            {
                mousePosition = new Vector2(limitPoint2.x, mousePosition.y);
            }
            if (mousePosition.y < limitPoint1.y)
            {
                mousePosition = new Vector2(mousePosition.x, limitPoint1.y);
            }
            if (mousePosition.y > limitPoint2.y)
            {
                mousePosition = new Vector2(mousePosition.x,limitPoint2.y);
            } // 화면 범위 밖으로 나가지 않게 마우스 위치 강제 고정.

        }
    }

    private void FixedUpdate()
    {
        tr.position = Vector2.MoveTowards(tr.position, mousePosition, Time.deltaTime * speed);
    }
}


input을 Update()에서 받고, 실제 움직임을 FixedUpdate()에서 구현했다. 아래 MoveTowards함수는 말그대로 현재위치(a)에서 목표 위치(b)로 정해진 속도(c)로 가는 함수이다. transform.Translate과의 차이점은 translate함수는 해당 오브젝트의 transform(위치)을 정해진 좌표로 옮기는 것이고, MoveTowards는 두 위치 사이의 벡터를 반환하여 새로운 위치를 지정해준다는 차이가 있다.

i.g)

transform.Translate(Vector3.up * Time.deltaTime * speed)
transform.position = Vector3.MoveTowards(transform.position, transform.position + new Vector3(0,1,0), Time.deltaTime * speed) 
 
 

위와 같은 경우, 기준 좌표계가 달라진다면 Translate은 위가 아닌 수평 혹은 대각선 방향으로 움직일 수도 있다. 또한 movetowards는 앞서 말한 것 처럼 두 위치 사이의 벡터를 반환해준다는 것을 알 수 있다.




댓글

이 블로그의 인기 게시물

IIKH Class from Timothy Budd's introduction to OOP

Compiler 9 - Efficient Code generation

Software Engineering 10 - V&V, SOLID principle