06/15 : I'm Back! World Reconstruction Practice

 




Using Mesh



Using plane extraction




using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.MagicLeap;

public class PlanesDemo : MonoBehaviour
{
    public Transform BBoxTransform;
    public Vector3 BBoxExtents;
    public GameObject PlaneGameObject;
    public GameObject Cube;

    private MLPlanes.QueryParams _queryParams = new MLPlanes.QueryParams();
    public MLPlanes.QueryFlags QueryFlags;


    private float timeout = 5f;
    private float timeSinceLastRequest = 0f;
    private List<GameObject> _planeCache = new List<GameObject>();
    private List<GameObject> _cubeCache = new List<GameObject>();

    void Start()
    {
        MLPlanes.Start();
    }

    private void OnDestroy()
    {
        MLPlanes.Stop();
    }


    void Update()
    {
        timeSinceLastRequest += Time.deltaTime;
        if (timeSinceLastRequest > timeout)
        {
            timeSinceLastRequest = 0f;
            RequestPlanes();
        }
    }

    void RequestPlanes()
    {
        _queryParams.Flags = QueryFlags;
        _queryParams.MaxResults = 100;
        _queryParams.BoundsCenter = BBoxTransform.position;
        _queryParams.BoundsRotation = BBoxTransform.rotation;
        _queryParams.BoundsExtents = BBoxExtents;

        MLPlanes.GetPlanes(_queryParams, HandleOnReceivedPlanes);
    }

    private void HandleOnReceivedPlanes(MLResult result, MLPlanes.Plane[] planes, MLPlanes.Boundaries[] boundaries)
    {

        cleanScreen();     

        for (int i = 0; i < planes.Length; ++i)
        {
            createPlane(planes, i);
            createCube(planes, i);
        }
    }

    //JiHyang make
    // 2021 06 16
    private void createPlane(MLPlanes.Plane[] planes, int i)
    {
        GameObject newPlane;
        newPlane = Instantiate(PlaneGameObject);
        newPlane.transform.position = planes[i].Center;
        newPlane.transform.rotation = planes[i].Rotation;
        newPlane.transform.localScale = new Vector3(planes[i].Width, planes[i].Height, 1f); // Set plane scale
        _planeCache.Add(newPlane);
    }

    //JiHyang make
    // 2021 06 16
    private void createCube(MLPlanes.Plane[] planes, int i)
    {
        GameObject newCube;
        newCube = Instantiate(Cube);
        newCube.transform.position = planes[i].Center;
        newCube.transform.rotation = planes[i].Rotation;
        _cubeCache.Add(newCube);
    }


    // JiHyang make 
    // 2021 06 16
    public void cleanScreen()
    {
        for (int i = _planeCache.Count - 1; i >= 0; --i)
        {
            Destroy(_planeCache[i]);
            Destroy(_cubeCache[i]);
            _planeCache.Remove(_planeCache[i]);
            _cubeCache.Remove(_cubeCache[i]);
        }
    }
}

댓글

이 블로그의 인기 게시물

0817 : Hand Tracking

0701_Using server in Unity