void CreateRing(Vector2 pos) { if (ring.Count == 0) { var b = Instantiate(BodyPrefab) as Transform; b.gameObject.SetActive(true); var cb = b.GetComponent <CelestialBody>(); cb._transform.position = startRingPos; SetSizeFor(cb, 0.5f); cb.FindAndSetMostProperAttractor(); cb.enabled = false; b.GetComponentInChildren <SpriteRenderer>().color = new Color(0.6f, 0.9f, 0, 9f); var cl = cb.GetComponentsInChildren <Collider2D>(); for (int i = 0; i < cl.Length; i++) { cl[i].enabled = false; } ring.Add(cb); } if (ring[0].Attractor == null) { return; } var mouseDist = (pos - startRingPos).magnitude; var radius = ring[0].Attractor._transform.position - ring[0]._transform.position; var r = radius.magnitude; var cnt = (int)(2 * Mathf.PI * r / Mathf.Max(mindist, mouseDist)); bool countCange = false; while (ring.Count < cnt - 1) { var d = Instantiate(ring[0]) as CelestialBody; d.gameObject.SetActive(true); ring.Add(d); countCange = true; } while (ring.Count > cnt) { var d = ring[cnt]; ring.RemoveAt(cnt); Destroy(d.gameObject); countCange = true; } for (int i = 0; i < ring.Count; i++) { ring[i]._transform.position = ring[i].Attractor._transform.position + new Vector3(Mathf.Cos(2 * Mathf.PI * ((float)i / (cnt - 1))) * r, Mathf.Sin(2 * Mathf.PI * ((float)i / (cnt - 1))) * r, 0); if (countCange) { ring[i].MakeOrbitCircle(); if (CelestialBody.CrossProductZ(ring[i].Velocity, ring[i].RadiusVector) < 0) { ring[i].Velocity = -ring[i].Velocity; } } } }