유니티 13

오브젝트 풀링(Object Pooling)이란?

이번 포스팅에서는 다양한 최적화 기법들 중에서 오브젝트 풀링(Object Pooling)에 관해서 알아보겠습니다. 간단하게 오브젝트 풀링을 설명하자면, 오브젝트의 Pool 즉 웅덩이를 만들어두고, 그 웅덩이 안에서 필요할 때마다 객체를 꺼내서 사용하는 것을 뜻합니다. 게임에서는 엄청나게 많고 다양한 오브젝트를 사용하는데, 이런 오브젝트들을 실시간으로 생성하고, 파괴하고를 반복하면 어떻게 어떻게 될까요? 수천수백의 오브젝트들이 게임상에서 등장하고 사라질 때, 새로 오브젝트들을 생성하고 거기에 파괴하면 메모리를 할당하고 해제하는 일이 반복될 것입니다. 할당과 해제는 CPU가 담당하고, CPU에 부담이 오브젝트가 많아질수록 더해지게 됩니다. 게다가 유니티에서 메모리 해제를 하며 가비지 컬렉터가 발생하는데, 많..

2D 게임 만들기 (8) 프리팹(Prefab)으로 작업 줄이기

유니티에서 비슷한 게임 오브젝트를 여러 개 만들고자 할 때, 프리팹(Prefab)을 사용하여 만들어둔 오브젝트를 재사용할 수 있습니다. 프리팹이란? 1. 재사용 가능한 미리 만들어진 게임 오브젝트 에셋 2. 파일로 저장되어 현재 씬뿐 아니라 다른 씬에서도 사용 가능 사용하는 이유는? 비슷한 게임 오브젝트를 여럿 만들 때 매번 다시 설정하지 않아도 되기 때문!! (복사 & 붙여 넣기라고 생각하시면 편합니다) 프리팹을 만드는 방법은 매우 간단합니다. 게임 오브젝트를 프로젝트 창으로 Drag & Drop만 하면 됩니다!! 우선 Assets 폴더에 Prefabs폴더를 만들고, 현재 씬의 Gem 오브젝트와 platform-long 오브젝트를 Prefabs폴더로 Drag & Drop 해줍니다. 이렇게 만들어진 2개..

2D 게임 만들기 (7) Collider, Tag를 이용한 점수 내기

지난 포스팅에서는 GameController가 가진 Score(int)의 값으로 Canvas 위에 해당 값을 표시하는 내용까지 다뤘습니다. 그러면 이제 Score(int)의 값을 변화시키려면 GameController의 GetScore 함수를 호출 해야합니다. public void GetScore() { score += 100; SetText(); } 우선 Gem, 우리의 점수를 올려줄 오브젝트를 준비해봅시다. Gem의 sprite파일은 Sunnyland -> artwork -> Sprites -> Items -> gem폴더에 있습니다. https://whiny.tistory.com/10 2D 게임 만들기 (2) Animator, 유한 상태 머신 사용하기 이번 포스팅에서는 Animator 창에서 유한 상..

2D 게임 만들기 (6) 점수 시스템(Canvas)

이번 포스팅에서는 점수 시스템을 만들어보려고 합니다. 간단한 게임이지만, 점수 시스템이 필요하겠죠?? 하이어라키 창 우클릭 -> UI -> Canvas를 클릭해서 UI를 만들 준비를 해봅시다. 캔버스는 UI를 만들기 위해서는 가장 먼저 만들어야 하는 오브젝트입니다. 캔버스를 만들면 EventSystem이 자동으로 함께 생성되는데, Canvas위에서 일어나는 Input 관련 이벤트에 관여하는 오브젝트입니다. 하지만 이번 포스팅에서는 캔버스 위주로 설명하도록 하겠습니다. 우선 우리 게임의 UI가 다양한 해상도에 대응하도록 만들어보겠습니다. 캔버스에서 가장 많이 사용 되는 스케일 모드는 고정 픽셀 크기(Constant Pixel Size), 화면 크기에 따른 스케일(Scale With Screen Size) ..

2D 게임 만들기 (5) 캐릭터 움직이기

