공전하는 오브젝트를 구현하기 위해
가로 반지름, 세로 반지름, 각도, 속도, 기준이 되는 주체가 필요하다
spheres = new GameObject[count];
for (int i = 0; i < count; i++)
{
spheres[i] = ObjectPoolManager.Instance.Get(typeof(Orbiter));
float offset = (2 * Mathf.PI / count) * i; // 생성 시 각도
Orbiter orbit = spheres[i].GetComponent<Orbiter>();
orbit.radiusX = radiusX;
orbit.radiusY = radiusY;
orbit.speed = rotationsPerSecond;
orbit.angleOffset = offset;
orbit.onHit = onHit;
.
.
.
orbit.homming = homming;
orbit.transform.localScale = transform.localScale;
orbit.GetComponent<SpriteRenderer>().sprite = tempSprite;
orbit.transform.position = PlayerSkillManager.Instance.transform.position;
orbit.Init();
}
ObjectPoolManager.Instance.Return(this.gameObject, typeof(MagicRevolve));
위와 같이 설정 값을 생성하는 object에 주입하고
Orbiter를 가지는 object는 해당 값으로 공전하게된다.
angle += speed * 2f * Mathf.PI * Time.deltaTime; // 초당 회전 각도 누적
float totalAngle = angle + angleOffset;
float x = radiusX * Mathf.Cos(totalAngle);
float y = radiusY * Mathf.Sin(totalAngle);
transform.position = PlayerSkillManager.Instance.transform.position + new Vector3(x, y, 0f);