공부/유니티 디펜스 게임 만들기 7

맵 생성

맵 생성 중 잘 못 설계했다는 점을 깨달음. 천천히 다시 코드를 리마인드하며 맵 생성을 설계. 우선 맵의 각 꼭지점을 선언하였음. (맵 전체 직사각형에서의 모서리) using System.Collections.Generic; using UnityEngine; public class _Grid : MonoBehaviour { enum Vertex { LEFT_DOWN, LEFT_UP, RIGHT_DOWN, RIGHT_UP, CENTER, MAX } public LayerMask unwalkableMask; Node[,] grid; Vector3[] vertices; Vector2 gridSize; float grid_Width; float grid_Height; float nodeRadius; //노드 반..

Ground

오늘의 작업 - 게임상 땅을 만든다. - 땅 꼭지점 4개의 위치를 받아 저장한다. - 꼭지점의 기준으로 Grid를 생성한다. - 이 정보를 통해 길찾기를 몬스터가 가능하게 만든다. #1 그라운드 생성 Matrial은 AssetStore에서 무료로 받아 사용한다 Plan은 Gizmos 기준으로 2x2이므로 총 4개의 노드를 잡아 먹는다고 생각했을때, 가로 9 세로 19 Plan을 만들었다. 그러므로 Tower을 1x1로 만들었다고 가정하고 총 가로 18개, 세로 38개로 만들 수 있다. 이러한 가정이 맞을려면, 오브젝트에 대한 크기를 1x1로 고정하여 생성할 수 있어야한다. #2 땅 꼭지점 4개의 위치를 받아 저장한다. #3 꼭지점 기준으로 Grid를 생성한다. enum Vertex { LEFT_DOWN,..

A* 알고리즘 with Unity 03

힙 정렬 Heap sort 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법. 내림차순 정렬을 위해서는 최대 힙을 구성하고 오름차순 정렬을 위해서는 최소 힙을 구성 https://youtu.be/Xw2D9aJRBY44 이 알고리즘을 도입하여 좀 더 향상된 A* 알고리즘을 구현한다. 맵을 확장 시킨 뒤 경로 탐색에 대한 시간을 먼저 확인해본다. using System.Collections.Generic; using UnityEngine; using System.Diagnostics; using System; public class PathManager : MonoBehaviour { public Transform seeker, target; [SerializeField] private Grid gr..

A* 알고리즘 with Unity 02

결과 그림이다. Inspector 창에 Seeker (경로를 찾는 자), Target(경로 도착지)를 설정해준다. using System.Collections.Generic; using UnityEngine; public class Grid : MonoBehaviour { public LayerMask unwalkableMask; Node[,] grid; Vector2 gridSize; float nodeRadius; //노드 반지름 float nodeDiameter; //노드 지름 int gridXCount, gridYCount; //Grid X축 Node 갯수, Grid Y축 Node 갯수 private void Awake() { gridSize = new Vector2(40, 40); nodeRad..

A* 알고리즘 with Unity 01

using UnityEngine; public class Node { public bool IsWalkable; public Vector3 worldPosition; public int gridX, gridY; // 노드의 현재까지 움직인 비용. public int gCost; // 노드가 도착점까지 예상되는 비용. public int hCost; //비용의 총합 public int Fcost { get => gCost + hCost; } public Node(bool walkable, Vector3 pos, int x, int y) { this.IsWalkable = walkable; worldPosition = pos; gridX = x; gridY = y; } } 노드에 비용을 넣는다. player..

2022-01-15

다음은 테스트를 위해 벽을 만들어 준다. 벽을 만들고 Material을 생성하여 Wall 오브젝트에 넣어준다. 그런 다음 Layer를 설정해주자. https://docs.unity3d.com/kr/530/Manual/Layers.html 유니티 - 매뉴얼: 레이어 Optimizing Shader Load Time 레이어 기반의 충돌 감지 레이어 Layers는 Cameras에 따라 씬의 일부만 렌더링 하거나, Lights에 따라 씬의 일부만 밝히는 등에 가장 자주 사용됩니다. 한편, 선택적으로 Collider를 docs.unity3d.com 여기서 볼 수 있 듯 Layer을 통해 Collider를 테스트해본다. using UnityEngine; public class Node { public bool Is..

디펜스 게임 만들기 [Grid & Gizmo]

회사에서 2D 게임만 만들다보니 3D를 다루는 법을 잊을까봐 3D 게임을 만들어 보도록 한다. 기획 게임 종류 : 디펜스게임 1. 대전 게임 형식 2. 서로 유닛을 보내어 싸움. 3. 라이프를 서로 뺏어 올 수 있으며, 라이프가 0되는 플레이어가 패배. 일단 디펜스 게임을 만들기 위해선 몬스터, 맵, 플레이어가 필요하다. 맵은 몬스터가 출발 방향에서 도착 방향까지 가야하며, 도착 지점에 도달할 시 라이프를 마이너스 시켜준다. 도착 지점까지는 무수한 타워들이 있을 것이며, 그 타워가 만든 길을 따라 몬스터는 도착지점까지 최소거리를 연산하고 움직여야한다. 일단, 맵을 만들어 본다. 맵을 만들기 전, 최소 거리를 만들기 위해 존재하는 맵을 조각조각 나누어 조각에 가중치를 두어 계산한다. A* 알고리즘을 이용하..