Files
2026-02-21 16:45:37 +08:00

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);
}
}
}
}