인텔리킴의 Unity Studying & Game Analysis
40. 3D 쿼터뷰 게임 제작 - 드랍 무기 입수 본문
오브젝트 감지
void OnTriggerEnter(Collider other)
{
if (other.tag == "Weapon")
nearObject = other.gameObject;
Debug.Log(nearObject.gameObject.name);
}
간단한 트리거 함수 작성
상호작용 키 따로 작성
void OnTriggerEnter(Collider other)
{
if (other.tag == "Weapon")
nearObject = other.gameObject;
Debug.Log(nearObject.gameObject.name);
}
트리거 함수를 통해 근처에 'Weapon'이라는 태그를 가진 오브젝트가 있다면
그 오브젝트를 변수에 저장함
void OnInteract()
{
if(nearObject != null && !isJumping && !isDodge)
{
if(nearObject.tag == "Weapon")
{
Item item = nearObject.GetComponent<Item>();
int weaponIndex = item.value;
hasWeapons[weaponIndex] = true;
Destroy(nearObject);
}
}
}
특정 조건을 만족할때 근처 오브젝트의 태그가 'Weapon'이면
아이템을 hasWeapons 배열의 인자로 저장하고 아이템 제거
플레이어에게 무기 장착
플레이어에게 무기를 건내줄 위치 정함
실린더를 배치해 플레이어에게 무기를 배치할 위치 지정
오른손에 무기 배치해놓음
배치한 무기 할당
인풋 매니저에서 버튼 할당
void OnSwap1()
{
Swap(0);
}
void OnSwap2()
{
Swap(1);
}
void OnSwap3()
{
Swap(2);
}
void Swap(int i)
{
if(!isDodge && !isJumping && hasWeapons[i] == true)
{
weapons[i].SetActive(true);
}
}
각 버튼함수가 int 불러오도록하고
Swap함수에서 아이템을 획득했을 경우 true로 함
무기 획득하면 활성화됨
하지만 여러 무기 휙득하면 무기가 중복으로 착용된다는 문제가 있음
void Swap(int i)
{
if(!isDodge && !isJumping && hasWeapons[i] == true)
{
//빈손이 아니라면 먼저 처음 가지고 있는 무기 비활성화
if(equipWeapon != null)
equipWeapon.SetActive(false);
equipWeapon = weapons[i];
weapons[i].SetActive(true);
}
}
먼저 손에 들고 있는 무기를 비활성화해서 해결
빈손일 경우에는 null 에러가 날 수 있기 때문에 null 체크를 먼저 해줌
무기 변경 애니메이션 추가
animator.SetTrigger("doSwap");
코드를 추가해 액션 추가
void Swap(int i)
{
if(!isDodge && !isJumping && hasWeapons[i] == true)
{
//빈손이 아니라면 먼저 처음 가지고 있는 무기 비활성화
if(equipWeapon != null)
equipWeapon.SetActive(false);
equipWeapon = weapons[i];
weapons[i].SetActive(true);
isSwap = true;
animator.SetTrigger("doSwap");
Invoke("SwapOut", 0.8f);
}
}
void SwapOut()
{
isSwap = false;
}
마지막으로 플래그를 이용해 무기 교체 중엔 다른 행동 못하도록 함
int equipWeaponIndex = -1;
void Swap(int i)
{
if (equipWeaponIndex == i)
return;
if(!isDodge && !isJumping && hasWeapons[i] == true)
{
//빈손이 아니라면 먼저 처음 가지고 있는 무기 비활성화
if(equipWeapon != null)
equipWeapon.SetActive(false);
equipWeaponIndex = i;
equipWeapon = weapons[i];
weapons[i].SetActive(true);
isSwap = true;
animator.SetTrigger("doSwap");
Invoke("SwapOut", 0.5f);
}
}
장착된 무기를 다시 중복해서 불러오는것도 막음
'게임 개발 일지 > 유니티 엔진 공부' 카테고리의 다른 글
39. 3D 쿼터뷰 게임 제작 - 아이템 만들기 (0) | 2024.06.21 |
---|---|
38. 3D 쿼터뷰 게임 제작 - 플레이어 점프 회피 (0) | 2024.06.20 |
37. 3D 쿼터뷰 게임 제작 - 플레이어 이동 (1) | 2024.06.18 |
35. 메인 메뉴 제작 - 옵션 (1) (0) | 2024.06.13 |
34. 유니티 2D 종스크롤 슈팅 - 보스 구현 (1) | 2024.06.11 |