메시지 브로드캐스트

씬에 MonoBehaviour를 상속받는 모든 객체에 문자열 언급을 통해 메서드를 호출한다.

ex) 저녁 다 됐다 밥 먹어라 (각 개인이 아닌 모두에게)

 

PathFinder 스크립트에서 RecalculatePath메서드를 실행하라는 BroadcastMessage를 보낸다.

SendMessageOptions.DontRequireReceiver는 신경쓰지 말라는 것이다.

BroadCastMessage

그리고 마우스 클릭입력이 들어왔을 때 걸을 수 있고 이미 막힌 경로가 아니고 타워가 성공적으로 설치 됐다면 노드를 막고 PathFinder의 NotifyReceivers메서드를 실행한다.

그러면 위의 메서드의 브로드캐스트문이 실행이 되는데

EnemyMover의 RecalculatePath가 실행되게 된다.

RecalculatePath

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

타이머 추가하기  (0) 2022.09.14
오버로딩 메서드  (0) 2022.09.14
스크립트 실행 순서  (0) 2022.09.14
유효 경로 찾기  (0) 2022.09.12
노드 블로킹  (0) 2022.09.12

스크립트 실행 순서

KeyNotFound 오류가 떴다. - 여기서는 스크립트 실행 순서 때문에 발생한 문제다.

KeyNotFoundException

Edit - Project Settings - Script Execution Order에서 스크립트 실행 순서를 편집할 수 있다.

* 너무 여기에 의존하는 것은 좋지 않다. - 잠재적 문제들이 생겨날 수 있으므로 (여기 경우에는 순서상 Grid Manager - Path Finder - Enemy Mover 순으로 실행되어야 하는데 Enemy Mover에 OnEnable이 있어서 다른 방법이 없기 때문에 사용했다.)

Script Execution Order
실행

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

오버로딩 메서드  (0) 2022.09.14
메시지 브로드캐스트  (0) 2022.09.14
유효 경로 찾기  (0) 2022.09.12
노드 블로킹  (0) 2022.09.12
왔던 경로 다시 찾기  (0) 2022.09.12

유효 경로 찾기

PathFinder에서 ResetNode 를 호출한다.

GetNewPath는 너비우선탐색을 실행하고 경로를 반환한다.

WillBlockPath는 grid 좌표의 이전 상태 변수를 생성하여 isWakable을 대입하고 grid의 isWalkable은 false로 만든다. 이후 GetNewPath를 호출하고 newPath리스트에 대입하고 grid의 isWalkable을 previousState(무조건 true지만 안전장치)로 정한다.

newPath의 길이가 1과 같거나 작으면 (1타일이니까 막혀있는 타일임) GetNewPath로 새로운 경로를 찾고 true를 반환한다. 

실행

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

메시지 브로드캐스트  (0) 2022.09.14
스크립트 실행 순서  (0) 2022.09.14
노드 블로킹  (0) 2022.09.12
왔던 경로 다시 찾기  (0) 2022.09.12
전체 경로 찾기  (0) 2022.09.12

노드 블로킹

Tile(WayPoint)스크립트의 Start에서 gridManager가 null이 아닐 때 에디터 좌표인 Coordinates로부터 월드 Position을 불러오는 GetCoordinatesFromPosition을 호출하고

 isPlaceable이 false일 때 BlockNode를 호출하여 isWalkable을 false로 만들었다.

실행

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

스크립트 실행 순서  (0) 2022.09.14
유효 경로 찾기  (0) 2022.09.12
왔던 경로 다시 찾기  (0) 2022.09.12
전체 경로 찾기  (0) 2022.09.12
이웃 경로 찾기  (0) 2022.09.08

왔던 경로 다시 찾기

너비 우선 탐색 이후에 목적지부터 리스트에 넣고 뒤집어서 시작점부터 찾아가는 방법이다.

현재 노드를 목적지 노드로하고 경로에 현재 노드를 넣은 다음

현재 노드에 연결된 노드가 null이 아니면 현재 노드를 연결된 노드로 하고 경로 리스트에 넣고 하는 것을 반복한 뒤

