플레이어 카메라 아래에 총 프리펩을 넣고 적절한 위치로 배치했다.

이후 Texture에셋에서 Type을 Sprite로 하고 Alpha Source를 From Gray Scale, Alpha Is Transparent로 하였다.

그리고 나서 따로 Canvas를 만들어 UI Image로 붙였다.

 

레이캐스팅

광선 경로에서 콜라이더 빛을 감지하기 위해 한 포인트에서 특정 방향으로 눈에 보이지 않는 광선을 쏘는 과정

- 특정 위치(origin)에서 특정 방향(Direction) 광선(Ray)을 쏴서 충돌체(Collision)을 맞춰 맞은 정보(RayCastHit)을 받는 것이다.

마우스 왼쪽 클릭을 했을 때 카메라의 위치로부터 카메라의 forward(정면)방향으로 range만큼 쏴서 맞으면 hit에 정보를 저장한다.

실행

사정거리

타겟(플레이어)과 적의 거리가 chaseRange보다 작을 때 적이 타겟을 쫓아가게 만든다.

실행

 

OnDrawGizmosSelected()

씬에서 캐릭터가 선택될 때 함수 안의 기즈모가 활성화 시키는 함수다.

선택 됐을 때

 

도발 공격

한번 범위에 잡히면 계속 추적하게하고 타겟과의 거리가 navMeshAgent의 stoppingDistance보다 작아지면 공격하게 그 이상이면 계속 따라가게 하였다.

실행

 

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

총구 플래시  (0) 2022.09.15
적 체력과 데미지  (0) 2022.09.15
총, 레이캐스팅  (0) 2022.09.15
NavMeshAgent  (0) 2022.09.15
좀비 러너 게임 디자인  (0) 2022.09.14

manifest merger failed

이전에 gradle 문제를 해결 하고 다음 난관은 이녀석이었다.

manifest merger failed

이녀석은 그래도 쉽게 문제를 찾았는데 sdk 버전이 더 상위 버전이어야 한다는 것이다. 그래서 구글링을 좀 해보다가 Unity Forum에서 관련 정보를 찾게 되었다.

해결 방법

해결 방법은 이렇다.

Project Settings - Player - Other Settings에서 Minimum API Level을 조정하면 되는데

위의 사진에서 보다싶이 나의 경우는 24버전 이상을 다운받으라는 말이어서 안전하게 25버전을 다운 받았더니 성공적으로 빌드가 되었다.

Minimum API Level

 

Gradle build failed. See Console for details

안드로이드 빌드 중 이러한 오류가 떴다. 콘솔을 읽어보니 ~~ c:/문서 ~~ 로 중간에 한글 경로가 섞여있어서 나는 문제였다. 깃허브 기본 경로가 문서라서 자동으로 바뀔 줄 알았더만 아니었다니.. 나는 귀찮아서 그냥 c: 폴더에 넣었다.

경로 옮기기

해결!

NavMeshAgent

NavMeshAgent는 NavMesh 주변을 항해하는 컴포넌트이다.

NavMeshAgent

NavMesh

에이전트들을 배치한 곳 어디든 적이 갈 수 있는 지 그 여부를 알 수 있도록 월드 기하에 배치된 것이다.

Window - Ai - Navigation

Navigation

Bake 버튼을 눌러보면 특정한 것에만 적용이 되는데 NavMesh는 정적 객체에만 적용될 수 있어서 그렇다.

이렇게 인스펙터에서 정적임을 체크해줘야 된다.

이후 Bake를 하면 Bake된 NavMesh가 바뀌어 있는 걸 볼 수 있다.

* 파란색 부분 - NavMesh (NavMeshAgent가 갈 수 있는 곳)

NavMesh

여기서 NavMesh간의 사이에 틈이 생겨 Agent들이 올라가거나 내려올 수 없는 경우가 생긴다.

Agent Radius를 늘리면 가장자리의 폭이 넓어지고

Agent Radius를 줄이면 가장자리의 폭이 좁아진다.

Agent Height는 머리가 사물에 부딪치게 할지 말지를 알려준다.

Max Slope는 경사로를 지나 갈 수 있는 최대 각도다.

0으로 했더니 안 구워졌다.

Step Height는 걸어갈 수 있는 높이다.

 

스크립트 이동

NavMeshAgent를 쓰기 위해 Using UnityEngine.AI를 적어주고 NavMeshAgent의 SetDestination 함수를 사용하였다.

실행

좀비 러너 게임 디자인

플레이어 경험

- 강렬함

핵심 메커닉

- 적을 쏘는 것

핵심 게임 루프

- 총알을 모으고, 적들을 쏘고, 레벨의 끝에 도달하는 것

게임 테마

- 어두움, 숲과 벙커, 좀비

우선순위

- 1인칭 카메라 시점

- 쏘기위한 레이캐스팅

- 움직이고 공격하는 적 AI

- 체력, 데미지 시스템

- 죽음, 게임오버

- 무기 스위칭

- 총알, 총알 픽업 (특정탄약)

- 플래시 라이트, 배터리 픽업

- Probuilder 지형

 

【한글자막】 C#과 Unity로 3D 게임 개발하기

https://www.udemy.com/course/best-3d-c-unity/

 

Video Game Development Using Unity: Code Games with C#

C# 기초부터 Unity 엔진 활용까지, 실제 게임 개발 프로젝트를 진행해보며 학습하는 3D 게임 개발의 모든 것

www.udemy.com

 

포스트 프로세싱

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

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

+ Recent posts