유니티/AA(3D 쿼터뷰 액션 게임)

AA(8) - 드랍 무기 입수&착용

무직백수취업준비생 2021. 9. 10. 03:22
728x90
반응형
    GameObject nearObject;

    void OnTriggerStay(Collider other)
    {
        if (other.tag == "Weapon")
            nearObject = other.gameObject;

        Debug.Log(nearObject.name);
        
    }
    void OnTriggerExit(Collider other)
    {
        if (other.tag == "Weapon")
            nearObject = null;
    }
}

무기 태그를 지닌 오브젝트를 감지하도록 스크립트를 추가합니다.

 

이제부턴 스크립트 전문이 너무 긴 관계로 추가되는 내용만 기록합니다.

 

콘솔창을 통해 정상적으로 감지되고 있음을 확인할 수 있습니다.

 

public class Player : MonoBehaviour
{
    bool iDown;
    void GetInput()
    {
        iDown = Input.GetButtonDown("Interation");
    }

 

무기 획득을 위해 무기 줍기 키를 추가해줍니다.

 

무기 입수는 "E"를 입력해 진행하겠습니다.

 

    public GameObject[] weapons;
    public bool[] hasWeapons;

    void Interation()
    {
        if(iDown && nearObject != null && !isJump && !isDodge)
        {
            if(nearObject.tag == "Weapon")
            {
                Item item = nearObject.GetComponent<Item>();
                int weaponIndex = item.value;
                hasWeapons[weaponIndex] = true;

                Destroy(nearObject);
            }
        }
    }

무기 입수를 입력하면 value값을 통해 무기를 hasWeapons에 저장하고 입수된 무기 오브젝트는 파괴합니다.

 

회피 동작과 점프 중엔 입수하지 못하도록 했습니다.

 

유니티에서 플레이어에 들어간 스크립트에서 hasWeapons에 자리를 만들어줍니다.

 

수류탄을 입수하고 정상적으로 Element3이 체크된 것을 확인할 수 있습니다.

 

입수한 무기를 착용하기 위해 프리팹의 무기 오브젝트들을 손 위치에 자식으로 넣어줍니다.

 

그러나 이 방법으로 했을 때 캐릭터 이동에 따라 무기 오브젝트가 따라오긴 하지만 

 

idle이나 뛰기 구르기 등 애니메이션에 따른 손 위치 변경에는 무기 오브젝트가 따라오지 못했습니다.

 

오른손의 mesh 좌표는 애니메이션에 따라 움직이지 않기 때문입니다.

 

캐릭터의 본 세팅에서 오른손 본에 무기를 할당함으로써 해당 문제를 해결했습니다.

 

    void Swap()
    {
        int weaponIndex = -1;
        if (sDown1) weaponIndex = 0;
        if (sDown2) weaponIndex = 1;
        if (sDown3) weaponIndex = 2;

        if ((sDown1 || sDown2 || sDown3) && !isJump && !isDodge)
        {
            weapons[weaponIndex].SetActive(true);
        }
    }

착용하는 무기의 종류가 세가지 이므로 무기 종류에 따라 키 입력을 다르게 설정해줍니다.

 

"1", "2", "3"번 키를 입력해 해당 키에 지정돼있는 무기를 꺼내 착용할 수 있습니다.

 

그러나 지금상태에선 1번 무기를 꺼낸상태에서 중복으로 2번 무기가 꺼내지고

 

오브젝트또한 겹쳐서 출력되게 됩니다.

 

    GameObject equipWeapon; 
   void Swap()
    {
        int weaponIndex = -1;
        if (sDown1) weaponIndex = 0;
        if (sDown2) weaponIndex = 1;
        if (sDown3) weaponIndex = 2;

        if ((sDown1 || sDown2 || sDown3) && !isJump && !isDodge)
        {
            if(equipWeapon != null)
            equipWeapon.SetActive(false);
            equipWeapon = weapons[weaponIndex];
            equipWeapon.SetActive(true);
        }
    }

장착된 무기가 있는지 여부를 확인하고 교체함으로써 무기가 겹치지 않고 출력되게 스크립트를 추가합니다.

 

다음엔 무기 교체시의 애니메이션을 추가하겠습니다.

728x90
반응형