오브젝트가 빛을 받았을 때 어떻게 보일지 미리 그려둔 텍스쳐
-> 생성하는 것을 "굽는다" 라고 표현
라이트맵을 미리 구워두면, 옵젝이 빛 받았을때 실시간으로 연산하는 것이 아닌,
옵젝 표면에 라이트 맵을 씌워서 빛 효과 표현 => 런타임에 컴퓨터 연산량 감소

씬에 가장 기본으로 깔리는 빛
모든 게임 옵젝에 적용되며, 모든 방향에서 같은 세기로 들오옴 -> 그림자, 명암 만들지 않음
환경광 변경시 겜 전체 색 분위기가 바뀜
물체의 표면에 직접 들어오는 빛 + 다른 물체서 반사되어 오는 간접광
모두 고정된 오브젝트(Static)에만 적용 -> 즉 두 가지 설정 모두 옵젝이 고정되어야지 빛이 입혀짐


3D 모델로 부터 생성된 게임 옵젝 -> 애니메이터 컴포넌트 + Bone구조 가짐

회전에 대한 마찰력, 값이 높을 수록 물체가 잘 회전하지 않거나, 회전해도 금방 멈춤


Base Movement 는 걷고 뛰는 기본 움직임, Upper Body 레이어는 상체에만 적용될 애니메이션 제공

파라미터를 통해 애니메이터에 구성된 상태들 사이 전이 조건을 사용

애니메이터의 상태에는 애니메이션 클립이 할당, 특수한 종류의 모션을 할당하는 것도 가능

블렌드 타입은 파라미터를 하나만 사용하는 1D, 파라미터로 Move 를사용
각 레이어에서 재생하는 애니매이션은 위에서 아래 순서로 덮어쓰기 방식 적용
Base Movement 먼저 캐릭터에 반영 후 그다음 Upper Body 의 레이어 애니메이션이 이를 덮어쓰면서 반영
레이어를 나눔으로써 새로운 애니메이션 클립을 만들 필요 없이 각각 클립을 재생하고 합쳐서 재싱하는 것이 가능
애니메이터의 레이어별로 부위를 다르게 적용하려면 아바타 마스크를 설정 필요
사람형태의 3D 모델인 휴머노이드 타입으로 리깅(3D 모델의 골격, 움직임 정의하는 계층구조 만드는 것)

초록생은 애니메이션을 적용할 부위, 붉은 색은 적용하지 않을 부위

UpperBody의 mask에 적용하여 이 레이어에서 재생되는 애니메이션들은 3D모델의 상체에만 적용
액터 = 입력에 의한 행위
입력감지는 PlayerInput 컴포넌트에서 수행
다른 컴포넌트에선 입력 감지 관련 내용 코드를 작성할 필요가 없음 -> 코드 양 감소 및 유지보수 용이
즉 PlayerInput 에서 입력을 감지하고 다른 컴포넌트로 뿌리는 형식
변수값을 읽거나 쓰는 과정에서 유연한 처리를 삽입할 수 있는 클래스 멤버
변수가 아닌 메서드 개념
public float move { get; private set; } // 감지된 움직임 입력값
public float rotate { get; private set; } // 감지된 회전 입력값
public bool fire { get; private set; } // 감지된 발사 입력값
public bool reload { get; private set; } // 감지된 재장전 입력값
물리 정보 갱신 주기에 맞추어 업데이트(defalut = 0.02s)
private void Rotate() {
float turn = playerInput.rotate * rotateSpeed * Time.deltaTime;
playerRigidbody.rotation =
playerRigidbody.rotation * Quaternion.Euler(0, turn, 0f);
}
playerInput.rotate * rotateSpeed * Time.deltaTime 을 turn 변수에 저장,
현재 회전에 turn 값을 더해 Y축 기준으로 더 회전
벡터 값아니고 쿼터니언 값 활용하는 것 유의
카메라의 움직임 손쉽게 제어하는 유니티 공식 패키지

제공 카메라는 두가지
즉 브레인 카메라가 어떤 가상카메라를 활성화 하면, 그 가상 카메라의 위치로 이동하고, 설정값을 그대로 받아서 사용

시야각을 설정하는 옵션




가상 카메라의 body 파라미터, 카메라가 Follow 된 추적 대상을 어떻게 따라다닐지 결정
가상 카메라의 Look At 파라미터에 할당된 게임 오브젝트를 항상 조준하도록 회전