목적지부터의 리스트를 뒤집어서 시작점부터 정렬되게 한다.

왔던 경로 다시 찾기
실행

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

유효 경로 찾기  (0) 2022.09.12
노드 블로킹  (0) 2022.09.12
전체 경로 찾기  (0) 2022.09.12
이웃 경로 찾기  (0) 2022.09.08
디버깅2  (0) 2022.09.08

- 리스트의 한 종류

- 선입선출(FIFO)

- 선언 : Queue<Node> queue = new Queue<Node>();

- 추가 : queue.Enqueue();

- 제거 : queue.Dequeue();

- 첫번째아이템 엿보기 : queue.Peek();

 

너비 우선 탐색

우선 Awake문에서 GridManager의 Grid를 찾고 존재하면 멤버 딕셔너리 변수인 grid를 GridManager의 Grid로 하고나서 인스펙터에서 정한 시작지와 목적지 노드를 할당해준다.

이후에 Start문에서 너비우선탐색 함수를 부른다.

Awake Start

frontier 큐와 reached 딕셔너리에 한 번 시작 노드와 시작 key value를 추가하고

탐험 노드를 현재 노드로 하고 탐험 했는지 체크한 후 목적지를 찾을 때까지 이웃을 찾는 작업을 반복해준다.

BreadthFristSearch

이후에 현재 노드 좌표에서 방향 좌표를 더해 더해 이웃을 찾아주고

이웃마다 루프를 돌려 이미 도달하지 않고 걸을 수 있는 노드면 도달했다는 것과 탐험할 것이라는 정보를 추가해준다.

ExploreNeighbors

ObjectPool의 PathFinder에서 Destination Coordinates 좌표를 정해주면 그 목적지에 갈 때까지 너비 우선 탐색을 실행하게 된다.

실행

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

노드 블로킹  (0) 2022.09.12
왔던 경로 다시 찾기  (0) 2022.09.12
이웃 경로 찾기  (0) 2022.09.08
디버깅2  (0) 2022.09.08
딕셔너리  (0) 2022.09.08

배운 것들

씬 전환

문 방향에 Collider를 붙이고 Trigger를 체크하여 Tag가 Player면 씬을 이동할 수 있다는 것을 배웠다. - public string으로 씬 이름을 문자열로 받아 각 트리거마다 다른 씬으로 이동할 수 있게 만들 수 있다는 것을 배웠다. 

트리거
씬 전환

로그인 창

Font Awsome라는 사이트에서 이미지를 받아 유니티의 Text(Lagacy)에 사용할 수 있다는 것을 배웠다.

https://fontawesome.com/

 

Font Awesome

The world’s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.

fontawesome.com

Font A wsome

Start for Free 후

Free for Desktop을 통해 폰트를 다운 받는다.

이후 아이콘을 검색해서 무료인 아이콘 중 하나를 골라

우측 상단의 두번째 Copy Glyph를 클릭해서 복사한 뒤

이후에 안에서 폰트를 적용한 후 Text칸에 복사해주면 된다. 이전의 사진에 Solid라고 써져있으면 Solid 폰트를 사용해야 한다.

아이콘 적용

이를 적용한 화면이다.

로그인 창

미니맵

RenderTexture와 카메라를 만들고 카메라로 미니맵 구도를 잡은 후 RenderTexture에 입힌다.

Canvas와 Image를 만들고 이미지를 적절한 위치에 이동시킨 후 마스크 컴포넌트를 붙인다.

이후 그 하위 오브젝트에 Raw Image를 붙이고 이전에 미니맵 카메라가 찍은 RenderTexture를 붙이면 된다.

실행화면

 

 

