static GameObject GetSessionHooksRoot(bool createIfNecessary = true)
        {
            if (s_SessionHooksRoot == null)
            {
                s_SessionHooksRoot = GameObject.Find(k_HostGoName);

                if (s_SessionHooksRoot == null)
                {
                    if (!createIfNecessary)
                    {
                        return(null);
                    }

                    s_SessionHooksRoot = UnityHelpers.CreateRecorderGameObject(k_HostGoName);
                }
            }

            return(s_SessionHooksRoot);
        }
        public static void Set(string id, Object obj)
        {
            var rbs = FindRecorderBindings();

            if (obj == null)
            {
                // Remove
                foreach (var rb in rbs)
                {
                    RemoveBinding(id, rb);
                }
            }
            else
            {
                var scene = GetObjectScene(obj);

                var rb = rbs.FirstOrDefault(r => r.gameObject.scene == scene);

                if (rb == null)
                {
                    // Add
                    var gameObject = UnityHelpers.CreateRecorderGameObject(k_HostGoName);
                    rb = gameObject.AddComponent <RecorderBindings>();
                    SceneManager.MoveGameObjectToScene(rb.gameObject, scene);
                }

                // Replace
                rb.SetBindingValue(id, obj);

                foreach (var r in rbs)
                {
                    if (r == rb)
                    {
                        continue;
                    }

                    RemoveBinding(id, r);
                }
            }
        }