카테고리 없음

유니티 3D 캐릭터에 장비 부착하는 법

이황충 2024. 6. 10. 23:46

유니티 게임개발캠프 TIL 36일차

 

유니티 에셋스토어에서 무료로 받을 수 있는 'Unity Chan'이라는 에셋을 이용해서 작업을 진행하고있다. 

이 캐릭터에다가 장비아이템을 착용시켜주고 싶어서 방법을 찾아본 결과 'GetBoneTransform(HumanBodyBones.RightHand)'이라는 걸 통해

해당 캐릭터의 손위치에 장비를 위치 시킬 수 있다는걸 알았다.

 

그래서 다음과 같이 장비를 장착하는 부분에 코드를 적용해 주었다.

public void EquipItem(ItemData item)
{
    if (item.itemPrefab != null)
    {
        Transform handTransform = CharacterManager.Instance.Player.controller.animator.GetBoneTransform(HumanBodyBones.RightHand);
        GameObject equippedItem = Instantiate(item.itemPrefab, handTransform);
                  
        // 부모 설정 (로컬 트랜스폼 유지)
        equippedItem.transform.SetParent(handTransform, false);

        CharacterManager.Instance.Player.controller.SetEquippedItem(equippedItem);

        EquipTool equipTool = equippedItem.GetComponent<EquipTool>();
        if (equipTool != null)
        {
            CharacterManager.Instance.Player.status.EquipItem(equipTool);
        }
    }
}

 

이런식으로 해주고 실행해보니 

 

장착은 됐는데 검이 땅에 떨어져 있었다.

원인을 파악해 본 결과 해당 아이템에 Rigidbody 컴포넌트가 붙어 있어서 그랬던거였다.

Rigdbody 컴포넌트를 제거하고 실행해보니 

 

일단 손에 붙어있다. 그런데 보다시피 검이 반대로 들려있다. 그래서 해당 아이템 프리펩에 로테이션X값을 180을 적어줘서 반대로 뒤집어 주었다.

 

문제 없이 잘 붙어있는것같다.

 

이렇게 공격시에도 잘 따라오는걸 확인할 수 있다. 

 

복잡해 보였지만 생각보다 쉽게 문제가 해결된 것 같다.