한 주 후기

 이번 주 수업은 로그인 창을 만들어 외부 이미지 텍스트를 가져오는 것과 미니맵 만드는 것을 배웠다. 텍스트에 이미지 폰트를 넣을 수 있다는 점은 몰랐는데 새로운 방법을 알게 되어서 좋았고 Render Texture에 대해서는 알고 있었지만 이것을 활용하여 동적으로 움직이는 간단한 미니맵을 만들 수 있다는 것을 알게되어서 좋았다. 수업 진도가 끝나고 나 혼자서 버그를 고쳐보는 시간이 있었는데 이동 하는 중에 캐릭터가 덜덜 떨리는 버그가 있었다. 처음엔 코드 상의 문제인 줄 알고 계속 수정해보고 했으나 쉽지 않았다. 이것 저것 만져보다 RigidBody의 Freeze Rotation의 x축을 끄고 나선 이 문제가 해결되었다. 아마 velocity를 사용하여 앞으로 움직일 때 넘어지다가 원래 상태로 다시 돌아올려고 해서 문제가 생겼던 것 같았다. 이렇게 나 혼자서 프로젝트 퀄리티 향상을 위해 버그를 고치거나 새로운 것을 추가하는 작업을 자주 해야겠다는 생각이 들었다.

 이번 주는 수업을 듣고 나서 추석에 본가를 내려가느라 차가 막혀서 조금 피곤했다. 틈틈히 유데미 강의를 잘 시청하여 흐름이 끊기지 않게 해야겠다. 다음 주도 파이팅!

 

 

유데미코리아 바로가기

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

이웃 경로 찾기

빈 목록을 생성하여 grid의 키 값에 지금 노드 좌표에 각 방향의 좌표를 더한 값이 있으면 neighbors리스트에 grid 노드를 넣어준다.

TODO 주석은 아래에 것들을 테스트 후에 삭제할 것을 나타낸 것이다.

이웃 탐색
실행

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

왔던 경로 다시 찾기  (0) 2022.09.12
전체 경로 찾기  (0) 2022.09.12
디버깅2  (0) 2022.09.08
딕셔너리  (0) 2022.09.08
순수 C# 클래스  (0) 2022.09.08

디버깅

Node 가져오기

Get메서드와 딕셔너리의 ContainsKey

Get메서드

 

WayPoint 대신 GridManager의 값 사용하기

경로 종류마다 컬러 값을 줬고 WayPoint대신 GridManager로 관리하게 했다.

GridManager

색을 칠할 때 GridManager와 Node의 값이 null이면 return하게 했다. (Coordinate 클래스가 에디터 모드에서도 실행되므로 nullReference오류가 에디터 모드에서 뜸)

null 체크

경로 찾기의 각 경우마다 색을 바꿔주게 했다.

경로 색 바꾸기

아직 그리드 딕셔너리 안에 존재하는 일부가 제대로 막히게끔 색칠되지 않았다. - 아직 기능 추가를 안 해서(경로 찾기)

실행

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

전체 경로 찾기  (0) 2022.09.12
이웃 경로 찾기  (0) 2022.09.08
딕셔너리  (0) 2022.09.08
순수 C# 클래스  (0) 2022.09.08
길 찾기 알고리즘  (0) 2022.09.07

딕셔너리

- Key-Value 키-값 한 쌍을 저장한다. (Key는 딕셔너리에서 찾는 단어, Value는 설명)

- Key와 Value는 연결되어있다.

- 딕셔너리에 있는 Key들은 고유의 값을 가진다. - 이것들이 고유하기 때문에 굉장히 단순한 데이터 유형을 사용한다. (이 프로젝트에선 coordinates)

- Value는 고유의 값이 아니라 복잡한 유형의 데이터가 될 수 있다. (이 프로젝트에선 노드 오브젝트)

- Value는 null이 될 수 있지만 Key는 null이 될 수 없다.

- 실제 사전처럼  Key에서 Value를 찾으려고 할 때 굉장히 빠르게 찾을 수 있다.

- Value에서 Key를 찾으려고 하면 정말 느리다.

 

코드에서 사용

List처럼 선언할 때 new 생성자를 사용해주면 된다.

딕셔너리 선언

딕셔너리 요소 추가와 key, value 값 받기

요소 추가, 키 값 받기

5,5라 25개가 찍혔다.

실행

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 레엄 러쉬' 카테고리의 다른 글

이웃 경로 찾기  (0) 2022.09.08
디버깅2  (0) 2022.09.08
순수 C# 클래스  (0) 2022.09.08
길 찾기 알고리즘  (0) 2022.09.07
리팩토링  (0) 2022.09.06

+ Recent posts