아이템 설정도 해두었으니 이제는 자원에서 아이템을 획득하는 기능을 구현할 차례!
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인 무기로는 자원채집이 불가능해진다.
도끼는 DoseGatherResources 값이 true기 때문에 자원채집이 가능해진다.
사과나무에는 Resource 스크립트를 적용해주었으며 드랍하는 아이템으로는 사과, 5번 타격 시 사과나무는 없어지면서 자원은 총 5개 얻을 수 있게된다.
타격하는 애니메이션이... 1인칭으로 해두어서 잘 안보이지만ㅜㅜ 타격할때마다 아이템이 떨어지는 모습이고, 5번 타격시 파괴되는 모습이다.
이렇게 자원획득까지 가능하게 완료!
'Unity > Unity Study' 카테고리의 다른 글
[Unity] 3D Surviver 팀 프로젝트 중, 스탯 부분 리팩토링 (0) | 2025.03.18 |
---|---|
[Unity] 3D Surviver 팀 프로젝트 중, 다른 타입으로 발생한 null (0) | 2025.03.14 |
[Unity] 개인 프로젝트 중, ScriptableObject 를 활용한 아이템 설정 (0) | 2025.03.12 |
[Unity] 개인 프로젝트 중, 키 입력 시 이미지 띄우기 (0) | 2025.03.11 |
[Unity] 쿠키런 모작 팀 프로젝트 중, Map 제작 (0) | 2025.03.04 |