@Slavon7

Как переместить много объектов из А в точку Б юнити?

Как переместить много объектов из А в точку Б юнити.
У меня есть 30 обьектов которые я перетаскиваю в разные позиции,для каждого обьекта у меня стоит старт_точка и енд_точка. Таким образом я перемещаю эти обьекты. Но проблема в том что это очень топорно, назначать каждому обьекту точку старта и конца.Обьекты должны стать вокруг начальной позиции. Как можно упростить код и реализацию? Я уверен что обьекты можно занести в массив но как мне каждому обьекту задать разную позицию?Важно чтобы все обьекты стали вокруг
  • Вопрос задан
  • 228 просмотров
Решения вопроса 1
Fraa-Erasmas
@Fraa-Erasmas
Разработка пиксельных 2d игр на Unity
Если я правильно понял суть вопроса, то можно сделать очень просто. Создать массив с объектами 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));
            }
        }
    }
}


До:
611525903c404230272741.png

После:
611525e85b5bf960679803.png

P.S. Мое решение далеко не самое эффективное, но это всё, что я смог придумать)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы