포스트 프로세싱

포스트 프로세싱은 카메라가 월드를 보여주는 방식을 바꿔주는 인카메라 효과이다.

Profile

적용할 효과 전부

Volume

프로필을 포함하고 있고 수많은 볼륨에 다양한 효과를 적용할 수 있음

Layer

카메라에 위치

 

프로젝트 우클릭 -> Create -> Post-processing Profile

PostProcessing Volume

빈 오브젝트에 Post-Process Volume 컴포넌트를 추가한다.

이후 Profile부분에 이전에 만든 Post-processing Profile을 추가하면 된다.

Post-processing Profile

이후 레이어를 만들어 볼륨에 붙인다.

그 다음 카메라에 Post-Process Layer 컴포넌트를 추가해 Layer에 아까 Voulme에 추가한 레이어를 선택한다.

적용 후

 

앰비언트

라이팅

땅에 라이팅을 비추고 싶은데 성문 벽에 가려져서 못 비추는 경우가 생겼다.

아래의 Culling Mask 옵션을 통해 특정 Layer를 비추지 않게 함으로써 이것을 해결할 수 있다.

레이어 추가

레이어 붙이기 (인스펙터 Layer)

이후 라이팅의 컬링 마스크에서 체크 해제하면 된다.

* 반대로 비출 타일만 체크하고 다른 것을 다 해제해도 된다.

컬링 마스크

파티클 시스템

파티클 시스템 중 Noise는 불이나 폭발 같은 용도로 사용할 때 유용한 모듈이다. (흔들흔들거림)

Noise

Strength를 조정하면 클수록 더 난잡하게 작을수록 부드럽게 움직인다.

Strength

Frequency를 조정하면 클수록 더 빠르게 작을수록 더 느리게 움직인다.

Frequency

Scroll Speed를 조정하면 Noise맵이 점점 바뀌게 할 수도 있다.

Scroll Speed
실행

 

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

포스트 프로세싱  (0) 2022.09.14
타이머 추가하기  (0) 2022.09.14
오버로딩 메서드  (0) 2022.09.14
메시지 브로드캐스트  (0) 2022.09.14
스크립트 실행 순서  (0) 2022.09.14

시간에 따른 타워 빌드

타워를 짓는 시간이 걸린다는 것을 표현하기 위해 타워 몸통 -> 머리 -> 발사대(파티클) 순으로 켜지게 하였다.

위의 foreach는 자신 포함 자식들을 모두 불러오기 때문에 if문으로 자신을 제외하는 조건을 걸었고

아래의 foreach는 자신의 자식들만 불러오므로 자식을 먼저 키고 foreach를 중첩하여 자식의 자식인 자손과 시간 차이를 두어 키게 하였다.

자식, 자손
실행

 

오버로딩 메서드

- 다형성(여러 형태를 취하는 방법)의 한 종류

- 다른 메서드가 매개변수만 다르게 같은 이름을 가질 수 있다 => 메서드에 동일한 이름을 입력하고 다른 인수를 넣기만 하면 된다. == 시그니처가 다르다.

ex) Instantiate(object)과 Instantiate(object, position, rotation)

이와 같이 같은 메서드 이름을 가졌지만 인자가 달라 괜찮다.

오버로딩

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

앰비언트(주변 것들)  (0) 2022.09.14
타이머 추가하기  (0) 2022.09.14
메시지 브로드캐스트  (0) 2022.09.14
스크립트 실행 순서  (0) 2022.09.14
유효 경로 찾기  (0) 2022.09.12

메시지 브로드캐스트

씬에 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

+ Recent posts