68 lines
2.5 KiB
C#
68 lines
2.5 KiB
C#
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
using UnityEngine;
|
|
|
|
namespace Microsoft.MixedReality.Toolkit.Utilities
|
|
{
|
|
/// <summary>
|
|
/// The purpose of this class is to provide a cached reference to the main camera. Calling Camera.main
|
|
/// executes a FindByTag on the scene, which will get worse and worse with more tagged objects.
|
|
/// </summary>
|
|
public static class CameraCache
|
|
{
|
|
private static Camera cachedCamera;
|
|
|
|
/// <summary>
|
|
/// Returns a cached reference to the main camera and uses Camera.main if it hasn't been cached yet.
|
|
/// </summary>
|
|
public static Camera Main
|
|
{
|
|
get
|
|
{
|
|
if (cachedCamera != null)
|
|
{
|
|
if (cachedCamera.gameObject.activeInHierarchy)
|
|
{ // If the cached camera is active, return it
|
|
// Otherwise, our playspace may have been disabled
|
|
// We'll have to search for the next available
|
|
return cachedCamera;
|
|
}
|
|
}
|
|
|
|
// If the cached camera is null, search for main
|
|
Camera mainCamera = Camera.main;
|
|
|
|
if (mainCamera == null)
|
|
{
|
|
Debug.Log("No main camera found. Searching for cameras in the scene.");
|
|
|
|
// If no main camera was found, try to determine one.
|
|
Camera[] cameras = Object.FindObjectsOfType<Camera>();
|
|
if (cameras.Length == 0)
|
|
{
|
|
Debug.LogWarning("No cameras found. Creating a \"MainCamera\".");
|
|
mainCamera = new GameObject("Main Camera", typeof(Camera), typeof(AudioListener)) { tag = "MainCamera" }.GetComponent<Camera>();
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("The Mixed Reality Toolkit was unable to determine a main camera. Please tag the scene's primary camera as \"MainCamera\", in the hierarchy.");
|
|
}
|
|
}
|
|
|
|
// Cache the main camera
|
|
cachedCamera = mainCamera;
|
|
return cachedCamera;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Manually update the cached main camera
|
|
/// </summary>
|
|
public static void UpdateCachedMainCamera(Camera camera)
|
|
{
|
|
cachedCamera = camera;
|
|
}
|
|
}
|
|
}
|