Unity_lab3/Unity3_lab/Assets/Scripts/SpikeTrap.cs

68 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.Collections;
public class SpikeTrap : MonoBehaviour
{
[Header("Настройки Движения")]
[SerializeField] private float spikeHeight = 1.5f; // Насколько шипы вылезают вверх
[SerializeField] private float moveSpeed = 2f; // Скорость выдвижения
[SerializeField] private float waitUpTime = 2f; // Сколько ждать наверху
[SerializeField] private float waitDownTime = 2f; // Сколько ждать внизу
[SerializeField] private float startDelay = 0f; // Задержка старта (для рассинхрона)
private Vector3 hiddenPos; // Спрятанная позиция
private Vector3 activePos; // Позиция атаки
void Start()
{
// Запоминаем локальные позиции.
// Важно использовать localPosition, чтобы шипы ездили ВМЕСТЕ с платформой
hiddenPos = transform.localPosition;
activePos = hiddenPos + Vector3.up * spikeHeight;
StartCoroutine(SpikeRoutine());
}
private IEnumerator SpikeRoutine()
{
// Начальная задержка
yield return new WaitForSeconds(startDelay);
while (true)
{
// 1. Движение ВВЕРХ (Атака)
while (Vector3.Distance(transform.localPosition, activePos) > 0.01f)
{
transform.localPosition = Vector3.MoveTowards(transform.localPosition, activePos, moveSpeed * Time.deltaTime);
yield return null;
}
transform.localPosition = activePos;
// Ждем наверху
yield return new WaitForSeconds(waitUpTime);
// 2. Движение ВНИЗ (Спрятаться)
while (Vector3.Distance(transform.localPosition, hiddenPos) > 0.01f)
{
transform.localPosition = Vector3.MoveTowards(transform.localPosition, hiddenPos, moveSpeed * Time.deltaTime);
yield return null;
}
transform.localPosition = hiddenPos;
// Ждем внизу
yield return new WaitForSeconds(waitDownTime);
}
}
// Логика убийства
private void OnCollisionEnter(Collision collision)
{
// Проверяем, есть ли у объекта скрипт BallController
BallController player = collision.gameObject.GetComponent<BallController>();
if (player != null)
{
player.GameOver(); // Вызываем метод проигрыша, который мы добавили выше
}
}
}