좀비 추가하기

좀비 에셋

 

Zombie | 3D 휴머노이드 | Unity Asset Store

Elevate your workflow with the Zombie asset from Pxltiger. Find this & other 휴머노이드 options on the Unity Asset Store.

assetstore.unity.com

에셋을 다운받은 뒤 이전에 Enemy에 있던 값들을 옮기고 좀비에게 맞춰준다.

이후 애니메이터의 애니메이션 Motion에 Idle,Move,Attack,Die 애니메이션을 집어 넣는다.

Die 애니메이션이 반복되므로 bool값으로 체크해서 중복 실행이 되지 않게 설정해준다.

Weapon 스크립트의 총 쏘는 부분에 체크

EnemyAI 스크립트에서 죽고나서 계속 걸어오는 버그 IsDead로 체크해 해결하기

내 경우엔 NavMeshAgent.SetDestination의 NullReference오류가 떠서 enabled도 체크해줬다.

실행

추가로 Enemy에게 Attack애니메이션 이벤트를 넣어줘야 AttackHitEvent가 발동되어 플레이어의 체력이 달게된다.

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

ProBuilder  (0) 2022.09.22
게임 디자인  (0) 2022.09.22
탄약 픽업  (0) 2022.09.20
무기에 따른 탄약  (0) 2022.09.20
public enum과 private Class  (0) 2022.09.20

탄약 픽업

트리거에 닿았을 때 플레이어면 Ammo에 접근해 IncreaseCurrentAmmo를 호출하여 자신은 파괴하고 해당 타입의 총알 개수를 늘린다.

Prefab Variant

부모 수준에서 무엇인가를 변경할 때 모든 픽업이 특정한 일을 하기 원할 때 Prefab Variant를 사용하면 편하다.

- Prefab Variant에서 프리펩 인스턴스의 자식은 삭제되거나 움직일 수 없고 구성 요소들은 다시 불러올 수 없다.

여기서 할 수 있는 건 원래는 탄약을 개봉하고 그곳에서 탄약을 집어 들고 변경하는 것 밖에 없다. => 모든 Prefab Variant 변경

또는 연결을 끊을 수도 있는데 이러면 자체 프리펩이 된다.

큐브를 그대로 두고 다른 색상으로 변경하거나 큐브의 메쉬를 끌 수도 있다.

또는 탄약 픽업으로 가서 큐브를 삭제하고 탄약 픽업 자체에 메쉬가 없다고 할 수도 있다.

아래처럼 Variant의 근원이 되는 Ammo Pickup은 자식을 없애고 Variant에만 추가하는 방법이 있다.

 

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

게임 디자인  (0) 2022.09.22
좀비 추가하기  (0) 2022.09.21
무기에 따른 탄약  (0) 2022.09.20
public enum과 private Class  (0) 2022.09.20
무기 교체하기  (0) 2022.09.20

무기에 따른 탄약

먼저 Weapon클래스에 AmmoType을 SerializeFiled로 선언해주어 인스펙터에서 선택할 수 있게 한다.

또한 각 총의 마다 총알의 타입을 다르게 측정했다.

각 총마다 Ammo Type을 설정해줬다.

이후에 총알 소비와 불러오기를 ammoType을 매개변수로 하여 GetAmmoSlot으로 AmmoSlot을 받는 구조로 바꾸었다.

 

버그

Carbine 총에서 줌인 후 무기 변경 시 줌인이 되어있는 버그가 있었는데 OnDisable을 사용해 고쳤다.

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

좀비 추가하기  (0) 2022.09.21
탄약 픽업  (0) 2022.09.20
public enum과 private Class  (0) 2022.09.20
무기 교체하기  (0) 2022.09.20
무기 구별  (0) 2022.09.20

public enum과 private Class

버그

이전에 버그 먼저 제거해야했다.

무기를 교체할 때 무기 인스턴스가 꺼져서 코루틴을 제대로 실행을 못해서 _canShoot가 true가 안 되는 경우가 있었다.

OnEnable에서 true로 바꿔줘서 해결했는데 총 스왑시 바로 쏠 수 있는 것 때문에 총 딜레이만큼 기다리게 하였다.

 

public enum

enum은 enumeration의 약자인데, 특정 숫자와 단어를 같은 것으로 만들어 주는 코드이다.

- 숫자를 기억할 필요 없이 단어를 사용하기 위해 사용한다.

private class

Ammo 클래스에서 AmmoSlot에 접근 가능하고 내부 변수나 메서드도 사용 가능하지만 외부 클래스에서 Ammo 클래스에 접근한다 하더라도 private class인 AmmoSlot에 접근하지는 못한다. => 효율성과 수정 용이성 때문에 사용한다.

Seriaizable은 인스펙터에서 내부를 보여주기 위해 사용한다.

SerializeField로 AmmoSlot 배열을 선언한 후에 Ammo 스크립트 위에 보이게 된다.

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

탄약 픽업  (0) 2022.09.20
무기에 따른 탄약  (0) 2022.09.20
무기 교체하기  (0) 2022.09.20
무기 구별  (0) 2022.09.20
중첩 프리펩과 다양한 무기 타입  (0) 2022.09.20

무기 교체하기

버튼으로 바꾸기

무기 교체시 currentWeapon을 조절해 처음 시작 무기를 고를 수 있다.

Weapon의 자식 transform을 돌아 weaponIndex와 currentWeapon이 같을 때 해당 weapon을 SetActive시키고 다른 weapon들은 끈다.

