52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
namespace Mirror.Examples.TopDownShooter
|
|
{
|
|
public class RespawnPortal : MonoBehaviour
|
|
{
|
|
public float rotationSpeed = 360f; // Degrees per second
|
|
public float shrinkDuration = 1f; // Time in seconds to shrink to zero
|
|
public AudioSource soundEffect;
|
|
|
|
private Vector3 originalScale;
|
|
private float shrinkTimer;
|
|
|
|
#if !UNITY_SERVER
|
|
void Awake()
|
|
{
|
|
// Store the original setup
|
|
originalScale = transform.localScale;
|
|
shrinkTimer = shrinkDuration;
|
|
}
|
|
|
|
void OnEnable()
|
|
{
|
|
// By using OnEnable, it shortcuts the function to be called automatically when gameobject is SetActive false/true.
|
|
// Here we reset variables, and then call the Portal respawn effect
|
|
transform.localScale = originalScale;
|
|
shrinkTimer = shrinkDuration;
|
|
|
|
StartCoroutine(StartEffect());
|
|
}
|
|
|
|
IEnumerator StartEffect()
|
|
{
|
|
soundEffect.Play();
|
|
while (shrinkTimer > 0)
|
|
{
|
|
transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime);
|
|
|
|
if (shrinkTimer > 0)
|
|
{
|
|
shrinkTimer -= Time.deltaTime;
|
|
float scale = Mathf.Clamp01(shrinkTimer / shrinkDuration);
|
|
transform.localScale = originalScale * scale;
|
|
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
} |