#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. Если я не ошибаюсь, то вы ищете сборный, не так ли?