Development 53

[Retro유니티] Upper Body 레이어 확인, Avatar Mask 적용

이전 포스트의 BaseMovement 레이어와 마찬가지로,UpperBody 레이어를 확인하면 Die는 동일하게 동작한다. Condition은 Die트리거이다.다만, Die상태에서는 BaseMovement에서 사망 애니메이션 클립을 재생할 것이므로, 따로 UpperBody 레이어에서는 애니메이션 클립이 없다.따라서, None(Motion) 임을 확인가능하다. 레이어가 2개 이상 있으면, Override방식으로 동작한다. 즉 겹치면 우선권이 있는 Layer가 가져간다는 뜻이다.즉, BaseMovement가 위에 있고, UpperBody가 아래에 있으면, Upper Body가 더 바깥에서 보인다.  애니메이터의 레이어별로 부위를 다르게 적용하려면, Avatar Mask를 설정해야 한다.아바타 마스크Humano..

[Retro유니티] 플레이어 캐릭터 생성 및 Blend Tree Animator 분석

미리 준비한 3D 캐릭터 모델을 사용한다. 3D 모델 사용하기 & RigidBody/CapsuleCollider/AudioSource Component 넣기3D모델 에셋은 FBX 파일이다.해당 파일을 드래그해서 오브젝트를 생성할 수 있다. 3D모델로 생성된 Game Object는, Animator Component를 가진다.Angular Drag: 각 항력 -> 너무 낮으면, 충돌시 휘리릭 회전하는 수가 있다.Freeze Rotation: Y축에 대해서만 회전가능하게 한다. 이제 Collider를 추가하여 물리적 표면을 만들자.Capsule 형태로 Collider를 만들었다. 이제 Audio Source를 넣자. 이제 기초중의 기초를 만들었다.다음은 Animator를 설정하자. Animator 설정미리 ..

[Retro유니티] LightMap과 Baking

Lighting은 연산비용이 비싸므로, Unity는 Lighting Data Asset을 사용해서 Lighting의 실시간 연산량을 줄인다.Lighting Data Asset에 포함된 주요 데이터 중 하나는 Lightmap이다.Lightmap은 Object가 빛을 받았을 때, 어떻게 보일지를 미리 그려둔 텍스쳐이다.Lighting Data Asset을 생성하는 작업을 Baking 이라고 한다. Baking을 해보자. Baking매번 Scene Load시마다 Bake하면 버벅인다. 끄자. Environment Lighting환경광을 설정하자.환경광은, Scene에서 가장 기본으로 깔리는 빛이며, 모든 Object에 적용된다.모든 방향에서 동일세기로 들어오기 때문에, 그림자 및 명암을 만들지 않는다.환경광 ..

[Retro유니티] ZombieSurvivor - 레벨 아트 사용

목표웨이브형 좀비 탑 다운 슈터게임을 제작하는 것기능일정주기로 좀비가 생성됨.시간이 지날수록 주기당 생성되는 좀비의 수 증가.좀비는 플레이어의 위치를 주기적으로 파악하고 항상 최적경로로 플레이어를 추적함.좀비의 이동속도, 공격력, 체력은 랜덤.좀비의 스펙에 따라 색깔이 점점 붉어짐.플레이어 체력은 플레이어를 따라다니는 원형바로 확인가능.기관총 탄약은 유한하고 체력도 자동회복되지 않음.탄약 및 체력은 아이템으로 회복가능.아이템은 플레이어 근처의 랜덤위치에 주기적으로 생성되며, 일정 시간 뒤에 사라짐.후처리 효과를 사용해 게임화면을 보정함.패키지매니저, 시네머신, 포스트-프로세싱 스택을 사용할 것.  원본 repository의 14를 그대로 가져오면  Assets 폴더- Gizmos: 시네머신용 기즈모 아이..

[Retro유니티] Object Pooling으로 발판생성기 만들기 & 음악넣고 빌드하기

발판을 무한 반복 생성하여 배치하는 발판 생성기를 구현하자.가장 간단한 방법은 매번 새로운 발판을 생성하는 것인데,이 방법은 발판 오브젝트를 kill하지 않기 때문에, 메모리 사용량이 계속 증가하는 문제가 있다.따라서 Object Pooling 방식으로 발판을 생성/관리하도록 하자. Object Pooling은 Object를 미리 만들어서, Pool에 쌓아두는 방식이다. Pool에 Object를 생성해두고, 필요하면 생성 대신, Pool의 Object를 가져다 쓴다.필요 없다면 파괴하는 대신, 비활성화하고 Pool에 반환한다.- Instantiate() 또는 Destroy() 메서드는 오브젝트를 실시간으로 생성/파괴하는데, 성능을 많이 먹으며 GC를 유발하기 쉽다. 이것은 게임 중 Freeze를 겪게 만..

