728x90
728x90
유니티 동적 파일 Load에 필요한 Resources 폴더 예를 들어 유저가 게임을 다운받았을 때 필요 없는 애셋들(테스트용 또는 에셋 번들 등)까지 받을 필요는 없다. 보통 게임 사에서는 게임 제작 시 필요한 prefab들을 한데 묶어서 빌드하므로서 최적화 작업을 수행한다. 하지만 최종 완성 전 개발 단계에서 수시로 프로젝트를 테스트해야 하는 과정에서는 애셋을 확정지을수도 없을 뿐더러 필요 에셋을 수시로 주고받아야 하는 상황이 발생할 수 있다. 예를 들어, 개발 프로젝트를 합칠 때 리소스에 대한 통제가 원활하지 않으면 프리팹이 누락되거나 필드에 연결되지 않아 테스트 동작하는 데 문제가 발생할 수 있다. 이렇게 리소스에 대한 유연한 사용이 필요할 때 우리는 Resources 파일을 사용해주면 된다. 유저..
2D 배경 제작 시 Plane과 Quad 차이 2D 배경을 제작할 때 3D Object에서 Plane과 Quad를 생성해서 제작한다. 둘 다 똑같이 사각형 모양이기 때문에 두 개 중 어떤 것을 사용해도 상관은 없지만 자세히 보면 다른 점을 발견할 수 있다. 먼저 Plane은 wireFrame 모드로 보면 다음과 같이 나누어지는 것을 볼 수 있다. 기본 plane 한 개의 wireFrame은 총 vertex 600개로 구성되어 있다. 이는 연산량도 많고 무겁기 때문에 여기에 img를 입히면 퀄리티가 상대적으로 떨어지게 된다. 반면 qaud는 verterx가 6개 이루어져 매우 단순한 형태임을 확인할 수 있다. 이는 처리할 때 매우 가볍기 때문에 img를 입혀도 훨씬 성능을 높일 수 있다. 따라서 같은 기능..
일반화(Generic) 개요 및 제네릭 메서드(Generic Method) & 제네릭 클래스(Generic Class) 선언 일반화 제네릭 Generic의 사전적 의미는 '포괄적인', '범용적인', '일반적인'이라는 뜻이다. 어떤 특정한 기법을 타겟팅 하는 것이 아니라 두루두루 사용할 수 있도록 한다. 일반적으로 클래스를 정의할 때, 클래스 내의 모든 데이터 타입을 정해준다. 대부분이 동일하지만 일부 데이터 타입만 다른 경우도 존재하는데, 그 예로 int 타입을 파라미터로 받은 메서드는 double 타입의 데이터를 사용할 수 없게 된다. 이러한 이슈를 한번에 해결할 수 있는 방법으로 제네릭 타입(Generic Type)을 사용하면 int, float, double 등 특정 데이터 타입을 확정하지 않고 데..
게임 최적화란? 게임 프로그래밍 디자인 패턴을 이해하려면 먼저 좋은 소프트웨어 구조에 대해 알아야 한다. 좋은 소프트웨어 구조는 코드를 거의 건드리지 않고도, 적당한 함수 몇 개만 호출하면 원하는 작업을 할 수 있도록 '범용성' 있게 설계한 구조를 말한다. 해당 코드를 얼마나 쉽게 변경할 수 있는지, 얼마나 다양한 방식으로 활용할 수 있는지 여부가 '좋은' 코드 설계를 평가하는 척도가 된다. 비용 발생 생산성이 높은 소프트웨어 구조를 설계하는 과정에서 일반적으로 '추상화'와 '모듈화' 다음 2가지 방법을 채택한다. 하지만 기능을 추가하거나, 코드를 조금씩 변경할 때 마다 나머지 코드들과 통합되어야 하는데, 그 과정에서 잦은 디버깅으로 인해 유지 비용이 발생한다. 가령, 확장성을 위해 기존 코드에 인터페이..
파일 입출력(File IO)과 스트림(Stream), prefab 인스턴스 유니티에서 슈팅 게임을 제작할 때 bulletFactory에서 prefab화 되어있는 bullet 인스턴스를 생성하는 방식을 자주 사용한다. 해당 방식이 유니티 내에서 어떤 절차를 거쳐 실행되는지에 대한 내용을 작성해보고자 한다. 먼저 스트림(Stream)은 '데이터가 흐르는 통로'로 데이터를 옮길 때, 스트림을 만들어 둘 사이를 연결한다. 메모리 하드 디스크와 같이 저장 매체에 데이터를 저장하고 불러오는 역할을 하는 것이다. 우리가 스크립트에서 bullet 변수를 선언하고 하이라키창에 bullet 오브젝트를 생성하는 것은 동적 메모리 할당(임시적)이기 때문에 프로그램을 종료하면 사라지게 된다. 하지만 bullet 오브젝트를 하드..
플레이어의 상/하/좌/우 움직임과 적이 플레이어를 따라다니도록 설정하는 코드 구현 시 몇몇 새로 알게된 사실이 있다. 쉽게 넘어갈 수도 있는 내용이지만 사실 굉장히 중요한 내용이고, 이를 바탕으로 응용할 수 있는 내용들이 많은 것 같아 정리하려고 한다. Vector3를 사용하여 오브젝트 이동 구현하기 float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); // 방법 1 Vector3 dir = Vector3.right * h + Vector3.up * v; transform.position += dir * speed * Time.deltaTime; // 방법 2 Vector3 dir = new Vector3(h, v, 0);..