Unity/Unity Study

[Unity] 개인 프로젝트 중, 자원 획득 및 오브젝트 파괴

Jee-U 2025. 3. 13. 21:47

 

아이템 설정도 해두었으니 이제는 자원에서 아이템을 획득하는 기능을 구현할 차례!

 

public class Resource : MonoBehaviour
{
    public ItemData itemToGive; 		// 아이템 데이터, 타격하면 주는 아이템 등
    public int quantityPerHit = 1;		// 타격할때 나오는 아이템 개수
    public int capacity;			// 타격 가능횟수

    public void Gather(Vector3 hitPoint, Vector3 hitNormal)
    {
        for (int i = 0; i < quantityPerHit; i++)
        {
            if (capacity <= 0) break;
            capacity -= 1;
            Instantiate(itemToGive.dropPrefab, hitPoint + Vector3.up, Quaternion.LookRotation(hitNormal, Vector3.up));
        }
        if (capacity <= 0)
        {
            Destroy(gameObject);
        }
    }
}

 

Gather() 메서드를 호출하면 특정 위치(hitPoint)에서 자원을 타격할 수 있다.

한번 타격할 때 quantityPerHit의 값만큼 아이템을 생성하고, capacity가 0이 되면 해당 자원 오브젝트를 제거한다.

 

다만 무기가 여러개이고 자원 채집이 가능한 무기로만 타격 시 아이템이 생성되는 식으로 해주었는데

 

public class EquipTool : Equip
{
	public bool doesGatherResources; 

    public void OnHit()
    {
    	// 광선이 attackDistance 내에서 오브젝트와 충돌하면 true 반환
        if (Physics.Raycast(ray, out hit, attackDistance))
        {
            if (doesGatherResources)
            {
                resource.Gather(hit.point, hit.normal);
            }
        }
    }
}

장비/무기쪽 스크립트에서 타격 시 자원채취가 가능한지 아닌지 Inspector에서 선택할 수 있게 해주었다.

그리하여 DoesGatherResources 값이 true인 무기로 공격해야지만 자원을 획득할 수 있으며, false인 무기로는 자원채집이 불가능해진다.

 

도끼 프리팹에 적용해준 EquipTool, 자원채집 가능

도끼는 DoseGatherResources 값이 true기 때문에 자원채집이 가능해진다.

 

사과나무에 적용해준 Resource 스크립트

사과나무에는 Resource 스크립트를 적용해주었으며 드랍하는 아이템으로는 사과, 5번 타격 시 사과나무는 없어지면서 자원은 총 5개 얻을 수 있게된다.

 

도끼장착 후 사과나무를 타격하면 사과 획득가능

타격하는 애니메이션이... 1인칭으로 해두어서 잘 안보이지만ㅜㅜ 타격할때마다 아이템이 떨어지는 모습이고, 5번 타격시 파괴되는 모습이다.

이렇게 자원획득까지 가능하게 완료!