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는 앞서 말한 것 처럼 두 위치 사이의 벡터를 반환해준다는 것을 알 수 있다.
댓글
댓글 쓰기