using UnityEngine;
public static class CircleUtil
{
<summary>
</summary>
public static Vector2 GetCirclePosition(float angle, float radius)
{
return GetCirclePosition(angle, radius, radius);
}
<summary>
</summary>
public static Vector2 GetCirclePosition(float angle, float radiusX, float radiusY)
{
return new Vector2(Mathf.Cos(angle * Mathf.Deg2Rad) * radiusX, Mathf.Sin(angle * Mathf.Deg2Rad) * radiusY);
}
}
サンプル1
using UnityEngine;
public class SampleMonoBehaviour : MonoBehaviour
{
[SerializeField]
private Transform _center;
[SerializeField]
private Transform _target;
[SerializeField, Range(0, 360)]
private float _angle;
[SerializeField]
private float _radius = 1f;
private void OnValidate()
{
if (_center == null || _target == null)
return;
var pos = CircleUtil.GetCirclePosition(_angle, _radius);
var cpos = _center.transform.position;
cpos.x += pos.x;
cpos.y += pos.y;
_target.transform.position = cpos;
}
}
サンプル2
using UnityEngine;
public class SampleMonoBehaviour : MonoBehaviour
{
[SerializeField]
private Transform _center;
[SerializeField]
private Transform _target;
[SerializeField, Range(0, 360)]
private float _angle;
[SerializeField]
private float _radiusX = 1f;
[SerializeField]
private float _radiusY = 1f;
private void OnValidate()
{
if (_center == null || _target == null)
return;
var pos = CircleUtil.GetCirclePosition(_angle, _radiusX, _radiusY);
var cpos = _center.transform.position;
cpos.x += pos.x;
cpos.y += pos.y;
_target.transform.position = cpos;
}
}