using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// Spawns a prefab 3D model of the ZED camera or ZED Mini, depending on which is connected.
/// Used in the MR Calibration scene to visualize its position relative to a tracked object.
///
public class CreateZEDModel : MonoBehaviour
{
///
/// Prefab of a scaled model of the original ZED camera.
///
[Tooltip("Prefab of a scaled model of the original ZED camera.")]
public GameObject zedModelPrefab;
///
/// Prefab of a scaled model of the ZED Mini camera.
///
[Tooltip("Prefab of a scaled model of the ZED Mini camera. ")]
public GameObject zedMiniModelPrefab;
///
/// If true, the object is centered on the physical center of the camera. Otherwise, it's centered
/// on the left lens, which is the main reference point of the ZED's position and the origin of the
/// left (primary) video feed.
///
[Tooltip("If true, the object is centered on the physical center of the camera. Otherwise, it's centered " +
"on the left lens, which is the main reference point of the ZED's position and the origin of the " +
"left (primary) video feed.")]
public bool centerOnGeometry = false;
///
/// Camera ID to use to determine which ZED model to display. Should always be 1 if you only have one ZED connected.
///
[Tooltip("Camera ID to use to determine which ZED model to display. Should always be 1 if you only have one ZED connected.")]
public sl.ZED_CAMERA_ID cameraID = sl.ZED_CAMERA_ID.CAMERA_ID_01;
private GameObject zedModelObject;
private ZEDManager zedManager
{
get
{
return ZEDManager.GetInstance(cameraID);
}
}
// Use this for initialization
void Awake()
{
if (zedManager != null)
{
//If ZEDManager is already ready, make the model. Otherwise, listen for it to be ready.
if (zedManager.IsZEDReady) CreateModel();
zedManager.OnZEDReady += CreateModel; //Still subscribe anyway in case the ZED is replaced with a different model.
}
}
///
/// Instantiates the proper prefab for the ZED or ZED Mini as a child of this object.
///
private void CreateModel()
{
if (zedModelObject != null) Destroy(zedModelObject); //Shouldn't happen but just in case.
sl.MODEL model = zedManager.zedCamera.CameraModel;
if (model == sl.MODEL.ZED)
{
if (!zedModelPrefab)
{
Debug.LogError("CameraAnchor tried to spawn ZED Model but zedModelPrefab is null.");
return;
}
zedModelObject = Instantiate(zedModelPrefab, transform);
zedModelObject.layer = gameObject.layer;
}
else if (model == sl.MODEL.ZED_M)
{
if (!zedMiniModelPrefab)
{
Debug.LogError("CameraAnchor tried to spawn ZED Mini Model but zedMiniModelPrefab is null.");
return;
}
zedModelObject = Instantiate(zedMiniModelPrefab, transform, false);
}
if (zedModelObject != null && centerOnGeometry == true)
{
float halfbaseline = zedManager.zedCamera.Baseline / 2f;
zedModelObject.transform.localPosition = new Vector3(-halfbaseline, 0, 0);
}
}
private void OnDestroy()
{
if(zedManager != null) zedManager.OnZEDReady -= CreateModel;
}
}