4. 절차적 도심 생성 - 건물 배치
·
Unity,C#/절차적생성(PCG)
▼ 이전 글 3. 절차적 도심 생성 - Perlin Noise로 경계면 다듬기▼ 이전 글 2. 절차적 도심 생성 - 가중치 Voronoi를 통한 구역 분할▼ 이전 글 1. 절차적 도심 생성 - 도로 생성■ 도로 생성 실제 도심을 내려다보면 도로가 격자 형태로 나 있고, 그 사이에 생긴 블hate-errorlog.tistory.com ■ 개요앞서 나눈 구역 위에 실제 건물을 배치한다. 건물 프리팹은 1x1, 2x3처럼 저마다 크기가 다르므로, 칸을 하나씩 훑으면서 그 자리에 들어갈 수 있는 크기를 골라 빈 구역을 채운다. ■ 건물 프리팹 로드하기인스펙터에서 타입별·크기별로 프리팹을 일일이 링크할 수도 있지만, 항목이 늘어날수록 잘못 연결하는 실수가 생기기 쉽다.그래서 프리팹 네이밍 컨벤션을 정하고, 이름만..
3. 절차적 도심 생성 - Perlin Noise로 경계면 다듬기
·
Unity,C#/절차적생성(PCG)
▼ 이전 글 2. 절차적 도심 생성 - 가중치 Voronoi를 통한 구역 분할▼ 이전 글 1. 절차적 도심 생성 - 도로 생성■ 도로 생성 실제 도심을 내려다보면 도로가 격자 형태로 나 있고, 그 사이에 생긴 블록마다 건물이 들어선다. 도시 생성의 기준이 되는 이 도로망을hate-errorlog.tistory.com▼ 참고 자료 [C#, Unity, 절차적 생성] 절차적 지형 생성 - 1.PerlinNoise■ PerlinNoise PerlinNoise는 1983년 Ken Perlin이 개발한 그래디언트 기반의 노이즈(Gradient Noise)함수로, 지형의 절차적 생성, 텍스처 생성, 구름이나 연기 같은 자연 현상 표현 등 다양한 절차적 콘텐츠 생hate-errorlog.tistory.com■ Per..
2. 절차적 도심 생성 - 가중치 Voronoi를 통한 구역 분할
·
Unity,C#/절차적생성(PCG)
▼ 이전 글 1. 절차적 도심 생성 - 도로 생성■ 도로 생성 실제 도심을 내려다보면 도로가 격자 형태로 나 있고, 그 사이에 생긴 블록마다 건물이 들어선다. 도시 생성의 기준이 되는 이 도로망을 먼저 만들어보자.1. CityLayout.csusing UnityEngine;hate-errorlog.tistory.com ■ Voronoi 알고리즘이란? 도시의 전경을 보면 건물들이 마구잡이로 들어선 것이 아니라, 거주·상업·공업 등 용도별 구역으로 나뉘고 각 구역에는 그 용도에 맞는 건물이 배치되어 있다. 따라서 도심을 절차적으로 생성할 때도 건물을 무작위로 흩뿌리는 것이 아니라, 먼저 구역을 나눈 뒤 그 구역에 맞는 건물을 배치해야 한다. 이 "구역 나누기"를 위해 Voronoi 알고리즘을 사용한다.보로노..
1. 절차적 도심 생성 - 도로 생성
·
Unity,C#/절차적생성(PCG)
■ 도로 생성 실제 도심을 내려다보면 도로가 격자 형태로 나 있고, 그 사이에 생긴 블록마다 건물이 들어선다. 도시 생성의 기준이 되는 이 도로망을 먼저 만들어보자.1. CityLayout.csusing UnityEngine;public class CityLayout{ public int Seed { get; private set; } public int Width { get; private set; } public int Height { get; private set; } public int CellSize { get; private set; } public ECellType[,] Cells; public CityLayout(int seed, int width, ..
[Unity] 이동 정리 - 벡터 개념부터 물리 이동까지(Transform, Rigidbody, CharacterController)
·
Unity,C#/Unity 정보
■ 벡터 - 이동의 토대Unity에서 물체를 이동시키는 방법을 이해하려면 먼저 벡터를 알아야 한다.벡터(Vector)를 쉽게 말하면 “어느 방향으로, 얼마나”를 나타낸 값이다. 즉 방향과 크기를 한데 묶은 값으로, 화살표를 떠올리면 된다.누군가 우체국이 어디예요?라고 물어봤을 때 저쪽 방향으로 10분(얼마나) 정도 걸어가면 됩니다. 이런 개념이 벡터인 것이다.2차원의 벡터라면 2개의 요소(스칼라)로 표현되고, 3차원의 벡터라면 3개의 요소로 표현된다. 여기서 스칼라는 크기만 있는 값 하나(예: 속도 5, 온도 20)를 의미하고, 벡터는 이 스칼라를 여러 개 묶어 방향까지 표현한 것이다.위 벡터는 x축으로 3, y축으로 2만큼 뻗은 화살표이다. 1. 위치 벡터와 방향 벡터이름에서 알 수 있듯이 위치 벡터는..
[Unity] 총알 시스템으로 알아보는 Object Pool
·
Unity,C#/Unity 정보
■ Object Pool게임 오브젝트를 생성하는 Instantiate() 메서드는 비용이 높은 연산이다. 이 메서드를 게임 플레이 중 반복적으로 호출하면 프레임 드롭이나 GC(Garbage Collection) 스파이크 등 다양한 성능 문제를 일으킬 수 있다. 이를 해결하기 위해 "필요할 때마다 생성하자"가 아닌, "미리 만들어 두고 꺼내 쓰자"라는 접근 방식을 취하는 것이 바로 Object Pool이다. 🤔Instantiate()가 비싼 이유Unity에서 우리가 작성하는 코드는 C#이지만, Unity 엔진의 내부(코어)는 C++로 작성되어 있다. 즉, 우리가 다루는 C# 코드는 C++ 코어를 조작하는 리모컨 같은 역할을 한다. Instantiate()를 호출하면, Unity는 하나의 게임 오브젝트를 ..
[Unity, C#] 델리게이트에 대한 모든것(Action, Func, Lambda)
·
Unity,C#/Unity 정보
■ 델리게이트(Delegate)게임 개발을 하다 보면 “어떤 일이 일어났을 때 이 코드를 실행해 줘”라는 패턴이 굉장히 많다. 예를 들어,private void OnTriggerEnter(Collider other){ if(other.Tag("Wall") == true) { //충돌된 오브젝트의 태그가 Wall이라면 실행... }}[간단한 충돌 코드]위 코드처럼 충돌 발생 시 실행할 코드를 작성한다. 하지만 충돌 시 실행할 동작이 상황에 따라 매번 달라져야 한다면 어떻게 될까?public class Bullet{ private Player _player; private Enemy _enemy; private Manager _manager; private void OnTriggerEnter(Collid..
[Unity, C#] SOLID 원칙
·
Unity,C#/Unity 정보
■ SOLID 원칙프로그래밍에서 널리 사용되는 디자인 패턴(Design Patterns)은 Gang of Four(GOF) 라 불리는 4명의 저자가 정리한 책에서 시작되었다. 디자인 패턴을 공부해본 사람이라면 알겠지만, 대부분의 책은 SOLID 원칙부터 소개하고, 대부분의 디자인 패턴 역시 이 SOLID 원칙을 준수하도록 설계되어 있다. ▶ SOLID 원칙Single responsibility : 단일 책임 원칙Open-closed : 개방-폐쇄 원칙Liskov substitution : 리스코프 치환 원칙Interface segregation : 인터페이스 분리 원칙Dependency inversion : 의존 역전 원칙위 5가지 원칙의 앞 글자를 따서 “SOLID” 원칙이라 부른다. 물론 실제 프로그..
[Unity] UI Toolkit 기본 사용법
·
Unity,C#/Unity 정보
■ UI ToolkitUI Toolkit은 Unity 2022.2 이후 유니티의 기존 UGUI(Canvas 기반 UI)를 대체할 수 있도록 개발된 새로운 공식 UI 시스템이다. 기존 UGUI는 GameObject 기반으로 동작하는 UI 시스템으로 드래그 앤 드롭을 통한 직관적인 UI 제작이 가능하다. 또한 하이어라키 구조와 Canvas의 SortOrder를 이용해 UI의 렌더링 순서를 제어할 수 있다.UGUI는 편리하고 직관적인 반면에 아래와 같은 뚜렷한 단점도 존재한다.구분단점 GameObject 기반 UGUI의 모든 UI요소는 GameObject + Component 로 구성된다. → 따라서 많은 UI요소가 있으면 UpdateLoop, Transform 갱신 등 CPU 오버헤드와메모리 사용량이 커..