유니티 에디터 좌측 상단을 보면 하이어라키(Hierarchy)창이 있다 창에는 현재 씬에 존재하는 모든 게임 오브젝트가 표시된다
씬은 하나의 게임 월드를 뜻합니다
▶ 이 버튼을 클릭 누르면 게임창으로 전환된다
큐브에 중력주기
큐브가 중력의 영향을 받아 아래로 떨어지게 하고, 이때 바닥이 없으면 큐브가 끝없이 떨어지기때문에 바닥을 먼저 만들자
바닥만들기
큐브 선택
그럼 이제 중력을 받아 떨어지게 만들어보자
그러려면 이제 물리기능가진 컴포넌트를 조립해야한다 리지드바디(Rigidbody) 컴포넌트가 그 기능을 가지고있다
Cube 게임 오브젝트에 컴포넌트들이 추가되어있다
글로벌 일루미네이션
Global Illumination은 물체의 표면에 직접 들어오는 빛뿐만 아니라 다른 물체의 표면에서 반사되어 들어온 간접광까지 표현한 것
줄여서 GI라고 부른다
Base Movement는 전체적인 모델을 애니메이션이고 Upper Boady는 몸통쪽에 적용되는 애니메이션이다
휴머노이드 릭(Humanoid Rig)
유니티에서 휴머노이드 타입으로 리깅된 3D모델은 체형이 달라도 애니메이션 클립이 호환된다
어떤 3D모델의 애니메이션 클립을 다른 3D모델의 애니메이션에 사용할수 있다 또한 신체 골격정보가 3D모델에 포함되어 있으므로
애니메이션 클립을 특정 신체 부위에만 적용할 수 있다
아바타 마스크(Avatar Mask)
휴머노이드 타입의 3D모델에서 특정 신체 부위에만 애니메이션을 적용하려면 아바타 마스크를 사용해야한다
Project창에서 -> Avarar Mask클릭하면 만들 수 있다
적용한 부위는 초록색 적용안한 부위는 빨간색으로 표시됨
시네머신(Cinemachine)
카메라의 움직임을 손쉽게 제어하는 유니티 공식 패키지
게임 컷신, 카메라 연출 같은걸 코드로 직접 구현한것
기본 동작 원리는 두가지로 나뉜다
느슨한 커플링
IItem 타입으로 아이템을 사용하지만, 실제 동작하는건 종류별로 다르다 이처럼 인터페이스를 사용하는 방식은 '약속된 일'
만 해준다면 세부 타입과 구체적인 구현을 따지지 않는다
어떤 코드가 특정 클래스의 구현에 결합되지 않아 유연하게 변경 가능한 상태를 가리키는 용어이다
코루틴(Coroutine)
유니티의 코루틴 메서드는 대기 시간을 가질 수 있는 메서드다
레이캐스트(Raycast)
레이캐스트는 보이지 않는 광선을 쐈을 때 광선이 다른 콜라이더와 충돌하는지 검사하는 처리이다
이 때 사용하는 광선을 레이라고 부르고 Ray 타입으로 레이의 정보만 따로 표현할 수 있다
레이캐스트를 실행했을 때 레이가 콜라이더를 가진 게임 오브젝트와 충돌하면 RaycastHit 타입으로 충돌 정보가 생성된다
생성된 RaycastHit는 레이와 충돌한 게임 오브젝트, 충돌한 위치, 충돌한 표면의 방향 등을 알 수 있다
FK(Forward Kinematics(전진 운동학))
부모 조인트에서 자식 조인트순서로 움직임을 적용한다
(FK로 물건을 집는 애니메이션을 재생한다고 가정해보자)
FK는 큰 단위의 관절에서 세부적인 관절 순서로 움직임을 적용한다 손의 최종 위치는 어깨(상위 조인트)에서 손(하위 조인트)까지
순서대로 누적된 움직임으로 결정된다. FK에서 손의 위치는 순서대로 계산된 최종결과이다
손의 위치를 먼저 정하고 거기에 맞춰 애니메이션을 변형할수 없다 따라서 FK로 물건을 집는 애니메이션을 재생하면 물건의 위치에
맞춰 손의 위치를 변형할 수 없기 때문에 손의 위치로 물건을 순간이동해야 한다
IK(Inverse Kinematics(역운동학))
자식 조인트의 위치를 먼저 결정하고 부모 조인트가 거기에 맞춰변형한다
(IK로 물건을 집는 애니메이션을 재생한다고 가정해보자)
IK는 하위 조인트의 최종 위치를 먼저 결정할 수 있다. 따라서 물건의 위치에 맞춰 손의 위치를 먼저 결정하고, 거기에 맞춰 팔과 어깨의 위치를 결정할 수 있다
네비게이션 시스템(Navigation)
한위치에서 다른 위치로의 경로를 계산하고 실시간으로 장애물을 피하며 이동하는 인공지능을 만드는 내비게이션 시스템
내비게이션 시스템에 사용되는 오브젝트는 크게 4가지이다
Global Profile
Invoke : 함수가 일정시간만큼 지연된 후 실행이 되게 하고자 할때 Invoke함수를 사용할 수 있다
Invoke함수를 모른다면 코루틴(coroutine)을 사용해서 시간 지연을 준 후 실행되게 할수있지만 단순히 시간을 지 연한 후 함수를 실행 시킨다면 Invoke로 쉽게 구현할 수 있다
InvokeRepeating : Invoke함수는 지연시간 후 한번만 실행이되는데 여러번 반복실행을 위해서는 InvokeRepeating함수 를 사용해서 지정한 주기로 반복할 수 있다