如何通过ARFoundation与对象进行交互?

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

因此,想法是在增强现实中拥有一个平面和网格放置系统,并能够在网格上放置和移动角色。我已经有一个用于移动设备的示例,我有一个生成网格的脚本和一个允许我放置对象的脚本,它工作得很好,但是,我不知道如何使用以上所有方法,如果在AR中可能。例如,我要检测一个平面,然后实例化一个级别,并在其上放置一些对象。

这是GridManager附带的脚本,用于创建网格:

[SerializeField] private float size = 0.05f;

public Vector3 GetNearestPointOnGrid(Vector3 position)
{
    position -= transform.position;

    int xCount = Mathf.RoundToInt(position.x / size);
    int yCount = Mathf.RoundToInt(position.y / size);
    int zCount = Mathf.RoundToInt(position.z / size);

    Vector3 result = new Vector3(
        (float)xCount * size,
        (float)yCount * size,
        (float)zCount * size);

    result += transform.position;

    return result;
}

private void OnDrawGizmos()
{
    Gizmos.color = Color.yellow;
    for (float x = 0; x < 40; x += size)
    {
        for (float z = 0; z < 40; z += size)
        {
            var point = GetNearestPointOnGrid(new Vector3(x, 0f, z));
            Gizmos.DrawSphere(point, 0.01f);
        }

    }
}

这是附加到PlacerManager并用于在网格上放置对象的对象:

private Grid grid;

private void Awake()
{
    grid = FindObjectOfType<Grid>();
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        RaycastHit hitInfo;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hitInfo))
        {
            PlaceCubeNear(hitInfo.point);
        }
    }
}

private void PlaceCubeNear(Vector3 clickPoint)
{
    var finalPosition = grid.GetNearestPointOnGrid(clickPoint);
    GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = finalPosition;
}
c# unity3d augmented-reality arkit arcore
1个回答
0
投票

您可以使用光线投射选项来识别不同的对象

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