101 lines
2.5 KiB
C#
101 lines
2.5 KiB
C#
using UnityEngine;
|
|
|
|
namespace Crosstales.Radio.Demo.Util
|
|
{
|
|
[HelpURLAttribute("https://www.crosstales.com/media/data/assets/radio/api/class_crosstales_1_1_radio_1_1_demo_1_1_util_1_1_orbit.html")]
|
|
public class Orbit : MonoBehaviour
|
|
{
|
|
public Transform Target;
|
|
|
|
public bool RotateX;
|
|
|
|
public bool RotateY = true;
|
|
|
|
public bool RotateZ;
|
|
|
|
public Vector3 Speed = Vector3.zero;
|
|
|
|
public Vector3 ChangeTimeMin = Vector3.zero;
|
|
|
|
public Vector3 ChangeTime = Vector3.zero;
|
|
|
|
private float speedX;
|
|
|
|
private float speedY;
|
|
|
|
private float speedZ;
|
|
|
|
private float changeTimeX;
|
|
|
|
private float changeTimeY;
|
|
|
|
private float changeTimeZ;
|
|
|
|
private float elapsedTimeX;
|
|
|
|
private float elapsedTimeY;
|
|
|
|
private float elapsedTimeZ;
|
|
|
|
public void Start()
|
|
{
|
|
if (RotateX)
|
|
{
|
|
changeTimeX = Random.Range(ChangeTimeMin.x, Mathf.Abs(ChangeTime.x));
|
|
speedX = Random.Range(0f - Mathf.Abs(Speed.x), Mathf.Abs(Speed.x));
|
|
}
|
|
if (RotateY)
|
|
{
|
|
changeTimeY = Random.Range(ChangeTimeMin.y, Mathf.Abs(ChangeTime.y));
|
|
speedY = Random.Range(0f - Mathf.Abs(Speed.y), Mathf.Abs(Speed.y));
|
|
}
|
|
if (RotateZ)
|
|
{
|
|
changeTimeZ = Random.Range(ChangeTimeMin.z, Mathf.Abs(ChangeTime.z));
|
|
speedZ = Random.Range(0f - Mathf.Abs(Speed.z), Mathf.Abs(Speed.z));
|
|
}
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (!(Target != null))
|
|
{
|
|
return;
|
|
}
|
|
if (RotateX)
|
|
{
|
|
elapsedTimeX += Time.deltaTime;
|
|
if (elapsedTimeX > changeTimeX)
|
|
{
|
|
speedX = Random.Range(0f - Mathf.Abs(Speed.x), Mathf.Abs(Speed.x) + 1f);
|
|
elapsedTimeX = 0f;
|
|
changeTimeX = Random.Range(Mathf.Abs(ChangeTimeMin.x), Mathf.Abs(ChangeTime.x));
|
|
}
|
|
base.transform.RotateAround(Target.position, Vector3.right, speedX * Time.deltaTime);
|
|
}
|
|
if (RotateY)
|
|
{
|
|
elapsedTimeY += Time.deltaTime;
|
|
if (elapsedTimeY > changeTimeY)
|
|
{
|
|
speedY = Random.Range(0f - Mathf.Abs(Speed.y), Mathf.Abs(Speed.y) + 1f);
|
|
elapsedTimeY = 0f;
|
|
changeTimeY = Random.Range(Mathf.Abs(ChangeTimeMin.y), Mathf.Abs(ChangeTime.y));
|
|
}
|
|
base.transform.RotateAround(Target.position, Vector3.up, speedY * Time.deltaTime);
|
|
}
|
|
if (RotateZ)
|
|
{
|
|
elapsedTimeZ += Time.deltaTime;
|
|
if (elapsedTimeZ > changeTimeZ)
|
|
{
|
|
speedZ = Random.Range(0f - Mathf.Abs(Speed.z), Mathf.Abs(Speed.z) + 1f);
|
|
elapsedTimeZ = 0f;
|
|
changeTimeZ = Random.Range(Mathf.Abs(ChangeTimeMin.z), Mathf.Abs(ChangeTime.z));
|
|
}
|
|
base.transform.RotateAround(Target.position, Vector3.back, speedZ * Time.deltaTime);
|
|
}
|
|
}
|
|
}
|
|
}
|