平面对象位置到平面GameObject位置

时间:2015-11-20 02:41:06

标签: c# opengl math unity3d 3d

将平面对象位置设置为平面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的参考点。

2 个答案:

答案 0 :(得分:1)

除非它已经改变,否则你应该修改游戏对象的Transform元素。

GameObject.FindWithTag("PlaneTop").transform.position = new Vector3(10, 0, 0);

这样可以保持网格,但会移动对象。

GameObject本身的参考点取决于导出网格时网格的局部空间原点所在的位置。我不完全确定你想要实现的目标,但它可能是重新定位网格本身而不是游戏对象的情况。

答案 1 :(得分:1)

我建议采用两步法:

  • 将GameObject放置在飞机上
  • 使GameObject面朝向与平面正常
  • 相同的方向

我假设你有一个连接到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的结果,如果您要打电话给我的话。