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

    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. Мое решение далеко не самое эффективное, но это всё, что я смог придумать)
    Ответ написан