Pun-01/Assets/Photon/PhotonUnityNetworking/Demos/PunBasics-Tutorial/Scripts/LoaderAnime.cs

101 lines
3.0 KiB
C#
Raw Permalink Normal View History

2022-07-08 09:14:55 +08:00
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Launcher.cs" company="Exit Games GmbH">
// Part of: Photon Unity Networking Demos
// </copyright>
// <summary>
// Used in PUN Basics Tutorial to connect, and join/create room automatically
// </summary>
// <author>developer@exitgames.com</author>
// --------------------------------------------------------------------------------------------------------------------
using UnityEngine;
namespace Photon.Pun.Demo.PunBasics
{
/// <summary>
/// Simple behaviour to animate particles around to create a typical "Ajax Loader". this is actually very important to visual inform the user that something is happening
/// or better say that the application is not frozen, so a animation of some sort helps reassuring the user that the system is idle and well.
///
/// TODO: hide when connection failed.
///
/// </summary>
public class LoaderAnime : MonoBehaviour {
#region Public Variables
[Tooltip("Angular Speed in degrees per seconds")]
public float speed = 180f;
[Tooltip("Radius os the loader")]
public float radius = 1f;
public GameObject particles;
#endregion
#region Private Variables
Vector3 _offset;
Transform _transform;
Transform _particleTransform;
bool _isAnimating;
#endregion
#region MonoBehaviour CallBacks
/// <summary>
/// MonoBehaviour method called on GameObject by Unity during early initialization phase.
/// </summary>
void Awake()
{
// cache for efficiency
_particleTransform =particles.GetComponent<Transform>();
_transform = GetComponent<Transform>();
}
/// <summary>
/// MonoBehaviour method called on GameObject by Unity on every frame.
/// </summary>
void Update () {
// only care about rotating particles if we are animating
if (_isAnimating)
{
// we rotate over time. Time.deltaTime is mandatory to have a frame rate independant animation,
_transform.Rotate(0f,0f,speed*Time.deltaTime);
// we move from the center to the desired radius to prevent the visual artifacts of particles jumping from their current spot, it's not very nice visually
// so the particle is centered in the scene so that when it starts rotating, it doesn't jump and slowy we animate it to its final radius giving a smooth transition.
_particleTransform.localPosition = Vector3.MoveTowards(_particleTransform.localPosition, _offset, 0.5f*Time.deltaTime);
}
}
#endregion
#region Public Methods
/// <summary>
/// Starts the loader animation. Becomes visible
/// </summary>
public void StartLoaderAnimation()
{
_isAnimating = true;
_offset = new Vector3(radius,0f,0f);
particles.SetActive(true);
}
/// <summary>
/// Stops the loader animation. Becomes invisible
/// </summary>
public void StopLoaderAnimation()
{
particles.SetActive(false);
}
#endregion
}
}