【发布时间】:2019-08-19 21:47:13
【问题描述】:
我正在使用 ARCore 和 Unity 制作 AR 应用程序。
我想将 3D 模型放置在不接触的垂直墙上。
差不多实现了,但是在创建3D模型的时候,一直往左往下走。
我想是因为我设置了锚点位置
Vector3 position = new Vector3(0,0,0);
但如果我将锚点位置更改为
Vector3 position = new Vector3 (hit.Pose.position.x, hit.Pose.position.y, hit.Pose.position.z)
它也不会去中心。
有谁知道如何将 3D 物体放在平面的中间?
TrackableHit hit;
TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon |
TrackableHitFlags.FeaturePointWithSurfaceNormal;
if (Frame.Raycast(transform.position.x,transform.position.y, raycastFilter, out hit))
{
if (CurrentNumberOfGameObjects < numberOfGameObjectsAllowed)
{
Destroy(ARObject);
if ((hit.Trackable is DetectedPlane)
&& Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position, hit.Pose.rotation * Vector3.up) < 0)
{
Debug.Log("Hit at back of the current DetectedPlane");
}
else
{
Vector3 position = new Vector3(0,0,0);
Quaternion rotation = new Quaternion(0f, 0f, 0f, 1f);
ARObject = Instantiate(ARAndroidPrefab, hit.Pose.position, hit.Pose.rotation);
ARObject.transform.Rotate(-90, 0, 0, Space.Self);
var anchor = Session.CreateAnchor(new Pose(position, rotation));
ARObject.transform.parent = anchor.transform;
CurrentNumberOfGameObjects = CurrentNumberOfGameObjects + 1;
// Hide Plane once ARObject is Instantiated
foreach (GameObject Temp in DetectedPlaneGenerator.instance.PLANES) //RK
{
Temp.SetActive(false);
}
}
}
}
【问题讨论】:
-
只是一些一般性说明:您可以/应该使用
Vector3.zero,而不是new Vector3(0,0,0);而不是new Quaternion(0,0,0,1)使用Quaternion.Identity;ARObject.transform.Rotate(0, 0, 0, Space.Self);绝对什么都不做......你可能会提醒ARObject.transform.localRotation = Quaternion.Identity; -
@derHugo 谢谢你的评论,我在你写的时候修改了它。而旋转部分是我的错误。它应该是 (-90,0,0)。
-
您是否尝试先创建锚点,然后再进行
Instantiate(ARAndroidPrefab, hit.Pose.position, hit.Pose.rotation, anchor.transform)? -
我也觉得某处缺少
};) -
我刚才试过了,但是它在左下,在z轴的内侧。