在Unity中基于坐标而不是中心坐标放置对象

时间:2019-04-19 12:01:16

标签: c# unity3d math vector

enter image description here 我正在根据屏幕动态创建网格对象。

因此包含网格对象的对象始终具有相同的大小,但是网格对象具有不同的形状和大小。

我希望您看到我的照片并了解它。实际上,蓝色区域是透明的。

我目前正在使用移动相机在地板上拍摄Ray,我想将物体放置在Ray撞击的位置。

enter image description here 但这似乎需要大量的计算。

我认为我们应该首先使用除对象中心坐标以外的其他坐标。 而且我认为我们应该将物体放置在碰撞点上方一点。网格对象的一半大小,

所以我尝试了这个,但是失败了。我该怎么解决?

下面是我的源代码。

Vector3 hitPositon = hit.Pose.position;

Vector3 meshObjectCenter = ObjectPrefab.GetComponent<Renderer>().bounds.center;
Vector3 meshObjectSize = ObjectPrefab.GetComponent<Renderer>().bounds.size;

Vector3 CenterPointRevision = meshObjectCenter - hitPositon;
Vector3 YAxisRevision = new Vector3(0, meshObjectSize.y / 2, 0);

Vector3 NewPoint = ARObjectPrefab.transform.position - CenterPointRevision + YAxisRevision;

ObjectPrefab.transform.position = NewPoint;

enter image description here

对象是这种格式,上面的图片看起来成功但失败了。

1 个答案:

答案 0 :(得分:1)

位置就是命中位置减去中心偏移量和y轴偏移量

Vector3 hitPositon = hit.Pose.position;
Vector3 meshObjectCenter = ObjectPrefab.GetComponent<Renderer>().bounds.center;
Vector3 meshObjectSize = ObjectPrefab.GetComponent<Renderer>().bounds.size;
Vector3 YAxisRevision = new Vector3(0, meshObjectSize.y / 2, 0);
ObjectPrefab.transform.position = hitPositon - meshObjectCenter + YAxisRevision;