- 캐릭터가 장애물에 닿으면
Die()애니메이션이 실행된 뒤 키 입력을 받을 수 없게해야한다 → 게임매니저가false가 되면return조건을InputManager에 넣어주기- 캐릭터가
Die()조건이 되면, 시네마틱 카메라가 캐릭터를 바라보게 설정 → 시네머신 버츄얼 카메라에LookAt프로퍼티를 캐릭터로 설정 (Transform)- 스피드 매니저의 스피드 증가에 따른 애니메이션 동기화 → 스피드 매니저의 속도가 증가할수록 캐릭터의 애니메이션도 싱크에 맞게 속도 증가
→ 애니메이션 속도 증가 함수는 캐릭터.cs에서 작성 (애니메이션을 갖고있는 .cs이기 때문)
→ 도로 : 30 → 60까지 5초에 2.5씩 증가 / 캐릭터 : 1 → 2 까지 증가해야함
→ 변하는 속도값 / 초기 속도값으로 계속 갱신- 도로의 스피드가 증가할때마다 캐릭터 애니메이션 속도 증가가 호출되게 해야한다 →
SpeedManager는 타이틀씬에 있지만,Runner오브젝트는 게임씬에 존재한다
→ 씬이 이동하면Runner게임 오브젝트를 찾거나,Runner컴포넌트가 부착된 오브젝트를 찾는다
→ 스피드 매니저의 스피드 값이 증가한 뒤 애니메이션 함수 호출- 데이터를 저장하는
PlayerPrefs를 사용하여 최고 시간 기록하기
InputManager에서 입력 못받게 처리하기false가 되면 키 입력 못받게 처리
CinemachineVirtualCamera를 사용하여 LookAt 프로퍼티 사용해보기Runner 스크립트에서 시네머신 버츄얼 카메라를 에디터에서 할당CinemachineVirtualCamera클래스는 using Cinemachine 선언 필수LookAt 내부 구조LookAt 프로퍼티 내부구조시네머신 버츄얼 카메라의 LookAt()
내부 구조는 프로퍼티로 작성되어있다
LookAt을 사용하여 set으로 벨류값(Transform타입)을 할당한다

set : 외부에서 할당받은 벨류값을 m_LookAt에 저장한다
벨류는 Transform 타입이다 → LookAt이 Transform을 통해 특정 오브젝트나 위치를 바라보기 때문에 Transform 타입이 아니면 할당이 불가능
get : m_LookAt을 반환
m_LookAt에 값을 저장하는 형식이라 대입형식이다
→ 캐릭터가 죽으면 카메라가 캐릭터를 바라보게 함
→ Runner 스크립트가 부착된 게임 오브젝트의 위치값 : transform을 할당한다
→ Die()함수 내부에 작성

LookAt이 들어있는 시네머신 카메라를 에디터에 할당하기
스피드 매니저의 스피드가 5초마다 증가하는데, 이때마다 캐릭터 애니메이션 속도도 증가 하게 하려면 이벤트를 사용하거나 직접 참조를 통해 호출
Runner 스크립트에 본인의 애니메이션을 가지고 있으니 애니메이션 스피드 조정 함수는 Runner 스크립트에 작성
애니메이션 동기화 함수 (변화하는 스피드 값 / 초기 스피드 값(30))
스피드 매니저에서 읽기전용으로 초기 스피드값을 정해두고 Runner에서 가져다가 쓰기
→ 스피드는 1 → 2 / 도로 스피드는 30 → 60 이기 때문
씬이 로드되면 게임 씬의 하이라키창에서 Runner 게임 오브젝트를 찾아서 컴포넌트 가져오기
→ Runner에 작성해둔 함수를 호출하기 위해서
→ SpeedManager는 타이틀씬에 존재하고, 싱글톤으로 게임씬에서도 파괴되지 않는다.
→ Runner 게임 오브젝트는 게임 씬에만 존재하기 때문에 씬이 로드될때 바로 Runner 오브젝트를 찾으려고 하면 에러 발생 (없으니까 null)

Playerprefsint float string만 가능하여 저장하고 로드하는 기능을 제공한다
→ Set + 원하는 자료형
ex) SetInt(KEY, VALUE) : 값을 저장
→ Get + 원하는 자료형
ex) GetInt(KEY); : 키 값을 반환

Playerprefs의 단점플랫폼에 따라 저장위치와 형식이 다르다
데이터 손실의 위험 → 앱 삭제하면 PlayerPrefs의 데이터가 모두 사라진다
대용량 데이터 저장은 부적합
대용량이나 암호화된 파일을 저장하려면 JSON을 사용하자!
playerprefs의 내부 구조Playerprefs는 정적 메서드를 가진 일반 클래스
MonoBehaviour를 상속받지 않기 때문에 클래스 이름으로 바로 정적메서드 호출가능

TimeManager에 PlayerPrefs 값을 저장하고 반환하는 함수 작성 SetTime(저장될 시간)

Watch클래스에서 호출해서 사용하기
→ 게임이 종료되면 현재 시간을 Playerprefs에 저장하기
→ 게임이 완전히 종료되고 난 후 다시 실행해도 이전 기록(시간)이 저장되어있다
위의 BestTime은 현재 베스트 시간
아래의 Current Time은 방금 플레이 한 기록 → 게임을 다시 실행하면 이 값이 BestTime으로 갱신된다
협업에서 유용하게 사용할 수 있는 유니티 특화 시스템
아티스트 직군을 위해 제공되는 Gluon Mode : 대용량 파일 다루기에 특화되어있고 단순한 UI로 쉽게 작업할 수 있다
여러 VCS (Version Control System)

유니티 스마트 병합 (머지 툴)
참고 : https://velog.io/@jaehyeoksong0/Plastic-SCM-1