Могу ли я повернуть все объекты, не делая этого отдельно для каждого объекта?

#unity3d

#unity3d

Вопрос:

Я создаю игру, в которой я поворачиваю все объекты с одинаковым значением. Мне бы очень помогло, если бы я мог каким-то образом повернуть все объекты, не используя функцию transform.rotate для каждого объекта (преобразование действительно неэффективно). Я думал о том, чтобы сделать преобразование статическим, но это кажется недостижимым. Я также не могу поместить их в один объект и переместить его, поскольку это изменило бы их положение. У вас есть какие-либо советы? Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Спасибо за ответы. Моя цель — повернуть объекты с одинаковым значением, но не обычным способом. Я не хочу использовать преобразование в каждом объекте.

 void Update()
{
    if (Input.GetMouseButton(0))
    {
        rotX = Input.GetAxis("Mouse X") * sensitivity * Mathf.Deg2Rad;
        transform.Rotate(Vector3.forward, rotX);
    }
}
 

Я хочу, чтобы они имели одинаковое преобразование.вращение с разными transform.position и transform.scale. Таким образом, transform.Rotate() будет использоваться только один раз, а не в зависимости от количества объектов.
Я хочу избежать необходимости доступа к преобразованию каждого объекта.

Комментарии:

1. как transform.rotation неэффективен? являются ли ваши объекты родительскими друг для друга?

2. Нет. transform в целом неэффективен, как указано в unity. unity3d.com/learn/tutorials/topics/performance-optimization /…

3. В статье говорилось, что установка localRotation эффективна.

Ответ №1:

Можете ли вы привести более подробный пример? Когда дело доходит до производительности, действительно трудно сказать, какой подход был бы лучше в вашем случае без примера кода. Здесь вы можете найти некоторые сведения об использовании физического движка (using RigidBody.MoveRotation() ) для достижения лучшей производительности по сравнению Transform.Rotate с: https://answers.unity.com/questions/294452/rotation-performance.html

Ответ №2:

Создайте script именованный контроллер.

Там используется UnityEngine.Object.FindObjectsOfType<GameObject>();

Теперь у вас есть array из GameObject s . Используйте foreach или цикл и установите transform.rotation .

Теперь все объекты перемещаются одновременно.

 GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>() ;
foreach(object go in allObjects)
if (go.activeInHierarchy)
   print(thisObject " is an active object");
 

Комментарии:

1. Спасибо за ответ, но это не достигло бы моей цели, поскольку мне все равно пришлось бы обращаться к преобразованию каждого объекта (я отредактировал текст, надеюсь, теперь он более понятен)

2. Если я не ошибаюсь, то вы ищете сборный, не так ли?