Unity 강의를 들으면서 관련 내용을 정리해두는 기록장입니다 ~
순서가 없고, 두서가 없을 수 있습니다. 혹시 필요한 내용🗒️이 있으시다면... Ctrl+F도 괜찮지만, Unity Document를 찾는 것을 추천 드립니다 😅
Serialized : 직렬화된
쉽게 말해서, [SerializeField] 를 변수 앞에 붙이게 되면 Inspector 내에서 변수 값에 접근이 가능해진다. Unity 내에서 직접 플레이해보며 변수 값을 쉽게 조정할 수 있다는 뜻!
(개발자가 아닌 디자이너들이 사용하기에 유용하다고 한다)
그렇다면! Unity Document 속 SerializeField에 대해 알아보자 😸
직렬화 시스템이 할 수 있는 것
- public non-static fields 직렬화
[SerializeField]로 마크되어 있는 nonpublic non-static fields- static field와 properties는 직렬화 할 수 없다!
Unity에 기본 탑재되어있는 InputManager를 통해 설정할 수 있다.
플랫폼에 따라 설정이 바뀌기 때문에, 여러 플랫폼으로 게임을 제작하는 경우 많은 노력을 필요로 한다. 😅
하지만 PC 환경에서'만' 돌아가는 게임이라면? Old Input System도 좋은 선택지가 될 수 있다.
Visual Studio Code (C# 코드를 작업할 환경) 에서 키보드의 입력을 받으려면, 아래와 같이 입력하면 된다.
Input.GetAxis("Horizontal")
Input.GetAxis("Vertical")
어디서 온 Horizontal이고 Vertical이냐고? 다시 Unity로 돌아가보자.

Horizontal : 수평
Vertical : 수직
을 의미한다. 사진에서 볼 수 있듯, Horizontal은 left, right / a, d 버튼으로 조절이 가능하다고 한다. (얘가 기본 값이고 버튼 수정도 가능하다.)
아직 아는 게 없어서... Pass
The time in seconds it took to complete the last frame
Time.deltaTime이란 전 프레임이 완료되기까지 걸린 시간을 말한다. 따라서, 컴퓨터가 느릴 수록 값이 커지고, 컴퓨터가 빠를 수록 값이 작아진다.
Time.deltaTime은 PC의 성능과 무관하게 동등한 조건에서 게임이 실행되도록 한다.
예시로 알아보자.
어떤 스크립트의 Update 문에 1프레임당 1m를 움직이게 하는 코드가 있다.
초당 10프레임을 찍어내는 유저 A와 초당 20프레임을 찍어내는 유저 B가 이 게임을 실행하였을 때, 스크립트에 아무런 조건도 달지 않는다면, 유저 A가 1m를 갈 때 유저 B는 2m를 이동할 것이다. 형평성에 맞지 않는다.
이때 유저 A의 deltaTime은 1/10, 유저 B의 deltaTime은 1/20이 된다.
따라서 Update 문의 총알 이동거리를 결정할 때 deltaTime을 곱해주면?
유저 A의 컴퓨터에서는 한 프레임 당 0.1m, 유저 B의 컴퓨터에서는 한 프레임 당 0.05m를 움직이게 된다. 즉, 두 유저 모두 1초에 1m씩 움직이게 되는 것이다. 👍
충돌이 일어나기 위해서는 두 GameObject가 모두 Collider를 가지고 있어야 하며, 둘 중 하나는 RigidBody를 가지고 있어야 한다.
만약 두 GameObject 중 하나만 움직인다면, 움직이는 GameObject가 RigidBody를 가지고 있어야 한다.
Object에게 물리적으로 일어난 충돌을 감지해준다.
Inspector에서 추가할 수 있다 😸
Collider를 추가하게 되면 is Trigger 라는 항목이 보인다.

Trigger는 GameObject간의 물리적 연산을 하지 않고 충돌을 감지할 수 있다. 두 GameObject가 접촉했을 때, 서로 튕겨 나가지 않고 그냥 통과하게 된다.(❗)
어떤 상황에서 쓸 수 있을까❓
또한, 물체의 Sprite Renderer을 제거하여 트리거는 존재하지만 화면 상에는 보이지 않도록 조절하는 것도 가능하다.
void OnTriggerEnter(Collider col) { }
void OnTriggerStay(Collider col) { }
void OnTriggerExit(Collider col) { }
Enter, Stay, Exit 총 세 가지 함수가 존재한다.
아! Collision도 동일하게 3가지 함수를 만들 수 있고, 특징도 동일하다. 😁
2D 충돌을 감지하기 위해선, OnCollisionEnter2D 와 같이 쓸 수 있다.
Rigid Body는 GameObject가 물리 제어로 동작하게 한다. Rigid Body가 포함된 모든 GameObject는 중력의 영향을 받을 수 있고, 스크립팅을 통한 힘으로 움직이거나 물리 엔진을 통해 다른 Object와 상호 작용해야 한다.
태그(Tag)는 한 개 이상의 게임 오브젝트에 할당할 수 있는 레퍼런스 단어입니다.

예를 들어 플레이어가 조작하는 캐릭터에 "Player"란 Tag를, 플레이어가 아닌 적군 캐릭터에 "Enemy" Tag를 붙일 수 있다.
Tag는 Scripting 목적으로 GameObject를 식별할 때 도움을 준다.
특정 지역(Area)에 진입했을 때, 플레이어가 도착했다(Player arrive)라는 메시지를 콘솔 창에 출력해보자.
void OnTriggerEnter2D(Collider2D other) {
if (ohter.tag == "Area") {
Debug.Log("Player arrive");
}
}
https://cpp11.tistory.com/13
https://docs.unity3d.com/kr/2020.3/Manual/index.html