80 lines
1.7 KiB
C#
80 lines
1.7 KiB
C#
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI.Extensions;
|
|||
|
|
|||
|
[RequireComponent(typeof(UILineRenderer))]
|
|||
|
public class LineRendererOrbit : MonoBehaviour {
|
|||
|
|
|||
|
|
|||
|
UILineRenderer lr;
|
|||
|
Circle circle;
|
|||
|
public GameObject OrbitGO;
|
|||
|
RectTransform orbitGOrt;
|
|||
|
float orbitTime;
|
|||
|
|
|||
|
[SerializeField]
|
|||
|
private float _xAxis = 3;
|
|||
|
|
|||
|
public float xAxis
|
|||
|
{
|
|||
|
get { return _xAxis; }
|
|||
|
set { _xAxis = value; GenerateOrbit(); }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField]
|
|||
|
private float _yAxis = 3;
|
|||
|
|
|||
|
public float yAxis
|
|||
|
{
|
|||
|
get { return _yAxis; }
|
|||
|
set { _yAxis = value; GenerateOrbit(); }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField]
|
|||
|
private int _steps = 10;
|
|||
|
|
|||
|
public int Steps
|
|||
|
{
|
|||
|
get { return _steps; }
|
|||
|
set { _steps = value; GenerateOrbit(); }
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Use this for initialization
|
|||
|
void Awake () {
|
|||
|
lr = GetComponent<UILineRenderer>();
|
|||
|
orbitGOrt = OrbitGO.GetComponent<RectTransform>();
|
|||
|
GenerateOrbit();
|
|||
|
}
|
|||
|
|
|||
|
// Update is called once per frame
|
|||
|
void Update () {
|
|||
|
orbitTime = orbitTime > _steps ? orbitTime = 0 : orbitTime + Time.deltaTime;
|
|||
|
orbitGOrt.localPosition = circle.Evaluate(orbitTime);
|
|||
|
}
|
|||
|
|
|||
|
void GenerateOrbit()
|
|||
|
{
|
|||
|
circle = new Circle(xAxis: _xAxis,yAxis: _yAxis, steps: _steps);
|
|||
|
List<Vector2> Points = new List<Vector2>();
|
|||
|
for (int i = 0; i < _steps; i++)
|
|||
|
{
|
|||
|
Points.Add(circle.Evaluate(i));
|
|||
|
}
|
|||
|
Points.Add(circle.Evaluate(0));
|
|||
|
lr.Points = Points.ToArray();
|
|||
|
}
|
|||
|
|
|||
|
private void OnValidate()
|
|||
|
{
|
|||
|
if (lr != null)
|
|||
|
{
|
|||
|
GenerateOrbit();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|