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]); } } }


댓글
댓글 쓰기