이전 포스팅에서는 PlayerInput 컴포넌트를 통해 키 입력을 받는 작업까지 마쳤습니다. 이번 포스팅에서는 PlayerController 컴포넌트를 통해 PlayerInput 컴포넌트에서 받은 값으로 캐릭터를 움직여보겠습니다. PlayerController 전체 코드입니다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { private PlayerInput playerInput; private Rigidbody2D playerRigidBody; public Collider2D footCollider; public float ..

2D 게임 만들기 (4) 캐릭터를 움직이기 위한 준비, 키 입력 받기

이번 포스팅에서는 지금까지 설정한 캐릭터를 직접 움직여 보려고 합니다. 지금의 캐릭터는 Transform, Sprite Renderer, Animator 이 세 개의 컴포넌트만 가지고 있습니다. 이제 여기에 Box Collider 2D, Rigidbody 2D를 추가해주겠습니다. Box Collider 2D - 직사각형의 형태로 2D 충돌을 감지하는 컴포넌트입니다. Offset과 Size를 조정하여 캐릭터의 발 위치로 조정하였습니다. Rigidbody 2D - 게임 오브젝트가 물리 제어로 동작하게 해주는 컴포넌트입니다. Mass(질량), Linear Drag(움직일 때 공기저항), Angular Drag(회전할 때 공기저항), Gravity Scale(몇 배의 중력을 적용할지) 등을 설정하였습니다. 그리..

2D 게임 만들기 (3) 유한 상태 머신, 전이(Transition) 설정

이번 포스팅에서는 전이(Transition) 조건을 설정해보겠습니다. 몇 가지 매개 변수(Parameter)들을 준비해봅시다. Animator 창에서 Parameters 탭 -> + 버튼을 누르고, 5가지 Parameter를 만들어봅시다. IsMove - Bool / 캐릭터가 움직이는지, 움직이지 않는지 판별해서 애니메이션을 전환하려고 합니다. OnAir- Bool / 캐릭터가 공중에 떠있는지, 지상을 밟고있는지 판별하려고 합니다. IsUp - Bool / 캐릭터가 점프 중인지, 추락 중인지 판별해서 전환하려고 합니다. Hurt - Trigger / 공격당할 경우 바로 피격 애니메이션을 재생하려고 합니다. Land - Trigger / Jump_Down 상태에서 착지할 경우 바로 Idle 애니메이션으로 ..

2D 게임 만들기 (2) Animator, 유한 상태 머신 사용하기

이번 포스팅에서는 Animator 창에서 유한 상태 머신을 이용해보겠습니다. 유한 상태 머신(Finite State Machine)이란 유한(Finite)한 수의 상태(State)가 있고, 한 번에 한 상태만 되도록 설계하는 방법입니다. 유한 상태 머신에서는 특정 상태에서 다른 상태로 전이(Transition)하여 현재 상태를 전환합니다. 위의 상태도를 보면 정지, 달리기, 점프가 유한한 수의 상태(State)들이고, 그 사이를 잇는 화살표가 전이(Transition)와 그 조건을 나타냅니다. 이제 직접 상태도를 구현해봅시다. 이전에 자동으로 생성된 Player의 Animation Controller를 더블클릭해줍니다. 그러면 Animator 창에서 위와 같은 모습을 볼 수 있습니다. 초기의 상태도에서 ..

유니티 개발 공부(5) 게임 오브젝트 움직이기

이번 포스팅에서는 컴포넌트를 직접 만들어서, 게임 오브젝트를 움직여보겠습니다. 우선 프로젝트 창에서 마우스 우클릭으로 Create -> Folder로 Scripts라는 폴더를 Assets 폴더 아래 만들고, Create -> C# Script로 MovingCube라는 스크립트를 Scripts폴더에 만듭니다. 전에 만들었던 큐브 오브젝트를 클릭하고, 인스펙터 창의 제일 아래에 Add Component 버튼으로 MovingCube스크립트를 추가해 봅시다. 스크립트를 프로젝트 창에서 드래그&드롭으로 추가 할수도 있습니다. 만들어진 MovingCube스크립트를 더블클릭하면, Visual studio가 켜지면서 편집(코딩)할 수 있게 됩니다. ※주의사항 유니티 에디터 상에서 보이는 스크립트의 이름과 편집기(ex...

유니티 개발 공부(4) 컴포넌트, 동작 원리

이번 포스팅에서는 에디터 상에서 컴포넌트가 어떻게 보이는지, 그리고 유니티의 대표적인 컴포넌트의 기능과 동작 원리에 관해 설명하겠습니다. whiny.tistory.com/3?category=980350 유니티 개발 공부(2) 유니티 인터페이스 이번 포스팅에서는 유니티 인터페이스에 대해 설명하겠습니다. 처음 프로젝트를 열면 위와 같은 모습의 인터페이스를 하고 있습니다. 현재 레이아웃은 Default를 사용하고 있는데, 우측 상단에서 whiny.tistory.com 우선 유니티 인터페이스 포스팅에서 씬에 큐브 하나를 추가했었습니다. 인스펙터 창에서 큐브가 어떤 컴포넌트로 구성되어있는지 확인할 수 있습니다. Transform, Mesh Filter, Mesh Renderer, Box Collider 이렇게 4..