aha
This commit is contained in:
@ -0,0 +1,52 @@
|
||||
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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user