在Unity中,我有一个表示距离
的浮点数float distance = Vector3.Distance(start.position,end.position);
我想使用该浮点数来改变对象沿Z轴的大小。我试过了:
gameobject.transform.localScale.z = distance;
但是,这只是改变比例,我需要将游戏对象更改为精确的长度。有没有直接的方法来实现这一目标?
答案 0 :(得分:9)
我创建了一个解决方法函数,将特定长度转换为比例(对于将来可能会发现此问题的任何人)。游戏对象只能通过缩放更改其大小,但可以通过渲染器找到它们的确切大小。使用一点插值,您可以将其转换为新的比例,以将对象的大小调整为精确的大小。
{{1}}
答案 1 :(得分:1)
Unity对任何对象都没有“长度”这样的东西。在(1,1,1)的范围内,统一认为每个物体都是一个单位。意思是如果您希望对象沿z轴长3个单位,则将其比例更改为(1,1,3),对于其他轴也是如此。这就是为什么说你需要特别小心,同时为统一设计资产,因为他们都需要按照统一的规模来制作。
答案 2 :(得分:1)
此解决方案对我来说效果更好:
public void convertDistanceToScale(GameObject go, float distance){
Vector2 size = go.transform.lossyScale;
size.x = distance;
size.x = (size.x * go.transform.localScale.x) / go.transform.lossyScale.x;
size.y = go.transform.localScale.y;
go.transform.localScale = size;
}
这适用于我测试过的所有对象,包括子对象和旋转的对象。
答案 3 :(得分:0)
在我的情况下,该对象在3dsmax处的半径243.638。
但是重新缩放,因为这是子对象。 并希望将宽度固定为父对象变量。
Transform Truck_Area_Range = transform.Find("Circle");
Mesh mesh = Truck_Area_Range.GetComponent<MeshFilter>().mesh;
float Mesh_X = mesh.bounds.size.x;
Debug.Log(Mesh_X); // this same as my 3dsmax Radius * 2
Vector3 LocalScale = transform.localScale;
Debug.Log(LocalScale.x); // parent object LocalScale
float current_size = Mesh_X * LocalScale.x;
Debug.Log(current_size); // Circle object size in scene
float distance = 30;
float newSize = distance / current_size;
Debug.Log(newSize);
Truck_Area_Range.localScale = new Vector3 (newSize, newSize, 1);