public static UdonSharpBehaviour FindProxyBehaviour(UdonBehaviour udonBehaviour, ProxySerializationPolicy proxySerializationPolicy)
        {
            if (_proxyBehaviourLookup.TryGetValue(udonBehaviour, out UdonSharpBehaviour proxyBehaviour))
            {
                if (proxyBehaviour != null)
                {
                    CopyUdonToProxy(proxyBehaviour, proxySerializationPolicy);

                    SetIgnoreEvents(true);

                    try
                    {
                        proxyBehaviour.enabled = false;
                    }
                    finally
                    {
                        SetIgnoreEvents(false);
                    }

                    return(proxyBehaviour);
                }
                else
                {
                    _proxyBehaviourLookup.Remove(udonBehaviour);
                }
            }

            UdonSharpBehaviour[] behaviours = udonBehaviour.GetComponents <UdonSharpBehaviour>();

            foreach (UdonSharpBehaviour udonSharpBehaviour in behaviours)
            {
                IUdonBehaviour backingBehaviour = GetBackingUdonBehaviour(udonSharpBehaviour);
                if (backingBehaviour != null && ReferenceEquals(backingBehaviour, udonBehaviour))
                {
                    _proxyBehaviourLookup.Add(udonBehaviour, udonSharpBehaviour);

                    CopyUdonToProxy(udonSharpBehaviour, proxySerializationPolicy);

                    SetIgnoreEvents(true);

                    try
                    {
                        udonSharpBehaviour.enabled = false;
                    }
                    finally
                    {
                        SetIgnoreEvents(false);
                    }

                    return(udonSharpBehaviour);
                }
            }

            return(null);
        }