Если я правильно понял суть вопроса, то можно сделать очень просто. Создать массив с объектами
ObjectMovement[] objectMovements
и находить точки окружности с заданным радиусом.
float newX = startPosition.x + radius * Mathf.Cos(angleInUnit * i * Mathf.Deg2Rad);
float newY = startPosition.y + radius * Mathf.Sin(angleInUnit * i * Mathf.Deg2Rad);
После передавать новую позицию объекту на сцене.
// Повесить скрипт на объект, который нужно переместить
/// <summary>
/// Объект который нужно переместить
/// </summary>
public class ObjectMovement : MonoBehaviour {
/// <summary>
/// Изменить расположение объекта
/// </summary>
/// <param name="vector"> новая позиция </param>
public void ChangePosition(Vector2 vector) {
transform.position = vector;
}
}
/// <summary>
/// Менеджер объектов
/// </summary>
public class ObjectsMovementManager : MonoBehaviour {
/// <summary>
/// Список нужных объектов
/// </summary>
public ObjectMovement[] objectMovements = null;
/// <summary>
/// Стартовая позиция объектов
/// </summary>
public Vector2 startPosition = new Vector2(0, 0);
/// <summary>
/// Радиус окружности
/// </summary>
[Range(0.1f, 10.0f)] public float radius = 5;
private void Update() {
// Если кнопка нажата, то выполнить действие ниже
if (Input.GetKeyDown(KeyCode.L)) {
// Смещение в градусах от кол-ва объектов
float angleInUnit = 360 / objectMovements.Length;
// Пробегаемся по всем объектам в списке
for (int i = 0; i < objectMovements.Length; i++) {
// Считаем новую позицию по оси X
float newX = startPosition.x + radius * Mathf.Cos(angleInUnit * i * Mathf.Deg2Rad);
// Считаем новую позицию по оси Y
float newY = startPosition.y + radius * Mathf.Sin(angleInUnit * i * Mathf.Deg2Rad);
// Присваиваем объекту новую позицию
objectMovements[i].ChangePosition(new Vector2(newX, newY));
}
}
}
}
До:
После:
P.S. Мое решение далеко не самое эффективное, но это всё, что я смог придумать)