我在3D项目中有一个Unity的plane
,我想要得到它的边界,所以我可以在随机函数中使用它们来获得Vector3
坐标。 目前我正在尝试这样的
GameObject地面;
void Start () { ground = GameObject.Find("Ground"); moveAreaX = ground.GetComponent<Renderer>().bounds.size.x; moveAreaZ = ground.GetComponent<Renderer>().bounds.size.z; Debug.Log ("X Area: " + moveAreaX + ", Z Area: " + moveAreaZ); GetRandomTargetCoords(); } void GetRandomTargetCoords() { targetCoordsX = Random.Range(0f, moveAreaX); targetCoordsZ = Random.Range(0f, moveAreaZ); targetCoords = new Vector3(targetCoordsX, 1.1f, targetCoordsZ); }
而在控制台,我得到这个:
X Area: 108.5801, Z Area: 108.5801
问题是这个bounds.size
提供的单位不等于游戏对象的Transform位置的单位,所以游戏对象离开了Plane的边界。
我怎样才能使它有相同的单位进行测量?
如果我理解正确,你想在飞机上放一个随机目标。 但是,你的飞机的尺寸是飞机的“边”,而不是从中心开始。 你想要做的是这样的:
float scale = 0.1f; float moveAreaX = gameObject.GetComponent<Renderer>().bounds.size.x / 2; float moveAreaZ = gameObject.GetComponent<Renderer>().bounds.size.z / 2; Vector3 center = gameObject.GetComponent<Renderer>().bounds.center; targetCoordsX = center.x + Random.Range(-moveAreaX*scale, moveAreaX*scale); targetCoordsZ = center.z + Random.Range(-moveAreaZ*scale, moveAreaZ*scale);
你从飞机的中心开始,并从中心开始,加上相应的边除以2的大小。 这样你随机正面和负面的“半边”。 规模是因为游戏的规模不一样的变换。规模和边界(但我认为这实际上取决于你的游戏)。