[Retro유니티] 발판 밟을 시 점수+=1 구현

목표- Prefabs를 통한 발판구현- OnEnable() 메서드- 발판Generator 구현- Object Pooling- 미리 생성된 발판 재사용  발판만들기지금은 StartPlatform 게임오브젝트의 발판(시작지점 발판) 뿐이다.발판은 두 종류로 나뉘며, feature도 다르다.1. 시작지점 발판-> 별 기능 없다.2. 그 이후 발판-> 밟을 때마다, Scored를 +=1 한다. Prefabs의 Platrofm을 Hierarchy로 드래그.그 이후,Platform 전체는 Sorting Layer를 Foreground로, 각 Obstacle들은 Middleground로 설정해준다. (Prefab 만드는 법은, Bullet Prefab 생성하는 글을 참고하라) Platform Prefab으로부터 생성..

[Retro유니티] 배경 구현, 배경스크롤링 구현 및 Deadzone 구현

목표- 움직이는 배경 구현- 움직이는 발판 구현- 낙사존 구현 Player 캐릭터는 계속 뛰는 것처럼 보이지만, 실제 X축 위치는 고정시킬 것이다.대신, 배경을 움직이게 만들어서 뛰는것처럼 보이게 만들 것이다. 배경추가- 먼저 게임 배경하늘을 추가하자. Main Camera의 Background 컬러색을 Sky 스프라이트에 어울리게 변경하자. 이 상태로 플레이를 하면, Player랑 Sky Sprite랑 앞뒤 서순이슈로 가려지는 문제가 있다.Player가 항상 Sky보다 앞에 나오게 해야한다.- Sprite Renderer Component가 그리는 Graphic의 앞뒤정렬은, Transform상의 Position과 독립적이다.  - 앞뒤정렬 순서는 Sprite Renderer의 Sorting Layer..

[Retro유니티] 2D 충돌구현 - OnTriggerEnter2D / OnCollisionEnter2D / OnCollisionExit2D 오버라이딩

PlayerController 스크립트- 사용자 입력을 감지하여 Jump- 충돌을 감지하여 장애물에 닿았다면 Die- 상황에 맞는 효과음과 애니메이션 재생  Input.GetMouseButtonDown(0) -> 0은 왼쪽마우스, 1은 오른쪽마우스, 2는 휠클릭이다. Input.GetMouseButtonDown -> 마우스 누르는 순간Input.GetMouseButton ->마우스 누르는 동안Input.GetMouseButtonUp ->마우스 떼는 순간 우리는 Player 게임 오브젝트의 Audio Source Component에 Jump 오디오 클립을 할당했다.따라서 그냥 playerAudio.Play(); 하면, 점프 사운드 재생이 된다.  Die시에는 Die 오디오 클립으로 변경해야한다.player..

[Retro유니티] FSM을 통한 Animator Controller 구현

FSM은 뭐 학부때 당연히 배우는 내용이니 넘어가고.중요한건 유니티에서 어떻게 구현하느냐이다. Animator Controller 란- FSM을 사용해서, 재생할 Animation을 결정하는 State Graph를 표현하는 Asset이다.Animator 란- Animator Controller를 참고하여 Game Object에 Animation을 적용하는 Component이다. Animator Controller는 Asset이고, Animator 는 Component 라는 점에 주의.(게임에서 Animation을 재생하려면, 둘 다 필요하다.) 이전에 Run 애니메이션 클립을 만들 때, Player Animator Controller가 자동생성되었고,또한 Player Game object에 Animato..

[Retro유니티] 2D Collider 및 Animation 추가

Circle Collider 를 추가해서, 원모양 콜라이더를 추가한다.Box대신 Circle을 써야, 각진 모서리에 안착했을 때, 부드럽게 모서리를 타고 올라가게 된다.  오디오 소스를 추가해서, 게임 Object가 소리를 낼 수 있게 하자.   캐릭터의 Sprite 이미지를 사용해 애니메이션을 만들자.   기본이 60fps라 너무 빠르다. 프레임을 낮추자.Sample Rate를 추가한 뒤, Samples를 24fps로 낮춘다. 마찬가지로 Jump, Die 애니메이션 클립을 만들자.Die는 반복재생되면 안된다. Loop Time을 해제하자. Animation 클립 관리를 위해, FSM을 활용한다.다음 공부의 목표는 FSM이다.  배운 것- Circle Collider 를 써야, 각진 모서리에 안착했을 때..