Unity3D:将所有游戏对象转换为相同大小,而不管其比例如何

Posted

技术标签:

【中文标题】Unity3D:将所有游戏对象转换为相同大小,而不管其比例如何【英文标题】:Unity3D: Convert all game objects to same size irrespective of it's scale 【发布时间】:2021-01-27 04:24:34 【问题描述】:

假设我有一个参考 GameObject,Cube,比例为 (1,1,1)。还有另一个具有比例 (1,1,1) 的 GameObject,但大小是 Cube 的 3 倍。如何动态更改 Game 对象的比例以适应 Cube 的大小?

【问题讨论】:

【参考方案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;

【讨论】:

only way to set global/lossy scale .. yesn't ;) 你也可以去transform.localScale = Parent ? new Vector3(NewScale.x / Parent.lossyScale.x, NewScale.y / Parent.lossyScale.y, NewScale.z / Parent.lossyScale.z) : NewScale; ;)

以上是关于Unity3D:将所有游戏对象转换为相同大小,而不管其比例如何的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity3D 中分配给一个游戏对象的两种材质之间切换?

Unity2D:缩放游戏对象而不缩放其子对象

Unity3D 灵巧小知识点 ☀️ | 获取某个游戏对象下的所有子物体

DOS命令将子目录中的所有文件向上移动一级而不覆盖相同的文件名,唯一的大小

Unity3D 将 GameObject 渲染为线框

当我在 xcode 中构建游戏时,所有 gui 纹理/文本看起来都不同(unity3d)