개인개발기록/게임개발프로젝트

2025_04_14_플랫포머_게임개발_연습_프로젝트

pop2bubbledev 2025. 4. 15. 00:09

#오늘 한 작업

Unity 3D

무기 상호작용 및 변경

01. 오브젝트 감지

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

    //Debug.Log(nearObject.name);
}

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

OnTriggerStay  : Trigger 가 충돌중이라면 Collider 의  정보를 매개변수로 받아온다.

OnTriggerExit   : Trigger 의 충돌이 끝나면 Collider 의 정보를 매개변수로 받아온다.

 

Trigger 가 설정되어있는 무기 오브젝트

충돌시 OnTriggerStay 함수가 호출된다

게임 뷰 && 씬 뷰

02. 무기입수

무기와 상호작용하여 무기를 캐릭터가 얻어갈수 있도록 한다.

 

게임 내 상호작용을 담당하는 키로 InputManager 에서 e 버튼으로 할당해주었다.

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);
        }
    }
}

Interation 키 작동시 불려와지는 함수이다 

if ( iDown(bool값) 이 true 라면 && 근처 오브젝트(OnTriggerStay 에 담겨있는 오브젝트) 가 null 이 아니라면 && 점프 혹은 회피중이 아니라면 )

또한 if 근처 오브젝트 tag 가 Weapon 이라면 Item 의 value 를 불러와 weaponIndex에 담고 현재 weapon 의 bool 값을 true로 바꾼다

 

03. 무기장착 && 04. 무기 교체

Scene View 에서 무기의 Prefab 을 Player 의 Right Hand 에 할당시켜준다 그 후

InputManager 에서 Swap1~3 을 1 / 2 / 3 으로 할당해준다

 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);

     equipWeaponIndex = weaponIndex;
     equipWeapon = weapons[weaponIndex];
     equipWeapon.SetActive(true);
 }

평소엔 비활성화 상태로 두고 

각 버튼을 누를시 호출해 오브젝트를 활성화 비활성화 상태로 변경한다 
만약 무기를 상호작용으로 얻지 못하였다면

        if (sDown1 && (!hasWeapons[0] || equipWeaponIndex == 0)) return;

 

예시와 같은 함수를 이용해 return 시킨다.

Swap 애니메이션의 지정과 bool 값을 추가해 이동 Vec 고정

if(isSwap) moveVec = Vector3.zero;  //Swap 도중 이동 Vec 고정

 

#작업중 변경(수정) 사항

해당 없음

#예상시간/실제시간

1시간 30분 (08시 시작) / 2시간40분 ( 10시 40분 마무리 )

※단 새로운 팀원의 업무 도움을 위해 1시간정도 작업을 거의 진행하지 못하였음

#작업중 애로사항

Player 의 손에 각종 무기(Object)를 고정시키면 고정값으로 인하여 Player가 계속 밀려나고

혹은 Player 가 이동시 Object는 위치를 가지지못하고 날아갔다.

이 문제를 고민하던중 Rigidbody 를 컴포넌트로 가지고있어 플레이어와 충돌한다고 생각하였고

Is Kinematic 이 꺼져있음을 인지하여 활성화 해주고 Trriger 가아닌 Collider 를 제거하였다 (해결)

#예상되는 애로사항

다음 강의는 아이템획득 과 캐릭터 기반 공전시키기이다

오늘 있었던 애로사항과 동일하게 Rigidbody를 가진 공전물이 Player 와 충돌하여 날아가는사항

(항상 Prefab 사용시 Rigidbody 와 Collider 확인하기)

#지난주 애로사항

해당 없음