이후 weaponIndex를 추가하면 된다.

Input을 받아 currentWeapon의 값을 바꿔준다면 Input에 따라 쉽게 무기 교체를 할 수 있다.

마우스 휠로 바꾸기

마우스 휠을 올릴 때는 인덱스를 증가시켜서 childCount만큼으로 나눠서 나머지를 대입하여 개수를 넘지 않게 했고

마우스 휠을 내릴 때는 인덱스를 감소시켜서 currentWeapon이 0보다 작다면 childcount를 더해주는 식으로 인덱스가 음수가 안 되게 했다.

게임 오버시에도 무기를 교체하는 버그를 고치려고 WeaponSwitcher를 꺼줬다.

무기 구별

먼저 줌인 줌아웃이 가능한 무기를 구분해주었다.

Player 프리펩에서 WeaponZoom을 제거하고 Carbine 프리펩에 붙였다.

이후 GetComponent RigidbodyFirstPersonController 참조를 SerializeField 참조로 바꿨다.

발사 지연 시간

bool타입인 canShoot을 체크하는데 코루틴으로 일정 시간이 지나야  canShoot이 true가 되어 Shoot 함수를 호출할 수 있게 했다. timeBetweenShots를 SerializeField로 선언해서 각 Weapon마다 발사 지연 시간을 다르게 주었다.

이후 무기마다 수치를 조절해줘서 다양성을 추가한다.

* 레이캐스트를 사용해서 무기의 Range까지 조절할 수 있으니 좋은 방법 중 하나인 것을 알 수 있다.

중첩 프리펩

Player 프리펩이나 Carbine 프리펩의 Weapon클래스에 None 값이 참조되어 있어도 괜찮다.

왜냐하면 Player 인스턴스 하위, 게임 화면에 보이는 요소들이 값을 참조하고 있기 때문이다. => Player 인스턴스 안에 Carbine 오브젝트가 이미 소속되어 있고 이는 Carbine 인스턴스라고도 할 수 있다.

그리고 Weapon클래스를 보면 Override 된 부분이 좌측의 파란색 띠와 굵은 글씨로 나타나는 걸 볼 수 있다. => 이처럼 서로 달라도 프리펩끼리 인스턴스를 포함시킬 수 있다.

중첩 프리펩에서 하위 프리펩의 공통되는 부분은 하위 프리펩에 적용시키는 게 편하다.(하위 프리펩 쪽에 있거나 프로젝트 창에서 참조하는 경우)

그러나 아래의 FP Camera나 Ammo Slot은 Player 프리펩(상위 프리펩)의 요소이므로 상위 프리펩에서 참조해주는 것이 맞다.

Override 된 요소를 클릭하여 Rever버튼을 누르면 해당 프리펩의 설정으로 돌아가게 된다. 이러면 프리펩과 인스턴스가 설정이 동일해져 프리펩에 바뀐 것들이 인스턴스에도 적용되게 된다.

Player 프리펩 모드에서 Carbine의 FP Camera와 Ammo Slot을 Revert하면 Carbine 프리펩의 원래 참조 값인 None으로 돌아가게 된다.

공통적으로 적용되는 부분은 Revert하여 수정되는 부분이 같이 적용될 수 있게 하면 된다.

 

다양한 무기 타입

이런 식으로 Shotgun이라는 개체를 만들고

Carbine의 컴포넌트를 복사하는데 Scale은 샷건 프리펩 설정으로 Revert하면 된다.

한 프리펩을 복사해서 다른 프리펩을 만들 때 쉐이더도 같이 복사되니 같은 쉐이더의 Albedo에 텍스처를 집어넣지 말고 프리펩 모드의 씬 창의 오브젝트에 집어넣으면 새로운 쉐이더가 생성되는 걸 볼 수 있다.

기본 탄약 기능

Ammo라는 클래스를 만들어 총알은 10발로 하고 현재 총알을 가져오는 함수와 총알 갯수를 줄이는 함수를 만들었다.

이후 Weapon 클래스에서 총알을 쐈을 때 총알 갯수가 0개보다 커야 AmmoSlot의 ReduceCurrentAmmo를 호출하게 했다.

실행

무기 확대 / 축소

시야

플레이어의 카메라를 인스펙터에서 참조하여 마우스 우클릭을 했을 때 Camera 컴포넌트의 Field of View를 조정하여 줌인 줌아웃 기능을 만들었다.

확대
축소

마우스 민감도

RigidbodyFirstPersonController 스크립트의 Mouse Look에 마우스 민감도를 조절할 수 있는 X Sensitivity와 Y Sensitivity가 있다.

Weapon Zoom 스크립트에서 RigidbodyFirstPersonController를 참조하여 줌인/줌아웃 상태에 따라 민감도도 맞춰주게 하였다. (줌인 상태일 때 민감도 낮아지게)

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

중첩 프리펩과 다양한 무기 타입  (0) 2022.09.20
기본 탄약 기능  (0) 2022.09.20
BroadcastMessage  (0) 2022.09.19
게임오버 UI  (0) 2022.09.16
회전하기  (0) 2022.09.16

BroadcastMessage

어떤 스크립트가 해당 함수를 실행하는 지 정해놓지 않고, 전체에게 해당 함수가 있으면 실행하라는 것을 알리는 함수이다.

- 게임 오브젝트 또는 그 하위에 있는 메서드만 불러온다.

적 오브젝트에 있을 때
적 오브젝트와 하위 오브젝트에 있을 때

+ Recent posts