在Unity中,我有一个代表距离的浮点数
float distance = Vector3.Distance(start.position,end.position);
我想使用浮点数来改变一个物体沿着其Z轴的大小。我尝试了:
gameobject.transform.localScale.z = distance;
然而,这只是改变了比例,我需要将游戏对象更改为精确的长度。有没有简单直接的方法实现这个?
在Unity中,我有一个代表距离的浮点数
float distance = Vector3.Distance(start.position,end.position);
我想使用浮点数来改变一个物体沿着其Z轴的大小。我尝试了:
gameobject.transform.localScale.z = distance;
我创建了一个解决方法函数,将一定长度转换为比例尺(适用于未来可能遇到此问题的任何人)。游戏对象只能通过比例尺更改其大小,但可以通过渲染器找到其确切大小。使用一些插值,您可以将其转换为新的比例尺,以将对象调整为精确大小。
public void newScale(GameObject theGameObject, float newSize) {
float size = theGameObject.GetComponent<Renderer> ().bounds.size.y;
Vector3 rescale = theGameObject.transform.localScale;
rescale.y = newSize * rescale.y / size;
theGameObject.transform.localScale = rescale;
}
Unity没有类似于“Length”的任何对象。在(1,1,1)的尺度下,Unity认为每个对象都是一个单位。这意味着如果您希望您的对象沿z轴有3个单位长,您需要将其缩放为(1,1,3),其他轴也是如此。这就是为什么说您需要特别注意为Unity设计资产,因为它们都需要根据Unity定义的比例来制作。
gameobject.transform.localScale.z = distance;
方法或使用您自己答案中提到的方法。 - Anas iqbalpublic 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;
}
在我的情况下,这个对象在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);