Closed mrplcardoso closed 1 month ago
10/10
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class EnemyMovement : MonoBehaviour { private float Speed = 5f; private Vector3 inicialPosition; private float startTime;
public float distance => Vector3.Distance(inicialPosition, transform.localScale);
public readonly float MaxDistance = 8;
public readonly float MaxHeight = 8;
public readonly float MaxWidth = 8;
public delegate void DistanceReachedHandler();
public static event DistanceReachedHandler OnDistanceReached;
void Start()
{
inicialPosition = transform.localScale;
startTime = Time.time;
}
void Update()
{
// Aumenta a escala do inimigo
Vector3 newScale = transform.localScale + new Vector3(1, 1) * Speed * Time.deltaTime;
if (newScale.y > MaxHeight)
{
newScale.y = MaxHeight;
}
// Verifica se a nova scale ultrapassa a largura máxima
if (newScale.x > MaxWidth)
{
newScale.x = MaxWidth;
}
transform.localScale = newScale;
if (distance >= MaxDistance && Time.time - startTime >= 5f)
{
if (OnDistanceReached != null)
{
OnDistanceReached();
}
// Desabilita o aumento do inimigo na tela apos 5 segundos de atingir a altura máxima (revisar tempo balanceado depois)
enabled = false;
}
}
} (codigo ajustado para o PlayerDeath)
@Carrtz if (newScale.y > MaxHeight) { newScale.y = MaxHeight;
}
// Verifica se a nova scale ultrapassa a largura máxima
if (newScale.x > MaxWidth)
{
newScale.x = MaxWidth;
}
isso pode ser feito com Vector2.Clamp()
@Carrtz if (distance >= MaxDistance && Time.time - startTime >= 5f) { if (OnDistanceReached != null) { OnDistanceReached(); } // Desabilita o aumento do inimigo na tela apos 5 segundos de atingir a altura máxima (revisar tempo balanceado depois) enabled = false; } transforma essa parte em uma Coroutine/IEnumerator
Os inimigos não deslocam sua posição. A ilusão de movimento deve ser feita manipulando o tamanho dos objetos. Garantir que a ancoragem da Sprite está no centro do objeto.