Unity 기초 공부 # 1
유니티
유니티 에디터 좌측 상단을 보면 하이어라키(Hierarchy)창이 있다 창에는 현재 씬에 존재하는 모든 게임 오브젝트가 표시된다
씬은 하나의 게임 월드를 뜻합니다
3D 큐브 생성하기
- 하이어라키(Hierarchy)창에서 -> + 버튼을 누르고 -> 3D Object -> Cube 클릭
플레이 버튼
▶ 이 버튼을 클릭 누르면 게임창으로 전환된다
큐브에 중력주기
큐브가 중력의 영향을 받아 아래로 떨어지게 하고, 이때 바닥이 없으면 큐브가 끝없이 떨어지기때문에 바닥을 먼저 만들자
바닥만들기
- 하이어라키(Hierarchy)창에서 -> + 버튼을 누르고 -> 3D Object -> Plane 클릭
큐브 선택
- 하이어라키(Hierarchy)창에서 -> Cube를 선택하고
- 인스펙터(Inspector)창에 Cube의 정보가 표시됨
그럼 이제 중력을 받아 떨어지게 만들어보자
그러려면 이제 물리기능가진 컴포넌트를 조립해야한다 리지드바디(Rigidbody) 컴포넌트가 그 기능을 가지고있다
- Add Component를 클릭 -> Rigidbody를 검색하고 클릭
- 씬(Scene) 창 : 게임 월드인 씬을 시각적으로 편집하는 창
- 하이어라키(Hierarchy) 창 : 씬에 존재하는 모든 게임 오브젝트가 나열되는 창
- 인스펙터(Inspector) 창 : 선택한 게임 오브젝트의 정보가 표시되는 창
- 게임(Game) 창 : 플레이어가 실제로 보게 될 화면을 띄우는 창
- 프로젝트(Project) 창 : 프로젝트에 사용할 에셋들이 표시되는 창
- 콘솔(Console) 창 : 로그나 에러가 표시되는 창
Cube 게임 오브젝트에 컴포넌트들이 추가되어있다
- 트랜스폼(Transform) : 오브젝트의 3차원 좌표와 크기, 회전을 지정합니다
- 메시 필터(Mesh Filter) : 3D 메시 파일을 받아 오브젝트의 외곽선을 지정합니다
- 메시 렌더러(Mesh Renderer) : 메시를 따라 색을 채워 그래픽 외형을 그립니다
- 박스 콜라이더(Box Collider) : 다른 물체가 부딪칠 수 있는 물리적인 표면을 만듭니다
1. 좀비 서바이벌 게임
글로벌 일루미네이션
Global Illumination은 물체의 표면에 직접 들어오는 빛뿐만 아니라 다른 물체의 표면에서 반사되어 들어온 간접광까지 표현한 것
줄여서 GI라고 부른다
Base Movement는 전체적인 모델을 애니메이션이고 Upper Boady는 몸통쪽에 적용되는 애니메이션이다
휴머노이드 릭(Humanoid Rig)
유니티에서 휴머노이드 타입으로 리깅된 3D모델은 체형이 달라도 애니메이션 클립이 호환된다
어떤 3D모델의 애니메이션 클립을 다른 3D모델의 애니메이션에 사용할수 있다 또한 신체 골격정보가 3D모델에 포함되어 있으므로
애니메이션 클립을 특정 신체 부위에만 적용할 수 있다
아바타 마스크(Avatar Mask)
휴머노이드 타입의 3D모델에서 특정 신체 부위에만 애니메이션을 적용하려면 아바타 마스크를 사용해야한다
Project창에서 -> Avarar Mask클릭하면 만들 수 있다
적용한 부위는 초록색 적용안한 부위는 빨간색으로 표시됨
시네머신(Cinemachine)
카메라의 움직임을 손쉽게 제어하는 유니티 공식 패키지
게임 컷신, 카메라 연출 같은걸 코드로 직접 구현한것
기본 동작 원리는 두가지로 나뉜다
- 브레인카메라(Brain Camera) : 게임월드를 촬영하는 '진짜' 카메라이며 씬에 하나만 존재한다
- 가상 카메라(Virtual Camera) : 브레인 카메라의 '분신' 역활을 하며 씬에 여러개 존재할 수 있다
느슨한 커플링
IItem 타입으로 아이템을 사용하지만, 실제 동작하는건 종류별로 다르다 이처럼 인터페이스를 사용하는 방식은 '약속된 일'
만 해준다면 세부 타입과 구체적인 구현을 따지지 않는다
어떤 코드가 특정 클래스의 구현에 결합되지 않아 유연하게 변경 가능한 상태를 가리키는 용어이다
코루틴(Coroutine)
유니티의 코루틴 메서드는 대기 시간을 가질 수 있는 메서드다
레이캐스트(Raycast)
레이캐스트는 보이지 않는 광선을 쐈을 때 광선이 다른 콜라이더와 충돌하는지 검사하는 처리이다
이 때 사용하는 광선을 레이라고 부르고 Ray 타입으로 레이의 정보만 따로 표현할 수 있다
레이캐스트를 실행했을 때 레이가 콜라이더를 가진 게임 오브젝트와 충돌하면 RaycastHit 타입으로 충돌 정보가 생성된다
생성된 RaycastHit는 레이와 충돌한 게임 오브젝트, 충돌한 위치, 충돌한 표면의 방향 등을 알 수 있다
FK(Forward Kinematics(전진 운동학))
부모 조인트에서 자식 조인트순서로 움직임을 적용한다
(FK로 물건을 집는 애니메이션을 재생한다고 가정해보자)
- 어깨를 움직입니다. 어깨에 종속된 팔이 같이 움직입니다.
- 팔을 움직입니다. 팔에 종속된 손이 같이 움직입니다.
- 손을 움직입니다.
FK는 큰 단위의 관절에서 세부적인 관절 순서로 움직임을 적용한다 손의 최종 위치는 어깨(상위 조인트)에서 손(하위 조인트)까지
순서대로 누적된 움직임으로 결정된다. FK에서 손의 위치는 순서대로 계산된 최종결과이다
손의 위치를 먼저 정하고 거기에 맞춰 애니메이션을 변형할수 없다 따라서 FK로 물건을 집는 애니메이션을 재생하면 물건의 위치에
맞춰 손의 위치를 변형할 수 없기 때문에 손의 위치로 물건을 순간이동해야 한다
IK(Inverse Kinematics(역운동학))
자식 조인트의 위치를 먼저 결정하고 부모 조인트가 거기에 맞춰변형한다
(IK로 물건을 집는 애니메이션을 재생한다고 가정해보자)
- 손의 위치를 물건의 위치로 이동합니다.
- 팔이 손의 위치에 맞춰 움직입니다.
- 어깨가 팔의 위치에 맞춰 움직입니다.
IK는 하위 조인트의 최종 위치를 먼저 결정할 수 있다. 따라서 물건의 위치에 맞춰 손의 위치를 먼저 결정하고, 거기에 맞춰 팔과 어깨의 위치를 결정할 수 있다
네비게이션 시스템(Navigation)
한위치에서 다른 위치로의 경로를 계산하고 실시간으로 장애물을 피하며 이동하는 인공지능을 만드는 내비게이션 시스템
내비게이션 시스템에 사용되는 오브젝트는 크게 4가지이다
- 네비메시(NavMesh) : 에이전트가 걸어 다닐 수 있는 표면
- 네비메시 에이전트(NavMesh Agent) : 내비메시 위에서 경로를 계산하고 이동하는 캐릭터 또는 컴포넌트
- 네비메시 장애물(NavMesh Obstacle) : 에이전트의 경로를 막는 장애물
- 오프메시 링크(Off Mesh Link) : 끊어진 내비메시 영역 사이를 잇는 연결 지점(뛰어넘을 수 있는 울타리나 타고 올라 갈 수 있는 담벼락을 구현하는데 사용)
Global Profile
- 모션블러(Motion Blur) : 빠르게 움직이는 물체에 대한 잔상
- 블룸(Bloom) : 일명 '뽀사시', 밝은 물체의 경계에서 빛이 산란되는 현상
- 컬러 그레이딩(Color Grading) : 일명 '인스타그램 사진 필터', 최종 컬러, 대비, 감마 등을 교정
- 색 수차(Chromatic Aberration) : 일명 '방사능 중독 효과', 이미지의 경계가 번지고 삼원색이 분리되는 효과, 게임에서 방사능이나 독 중독 효과를 표현할 때 주로 사용
- 비네트(Vignette) : 화면 가장자리의 채도와 명도를 낮추는 효과, 화면 중심에 포커스를 주고 차분한 느낌을 줄 때 주로 사용
- 그레인(Grain) : 화면에 입자 노이즈 추가, 필름 영화 같은 효과를 내거나 공포 분위기를 강화 할때 주로 사용
Invoke : 함수가 일정시간만큼 지연된 후 실행이 되게 하고자 할때 Invoke함수를 사용할 수 있다
Invoke함수를 모른다면 코루틴(coroutine)을 사용해서 시간 지연을 준 후 실행되게 할수있지만 단순히 시간을 지 연한 후 함수를 실행 시킨다면 Invoke로 쉽게 구현할 수 있다
InvokeRepeating : Invoke함수는 지연시간 후 한번만 실행이되는데 여러번 반복실행을 위해서는 InvokeRepeating함수 를 사용해서 지정한 주기로 반복할 수 있다