
카메라의 위치는 원점 (0, 0, 0)에 있는 오브젝트를 바라보는 것을 기준으로 설정하는 것이 일반적
일반적으로 게임에 배치하는 오브젝트를 원점 기준으로 배치하기 때문에 카메라는 이 오브젝트들을 촬영할 수 있도록 뒤로 10만큼 떨어진 위치인 (0, 0, -10)에 그대로 두고 사용한다.

Camera 컴포넌트의 Clear Flags는 2D 게임 개발에서 Solid Color 를 많이 사용하고, Background 값을 바꿔 배경 색상을 설정한다.
Projection이 Orthographic 이면 직교 투영을 하는 2D 카메라로 설정되고, Size 값을 바꿔 시야 범위를 설정한다.



실제 게임을 진행할 때는 Unity Editor 나 Inspector View와 같은 화면을 볼 수 없기 때문에 코드를 이용해 Transform 컴포넌트의 position 정보를 수정해야 한다.
유니티에서는 각각의 게임 오브젝트에 소속된 컴포넌트에 접근할 수 있으며, 컴포넌트 내부의 클래스에 있는 변수 데이터를 사용하거나 수정하고 사용자가 만든 메소드를 호출할 수 있다.
Transform 컴포넌트에 접근해 오브젝트의 이동을 제어하는 Movement2D 스크립트 생성 [Project View - "+" - C# Script]
코드에 필요 없는 using문과 클래스 내부 코드 삭제


게임의 2D/3D 공간에서 이동, 회전, 크기를 표현하기 위해 (x, y) 또는 (x, y, z)의 좌표 체계를 나타내는 단위로 유니티에서 제작한 구조체 (struct)

2차원, 3차원, 정수, 실수에 따라 Vector2, Vector3, Vector2Int, Vector3Int와 같이 구조체가 정의되어 있다.
Vector3 구조체를 기준으로 살펴볼 때 3차원의 x, y, z를 표현하기 위해 구조체 내부에 3개의 실수 float x, float y, float z가 선언되어 있다

1 단위 방향, 두 점 사이의 거리, 각도 등의 연산을 위한 프로퍼티, 메소드 제공 (new Vector3(1, 0, 0)과 Vector3.right는 같다)

일반적으로 방향은 -1.0 ~ 1.0 사이의 값으로 표현 (방향에 힘이 포함되지 않도록)

방향을 new Vector3(1, 0, 0) 대신 Vector3.righr와 같이 방향 프로퍼티로 변경

작성이 완료된 Movement2D 스크립트를 Player 오브젝트의 컴포넌트로 등록




서로 다른 두 컴퓨터에서 캐릭터를 이동할 떄
60초 후에 A 컴퓨터는 5 m 60회 = 300 m를 이동하게 되고, B 컴퓨터는 5 m 120회 = 600 m를 이동하게 된다
즉, 컴퓨터 사양이 더 좋아 FPS가 높은 컴퓨터의 캐릭터가 더 많이 움직이게 된다.
이런 문제를 해결하고, 두 컴퓨터의 캐릭터가 같은 시간동안 같은 거리를 이동하도록 해주는 것이 Time.deltaTime
이전 Update() 종료부터 다음 Update() 시간까지의 시간 즉, 업데이트 사이의 시간 (ex) 1분 (60초)에 Update()가 60번 호출된다면 Time.deltaTime은 1)
A 컴퓨터는 60초에 Update()가 60번 호출
B 컴퓨터는 60초에 Update()가 120번 호출
FPS (Frames per second) 60 일 때 초당 60회 호출
이동거리 = 방향 (Direction) * 속도(Speed) * Time.deltaTime
A 컴퓨터 5 m * 60회 * 1 = 300 m
B 컴퓨터 5 m * 120회 * 0.5 = 300 m



moveSpeed와 같이 변수 선언과 동시에 값을 초기화할 수도 있고, Awake() 메소드처럼 초기화를 위해 1회만 호출되는 메소드에서 값을 할당할 수도 있다
변수를 사용하고 매직 넘버 (3, 5.2와 같이 특정 값) 사용을 지양해야 하는 이유는 한 예로 이동속도를 코드 내부에서 숫자 3으로 표현했는데 이동속도를 사용하는 코드가 100 줄이면? 이동속도를 3에서 5로 수정해야할 경우 100줄의 코드에 있는 3을 5로 수정해야 한다.



if (Input.GetKey(KeyCode.UpArrow) )와 같이 조건을 작성하면 위쪽 방향키를 눌렀을 때 조건문 내부가 실행
조건문 내부는 moveDirection += Vector3.up; 과 같이 작성해 이동 방향을 (0, 1, 0) 즉, y축 방향으로 이동하도록 설정
moveDirection += Vector3.right; 와 moveDirection = Vector3.right; 의 차이점 : = 으로 설정했을 경우 : 마지막에 누른 키 값 선택 (4방향 이동) / += 으로 설정 했을 경우 : 누른 키 값이 중첩 (8방향 이동)



-GetKey() 메소드를 이용한 이동을 GetAxisRaw() 메소드로 이동으로 수정


Input.GetAxisRaw("Horizontal") 단축키는 'w', 's', ↑, ↓ 키가 저장되어 있어 's' or 아래 방향키 (↓)를 누르면 -1, 'w' or 위쪽 방향키 (↑)를 누르면 1 값이 반환된다.
4개 키 중 어느 값을 누르지 않으면 0이 반환된다
