서리
Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 15번째.
Frost 타워는 피해를 거의 주지 않지만, 파편은 적을 잠시 느리게 합니다. 감속은 적 한 명의 상태이며, 끝나는 시점이 있습니다. 적은 감속이 풀리는 배율과 시간을 보관하고, 매 프레임 에셋의 속도를 기준으로 자신의 속도를 계산합니다. Time.time이 종료 시점보다 이전인 동안에는 배율이 적용되고, 그 이후에는 되돌릴 것이 없으므로 적은 원래 속도로 돌아옵니다. 부스트 패드 위를 달리는 자동차의 예입니다:
public void Boost(float multiplier, float seconds)
{
boost = multiplier;
boostUntil = Time.time + seconds;
}float speed = data.topSpeed;
if (Time.time < boostUntil)
{
speed *= boost;
}감속 효과를 에셋에 기록해서는 절대 안 됩니다. data.speed *= 0.5f를 사용하면 아직 생성되지 않은 적까지 포함해 해당 종류의 모든 적이 느려지고, 속도를 원래대로 되돌릴 방법도 없습니다. 감속된 적에게 두 번째 파편이 명중하면 배율과 종료 시점이 다시 설정됩니다. 따라서 Frost 타워가 계속 명중하는 동안 감속이 유지되지만, 감속 효과가 더 강해지지는 않습니다.
챌린지
중급TowerData에서 공개 float인slowFactor(기본값 1: 감속 없음)와slowDuration(기본값 0)을 추가합니다. FrostData는 각각 0.5와 2로 설정합니다.Enemy에 감속 계수와 감속이 끝나는 시간을 저장하는public void Slow(float factor, float duration)을 추가합니다. 감속이 지속되는 동안 매 프레임 적은 에셋의 속도에 계수를 곱한 속도로 이동합니다.Projectile에서 피해를 준 후, 데이터의slowDuration이 0보다 크고 대상에 Enemy가 있으면 데이터의 계수와 지속 시간으로 감속시킵니다.
Frost 타워는 상점에 있으며, FrostData 에셋과 FrostShard 발사체가 준비되어 있습니다. Play를 누르고, Arrows 앞에 Frost 타워를 배치한 다음 Check를 누릅니다.
직접 해보기
using System;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour, IDamageable
{
public static readonly List<Enemy> All = new List<Enemy>();
public static event Action<Enemy> ReachedBase;
public static event Action<Enemy> Killed;
public EnemyData data;
public Transform[] waypoints;
private int next = 1;
private int health;
void Awake()
{
health = data.maxHealth;
}
void OnEnable()
{
All.Add(this);
}
void OnDisable()
{
All.Remove(this);
}
void Update()
{
Vector3 target = waypoints[next].position;
transform.position = Vector3.MoveTowards(transform.position, target, data.speed * Time.deltaTime);
if (transform.position == target)
{
next++;
if (next == waypoints.Length)
{
ReachedBase?.Invoke(this);
Destroy(gameObject);
}
}
}
public void TakeDamage(int amount)
{
if (health <= 0)
{
return;
}
health -= amount;
if (health <= 0)
{
Killed?.Invoke(this);
Destroy(gameObject);
}
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.