将平面对象位置设置为平面GameObject位置。
基本上我已经基于三点创建了一架飞机。但是,出于测试原因,我需要知道飞机的位置。所以,我的层次结构中有一个平面游戏对象(带有网格,纹理以及随附的所有其他东西)。我想将Plane GameObject移动到Plane对象的位置和法线。
以下是一些代码:
plane1Go = GameObject.Find("Plane1");
Plane plane1 = new Plane(Point1,Point2,Point3);
plane1Go.gameObject.GetComponent<Mesh>().vertices= new Vector3[4]{Point1,Point2,Point3,Point4};
如您所见,我使用了三个点,用于使Plane对象移动Plane GameObject。
首先,平面游戏对象不动,我不知道为什么。
第二,更重要的是,我想使用Plane对象实际上是Plane GameObject的参考点。
答案 0 :(得分:1)
除非它已经改变,否则你应该修改游戏对象的Transform元素。
GameObject.FindWithTag("PlaneTop").transform.position = new Vector3(10, 0, 0);
这样可以保持网格,但会移动对象。
GameObject本身的参考点取决于导出网格时网格的局部空间原点所在的位置。我不完全确定你想要实现的目标,但它可能是重新定位网格本身而不是游戏对象的情况。
答案 1 :(得分:1)
我建议采用两步法:
我假设你有一个连接到GameObject的网格,可能是某种类型的大四边形。
Plane plane = new Plane(point1, point2, point3);
//technically, any point on the plane will work
//for our purposes, I'll take the average of your three inputs
Vector3 center = (point1 + point2 + point3) / 3f;
//find the plane's transform
Transform planeTransform = GameObject.Find("Plane1").transform;
//position the plane
//then make it face toward its normal
planeTransform.position = center;
planeTransform.LookAt(planeTransform.position + plane.normal);
问题的第二部分不太清楚:
我想使用Plane对象实际上是Plane GameObject的参考点。
您可以根据需要经常重新定位planeTransform
。您可以在每次平面更改时重新定位它,或者在Update
函数中每帧重新定位一次。
我建议您缓存GameObject.Find
的结果,如果您要打电话给我的话。