유니티

유니티 3D 쿼터뷰 액션게임 - 드랍 무기 입수와 교체

nock_ji 2022. 4. 20. 01:29

 

유니티 3D 쿼터뷰 액션게임 만들기

 

 

👾 드랍 무기 입수 / 교체 👾

 

 

 


 

1.  오브젝트 감지

 

 

✏️  Player가 무기에 접근 인지

트리거 된 아이템을 저장하기 위한 변수선언 

Player Logic

 

 

 

✏️  트리거 이벤트인 OnTriggerStay, Exit 사용 

 

📌 OnTriggerStay() 

Wepon 태그를 조건으로 하여 로직 작성 

무기 영역에 다가가면, other 변수에 저장

 

📌 OnTriggerExit()

무기 영역에서 벗어나면, nearObject는 없음을 표시 

 

 

해당 영상은 OnTriggerEnter이어서 Stay와 숫자가 다를 수 있음 

 

 


 

2.  무기 입수

 

 

🔻 무기와의 인터렉션을 위한 bool 값 선언 

bool iDown;

 

 

🔻 Interaction 버튼 입력

Input Manager에서 Interaction button 생성 / 입력 버튼은 'e'

void GetInput()
{
	iDown = Input.GetButtonDown("Interaction");
}

 

 

🔻 Interaction() 함수 생성 및 Update()에서 불러오기 

void Update()
{
	Interaction();
}

 

 

🔻 Interaction()

- 조건을 성립하면 무기 얻은 것을 표시, 해당 무기를 비활성화시키는 로직

- 조건 :  iDown 버튼 입력  + Player 주변에 상호작용 물체가 있음  +  점프X  +  회피X

 

 

🔻 플레이어의 무기관련 배열 함수 2개 선언 

 

 

 

✏️ Weapon tag에 접근하면 ~ 

- Item 스크립트의 아이템 정보를 nearObject가 가지고 옴

- weponIndex는 각각 아이템에 부여한 value 값 (권총 0, 망치 1, 머신총 2)

- value값이 hasWeapons 배열에 하나씩 들어가서 Weapon Item을 만나면 체크가 됨

- Destroy() 함수로 nearObject를 비활성화함 

 

 

📣 Has Weapons 배열 길이를 정해주지 않으면 에러가 발생함

 

 

🔻 무기를 하나씩 먹을 때마다 Has Weapons가 순서대로 체크됨

 



3.  무기 장착

 

 

Player - Mesh Object - Bone_Body - Bone_Shoulder_R - RightHand 

 

🔻 플레이어 오른손에 무기 위치를 정해줄 오브젝트 생성

Collider 삭제, Mesh Renderer 비활성화 

 

🔻 무기 Prefab 프리팹들을 무기 위치에 생성

 

 

🔻 배치된 3개의 무기 오브젝트는 모두 비활성화 & Player Weapons 배열에 할당

 

 

 


4.  무기 교체

장비를 고를 때 각 버튼을 입력하여 무기를 교체함 

 

 

🔻  장비 단축키 1,2,3 따로 변수 생성 및 Input버튼으로 등록 

bool sDown1;
bool sDown2;
bool sDown3;

void GetInput()
{
    sDown1 = Input.GetButtonDown("Swap1");
    sDown2 = Input.GetButtonDown("Swap2");
    sDown3 = Input.GetButtonDown("Swap3");
}

 

 

 

 

📌 무기 교체 함수 생성 Swap();

 

단축키 셋 중 하나만 눌러도 되도록 OR조건 작성 + 점프X + 회피X

단축키에 맞는 무기를 배열에서 활성화하기 

 

🔻 Player가 아이템 먹기 & 아이템 장착 할 수 있습니다

문제점 : 아이템을 먹지 않아도 Swap 버튼을 누르면 장착 가능, 아이템 교체되지 않고 겹쳐서 장착됨 

 


 

 

✏️ 무기 저장

기존에 장착된 무기를 저장하는 변수를 선언하고 활용하기

GameObject equipWeapon;

 

 

 


 

✏️ 무기 교체 시 애니메이션 추가  

 

 

 

🔻 교체 시간차를 위한 플래그 로직 작성 

bool Swaping;

Update()에 SwapOut() 추가 

 

Move()에서 Swaping 중에는 Vector3가 0으로 

Jump()와 Dodge() 실행 조건에도 Swaping을 하지 않을 때 실행되도록 추가

 

 

 

🔻 점프나 이동에서 무기가 교체되지 않는 것을 확인할 수 있습니다 

 

 


 

✏️ 무기를 얻어야만 장착 가능 & 무기중복교체 불가 조건 

 

🔻 무기 중복 교체, 없는 무기 확인을 위한 조건 추가 

int equipWeaponIndex = -1;