픽업 아이템
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 17번째.
아이템은 자체 스크립트가 있는 트리거입니다. 무언가가 들어오면 아이템은 그것이 플레이어인지 확인하고, 효과를 전달한 뒤 자기 자신을 제거합니다. 플레이어의 스크립트는 결과를 저장하고 이를 위한 공개 메서드를 제공합니다. 이 체력 팩은 Health 스크립트가 있는 대상의 체력을 회복합니다:
// HealthPack.cs
public int amount = 25;
void OnTriggerEnter(Collider other)
{
if (other.TryGetComponent(out Health health) && health.hp < 100)
{
health.Heal(amount);
Destroy(gameObject);
}
}// Health.cs, 플레이어에 부착
public int hp = 50;
public void Heal(int amount)
{
hp = Mathf.Min(hp + amount, 100);
Debug.Log("HP: " + hp);
}other.TryGetComponent(out Health health)는 상자가 팩 안으로 미끄러져 들어오는 경우 false이므로, Health 스크립트가 있는 오브젝트만 팩을 획득할 수 있으며 체력이 가득 찬 플레이어는 나중에 사용할 수 있도록 팩을 남겨 둡니다. 팩은 other를 통해 플레이어를 찾으므로 팩마다 Inspector 참조가 필요하지 않고, 한 레벨에 팩을 50개 둘 수 있습니다. 다른 스크립트에서 Heal을 호출하므로 Heal은 public이며, 체력 상한인 100은 hp를 소유하는 유일한 곳인 Health에 설정되어 있습니다. Destroy(gameObject)는 팩을 제거하고, Destroy(other.gameObject)는 플레이어를 제거합니다.
챌린지
쉬움탄약 상자가 Blaster의 탄약을 보충하도록 만드세요(ammo 4, maxAmmo 10).
Blaster.cs에서public int AddAmmo(int amount)를 추가하세요:int taken = Mathf.Min(amount, maxAmmo - ammo);를 작성하고, 그 값을ammo에 더한 다음"Ammo: " + ammo를 로그에 출력하고taken을 반환하세요.AmmoCrate.cs에서other.TryGetComponent(out Blaster blaster)일 때blaster.AddAmmo(amount);와Destroy(gameObject);를 호출하세요.
‘플레이’를 누르고 오른쪽으로 걸어가세요. Console에 Ammo: 7, 다음으로 Ammo: 10이 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class AmmoCrate : MonoBehaviour
{
public int amount = 3;
void OnTriggerEnter(Collider other)
{
// 플레이어의 Blaster가 탄약을 가져가고, 상자는 사라진다
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드