아이템 획득
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 17번째.
아이템 획득 오브젝트는 자체 스크립트가 있는 트리거입니다. 무언가가 들어오면 아이템 획득 오브젝트는 그것이 플레이어인지 확인하고, 효과를 전달한 다음 자신을 파괴합니다. 플레이어의 스크립트는 결과를 보관하고 이를 위한 public 메서드를 제공합니다. 이 체력 팩은 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을 호출하므로 public이며, 체력 상한인 100은 hp를 관리하는 단 하나의 곳인 Health에 설정되어 있습니다. Destroy(gameObject)는 팩을 제거합니다. Destroy(other.gameObject)를 사용하면 플레이어가 제거됩니다.
챌린지
쉬움플레이어는 Blaster를 가지고 있습니다. 여기에는 ammo(시작 시 4)와 maxAmmo(10)가 있습니다. 화살표 키로 이동하고 Space로 발사하며, 두 값 모두 기록됩니다. 탄약 상자에서 탄약을 보충하도록 만드세요:
Blaster.cs에서 공개 메서드int AddAmmo(int amount)를 추가하세요.amount중maxAmmo를 넘지 않는 만큼 가져오고,Ammo: 7과 같은 새 총량을 기록한 다음 가져온 양을 반환합니다.AmmoCrate.cs에서 플레이어가 상자에 들어오면 상자의amount를 Blaster에 제공하고 가져간 양만큼 빼세요. 비어 있는 상자는 제거하고, 탄약이 남아 있는 상자는 남은 양을 유지한 채 다음에 방문할 때까지 그대로 둡니다.
첫 번째 상자에는 3, 두 번째 상자에는 5가 들어 있습니다. Play를 누르고 오른쪽으로 걸어가 몇 발 발사한 다음 두 번째 상자로 돌아가 들어가고, Check를 누르세요.
직접 해보기
using UnityEngine;
public class AmmoCrate : MonoBehaviour
{
public int amount = 3;
void OnTriggerEnter(Collider other)
{
// 플레이어의 Blaster는 담을 수 있는 만큼 가져가고, 상자는 나머지를 보관하다가 비면 사라진다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.