XRCustomLoaderUIManager.cs 1.51 KB
using System;

using UnityEngine;

namespace UnityEditor.XR.Management
{
    internal class XRCustomLoaderUIManager
    {
        public static IXRCustomLoaderUI GetCustomLoaderUI(string loaderTypeName, BuildTargetGroup buildTargetGroup)
        {
            IXRCustomLoaderUI ret = null;

            var customLoaderTypes = TypeCache.GetTypesDerivedFrom(typeof(IXRCustomLoaderUI));
            foreach (var customLoader in customLoaderTypes)
            {
                var attribs = customLoader.GetCustomAttributes(typeof(XRCustomLoaderUIAttribute), true);
                foreach (var attrib in attribs)
                {
                    if (attrib is XRCustomLoaderUIAttribute)
                    {
                        var customUiAttrib = attrib as XRCustomLoaderUIAttribute;
                        if (String.Compare(loaderTypeName, customUiAttrib.loaderTypeName, true) == 0 &&
                            buildTargetGroup == customUiAttrib.buildTargetGroup)
                        {
                            if (ret != null)
                            {
                                Debug.Log($"Multiple custom ui renderers found for ({loaderTypeName}, {buildTargetGroup}). Defaulting to built-in rendering instead.");
                                return null;
                            }
                            ret = Activator.CreateInstance(customLoader) as IXRCustomLoaderUI;
                        }
                    }
                }
            }

            return ret;
        }
    }
}