#c# #scala #unity3d #camera #gameobject
#c# #scala #unity3d #камера #gameobject
Вопрос:
Предположим, у меня есть эталонный игровой объект, куб, с масштабом (1,1,1). Существует еще один GameObject с масштабом (1,1,1), но размер в 3 раза больше куба. Как мне динамически изменять масштаб игровых объектов в соответствии с размером куба?
Ответ №1:
Установите сетчатый фильтр для каждого и используйте Mesh.bounds.size, чтобы получить их размеры. Чтобы второй объект помещался внутри первого, вы должны изменить масштаб второго объекта в зависимости от размера сетки.
// If you want it to be 100% accurate, you should multiply RefSize here
// by RefMeshFilter.transform.lossyScale so that the other object's
// size also accounts for the reference object's scale.
var RefSize = RefMeshFilter.bounds.size;
var MySize = MyMeshFilter.bounds.size;
var NewScale = new Vector3(RefSize.x / MySize.x, RefSize.y / MySize.y, RefSize.z / MySize.z);
// I'm un-parenting and re-parenting here as a quick way of setting global/lossy scale
var Parent = MyMeshFilter.transform.parent;
MyMeshFilter.transform.parent = null;
MyMeshFilter.transform.localScale = NewScale;
MyMeshFilter.transform.parent = Parent;
Комментарии:
1.
only way to set global/lossy scale
.. да нет 😉 Вы также могли бы пойтиtransform.localScale = Parent ? new Vector3(NewScale.x / Parent.lossyScale.x, NewScale.y / Parent.lossyScale.y, NewScale.z / Parent.lossyScale.z) : NewScale;
😉