Menu
CoddyTech

발사

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 9번째.

타워는 초당 fireRate회 목표물을 향해 발사합니다. 카운트다운하는 타이머 대신, 타워는 다음 발사 시각을 기억합니다. Time.time이 그 시각에 도달하면 타워는 발사하고 다음 발사 시각을 1f / fireRate초 뒤로 옮깁니다. 초당 두 번 물을 뿌리는 스프링클러의 예입니다.

if (Time.time >= nextSpray)
{
    Spray();
    nextSpray = Time.time + 1f / spraysPerSecond;
}

각 발사체는 목표물까지 날아가는 Projectile이며, 목표물이 걸어가는 동안 MoveTowards로 따라가다가 도착하면 피해를 줍니다. 발사체는 자신이 Enemy를 명중했는지 알 필요가 없습니다. 인터페이스 챕터에서처럼, 피해를 입을 수 있는 모든 대상이 구현하는 인터페이스인 IDamageable을 목표물에 요청하므로 이를 구현한 대상이라면 무엇이든 쏠 수 있습니다.

발사체가 날아가는 도중 다른 타워의 발사에 맞아 목표물이 죽을 수 있습니다. 그러면 목표물의 target은 파괴된 모든 Unity 객체와 마찬가지로 null과 같아지고, 발사체가 더는 날아갈 곳이 없으므로 스스로 파괴됩니다.

challenge icon

챌린지

중급
  1. IDamageable는 void TakeDamage(int amount)를 선언합니다. Enemy가 이를 구현하도록 하세요. amount만큼 체력이 감소하고, 체력이 0 이하가 되면 적이 파괴됩니다.
  2. Projectile에 직렬화된 float speed(프리팹에서 12로 설정)와 public void Launch(Transform target, int damage)를 추가하세요. 이 메서드는 두 값을 모두 유지합니다. Update에서 speed로 대상을 향해 날아가고, 도착하면 대상의 IDamageable에 TakeDamage(damage)를 호출한 뒤 발사체를 파괴하세요. 대상이 사라지면 발사체를 파괴하세요.
  3. Tower에 public int damage, public float fireRate(초당 발사 횟수), 그리고 직렬화된 projectilePrefab(Projectile)을 추가하세요. 타워가 대상을 조준하고 있는 동안 초당 최대 fireRate회 발사하세요. 발사체를 머리 앞쪽, head.position + head.forward * 0.6f 위치에 인스턴스화하고 타워의 damage를 사용해 대상에게 발사하세요.

ArrowTower 프리팹은 damage를 2, fireRate를 1.5로 설정하며, 발사체는 ArrowShot입니다. Play를 누르고 타워를 건설해 첫 번째 웨이브를 막은 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

// 나중에 구현할 내용: 타워에서 목표물을 향해 날아가는 탄환.
public class Projectile : MonoBehaviour
{
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