사용자 입력
사용자 입력은 Input.Get~로 받을 수 있다.
Get~ : 키를 누를 때
Get~Down: 키를 누르고 있을 때
Get~Up: 키를 눌렀다가 뗐을 때
1. 키보드 입력
Input.GetKey/KeyDown/KeyUp(KeyCode.키이름)
2. 마우스 입력
Input.GetMouseButton/GetMouseButtonDown/GetMouseButtonUp(매개변수)
매개변수가 0 : 마우스 왼쪽 버튼, 1 : 마우스 오른쪽 버튼
3. 버튼 입력
오브젝트 이동
먼저 자신의 컴포넌트를 GetComponent<>()를 이용해서 가져와야 한다.
Rigidbody rigid;
rigid = GetComponent<Rigidbody>();
1. 힘으로 밀어서 움직이기
Vector의 방향으로 ForceMode에서 선택된 방식으로 힘을 줘서 물체를 이동시킨다.
가속을 추가해줄 때(이동하고 있는 물체를 움직일 때)
-ForceMode.Force 무게 적용
-ForceMode.Acceleration 무게 무시
순간 속도를 붙여줄 때(정지해 있는 물체를 움직일 때)
-ForceMode.Impulse 무게 적용
-ForceMode.VelocityChange 무게 무시
rigid.AddForce(Vector3.up * 4, ForceMode.Impulse);
캐릭터의 점프를 구현할 때 위의 코드처럼 사용한다.
또, Vector를
Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal"),0, Input.GetAxisRaw("Vertical"));
이렇게 해서 넣어주면 적당한 속도로 잘된다.
2. position 값을 변경해서 이동시키기
Vector3 position=transform.position;
if(Input.GetKey(KeyCode.A)){
position.x+=-0.1f;
}
transform.position=position;
A키를 누르고 있으면 왼쪽으로 이동한다.
이때 Time.DeltaTime을 -0.1f에 곱해주면 성능이 다른 기기에서도 동일한 이동을 할 수 있다.
Time.DeltaTime은 한 프레임에 사용된 시간으로 이 값은 프레임 수에 반비례해서사용하면 프레임 수가 작든 크든 나오는 값이 항상 동일하다.
Translate일 때는 벡터에 곱하고, Vector 함수일 때는 시간 매개변수에 곱한다.
transform.Translate(Vec*Time.deltaTime);
Vector3.Lerp(Vec1,Vec2,T*Time.deltaTime);
3. Translate를 사용해서 이동시키기
Translate는 주어진 방향과 거리만큼 오브젝트를 이동시킨다.
transform.Translate(Vector3.up, Space.Self);
if(Input.GetKey(KeyCode.A)){
transform.Translate(new Vector3(-lf*speed*Time.deltaTime, 0, 0));
}
위의 것은 현재 위치를 기준으로 위로 1만큼 이동한다.
이 때 Space.Self를 Space.World로 바꾸면 월드좌표를 기준으로 이동한다.
밑의 것은 A 키를 누르고 있을 때 왼쪽으로 이동한다.
4. RigidBody2D.velocity를 이용해서 이동시키기 (2D)
velocity는 속도벡터로 오브젝트에 일정한 속도를 준다.
float hori=Input.GetAxis("Horizontal");
rigid.velocity = new Vector2(hori * speed, rigid.velocity.y);
+rigidbody를 다룰 때에는 FixedUpdate에서 사용한다.
목표 지점으로 오브젝트 이동시키기
1. MoveTowards
transform.position = Vector3.MoveTowards(transform.position, target, 1f);
매개변수: 현재 위치, 목표 위치, 속도
2. SmoothDamp
Vector3 velo = Vector3.zero;
transform.position = Vector3.SmoothDamp(transform.position, target, ref velo, 1f);
매개변수: 현재위치, 목표위치, 참조속도, 속도
보통 참조속도를 zero로 해준다.
3. Lerp 선형 보간
transform.position = Vector3.Lerp(transform.position, target, 0.05f);
매개변수: 현재 위치, 목표 위치, 속도
SmoothDamp 방법보다 감속시간이 더 길다.
4. SLerp 구면 선형 보간
transform.position = Vector3.Slerp(transform.position, target, 0.05f);
포물선(호)을 그리면서 이동한다.