UxrSingleton<T> Class

An improved singleton implementation over UxrAbstractSingleton<T> for non-abstract classes. UxrSingleton<T> guarantees that an Instance will always be available by instantiating the singleton if it wasn’t found in the scene. Additionally, it can instantiate a prefab if there is one available in a well-known location.

The steps followed by this singleton implementation to assign the instance are the:  

  1. The singleton component is searched in the scene to see if it was pre-instantiated or is already available.
  2. If not found, the component tries to be instantiated in the scene using a prefab in a well known Resources folder. The well known path is SingletonResources in any Resources folder and the prefab name is the singleton class name. A prefab allows to assign initial properties to the component and also hang additional resources (meshes, textures) from the GameObject if needed.
  3. If not found, a new GameObject is instantiated and the singleton is added using AddComponent``1().

Inheritance Hierarchy

System.Object
  Object
    Component
      Behaviour
        MonoBehaviour
          UltimateXR.Core.Components.UxrComponent
            UltimateXR.Core.Components.Singleton.UxrAbstractSingleton<T>
              UltimateXR.Core.Components.Singleton.UxrSingleton<T>
                UltimateXR.Core.Components.Singleton.UxrAsyncInitSingleton<T>
                UltimateXR.Core.UxrManager
                UltimateXR.Guides.UxrCompass
                UltimateXR.Manipulation.UxrGrabManager
                UltimateXR.Mechanics.Weapons.UxrWeaponManager
Namespace: UltimateXR.Core.Components.Singleton
Assembly: UltimateXR (in UltimateXR.dll) Version: 0.0.0.0

Syntax

C#

public abstract class UxrSingleton<T> : UxrAbstractSingleton<T>
where T : UxrSingleton<T>


Type Parameters

 

T
Type the singleton is for. This template can only be used with a hierarchy where T is specified at its lowers level (sealed). For use in abstract classes, check UxrAbstractSingleton<T>.
  The UxrSingleton<T> type exposes the following members.

Constructors

NameDescription
Protected methodUxrSingleton<T>

Properties

NameDescription
Public propertyStatic memberInstance Gets the unique, global instance of the given component.

Methods

NameDescription
Public methodPoke Dummy method forcing Instance to run the instance finding/creation process.

Extension Methods

NameDescription
Public Extension MethodCheckSetEnabled Enables/disabled the component if it isn’t enabled already. (Defined by MonoBehaviourExt.)
Public Extension MethodGetOrAddComponent<T> Gets the Component of a given type. If it doesn’t exist, it is added to the GameObject. (Defined by ComponentExt.)
Public Extension MethodGetPathUnderScene Gets the full path under current scene, including all parents, but scene name, for the given component. (Defined by ComponentExt.)
Public Extension MethodGetSceneUid Gets an unique identifier string for the given component. (Defined by ComponentExt.)
Public Extension MethodGetUniqueScenePath Gets an unique path in the scene for the given component. It will include scene name, sibling and component indices to make it unique. (Defined by ComponentExt.)
Public Extension MethodLoopCoroutine Creates a coroutine that simplifies executing a loop during a certain amount of time. (Defined by MonoBehaviourExt.)
Public Extension MethodSafeGetComponentInParent<T> Gets the Component of a given type in the GameObject or any of its parents. It also works on prefabs, where regular GetComponentInParent(Type, Boolean) will not work: https://issuetracker.unity3d.com/issues/getcomponentinparent-is-returning-null-when-the-gameobject-is-a-prefab (Defined by ComponentExt.)
Public Extension MethodShowInInspector(Boolean)Overloaded.
Controls whether to show the current object in the inspector. (Defined by ObjectExt.)
Public Extension MethodShowInInspector(Boolean, Boolean)Overloaded.
Controls whether to show the current object in the inspector and whether it is editable. (Defined by ObjectExt.)
Public Extension MethodThrowIfNull Throws an exception if the object is null. (Defined by ObjectExt.)

Remarks

The singleton can be a pre-existing component in a scene. If not, Instance takes care of instancing it and make it the singleton. This singleton can only be used in sealed classes. For use in abstract classes check UxrAbstractSingleton<T> instead.

See Also

Reference

UltimateXR.Core.Components.Singleton Namespace