Unity AR 用 GameObject 预制件替换 ARPlane

问题描述 投票:0回答:1

我希望用 3D 平面替换 ARPlane 的区域。

ARMeshVisualizer
做得非常好,但我需要在那里有一个实际的 3D 对象而不是网格,这样我就可以在上面使用 ARAnchor(非常重要)。

我尝试过类似的事情,但没有运气

void PlaceObjectOnPlane(ARPlane plane)
    {
        Vector3 position = plane.center;
        Quaternion rotation = plane.transform.rotation;

        Vector2 planeSize = plane.size;
        Vector3 objectScale = new Vector3(planeSize.x, 1f, planeSize.y); 
        
        if (objectToPlace != null && !objectToPlace.activeInHierarchy)
        {
            objectToPlace.SetActive(true);
            objectToPlace.transform.position = position;
            objectToPlace.transform.rotation = rotation;
            objectToPlace.transform.localScale = objectScale;
        }

    }

谢谢

c# unity-game-engine augmented-reality
1个回答
0
投票

您可以使用 ARAnchorManager 将锚点附加到平面。 像这样:

void PlaceObjectOnPlane(ARPlane plane)
{
    // Get ARAnchorManager
    ARAnchorManager anchorManager = FindObjectOfType<ARAnchorManager>();

    // Attach an anchor to the plane
    ARAnchor anchor = anchorManager.AttachAnchor(plane, new 
    Pose(plane.center, plane.transform.rotation));
    if (anchor == null)
    {
        Debug.LogError("Failed to attach anchor to the ARPlane.");
        return;
    }

    // Set up the object
    if (objectToPlace != null)
    {
        objectToPlace.transform.SetParent(anchor.transform, false);
        objectToPlace.transform.localPosition = Vector3.zero;
        objectToPlace.transform.localRotation = Quaternion.identity;

        Vector2 planeSize = plane.size;
        objectToPlace.transform.localScale = new Vector3(planeSize.x, 1f, 
        planeSize.y);
    
        objectToPlace.SetActive(true);
    }
}

解释

  1. AttachAnchor:确保游戏对象锚定到 ARPlane 跟踪稳定。
  2. 变换设置:对象相对于对象进行定位和缩放 锚点以匹配平面尺寸。
  3. 简化的工作流程:对象在以下环境下激活和管理 用于精确对齐和跟踪的锚点。

这可确保物体正确替换 ARPlane,同时保持 AR 跟踪稳定性。

© www.soinside.com 2019 - 2024. All rights reserved.