protected override void Awake()
        {
            this.AddTag(SPConstants.TAG_ROOT);
            Pool.AddReference(this);

            base.Awake();

            _isAwake = true;

            //Messaging.Broadcast<IEntityAwakeHandler>(this.gameObject, (h) => h.OnEntityAwake(this), true, true);
            var token = Messaging.CreateBroadcastToken <IEntityAwakeHandler>(this.gameObject, true, true);

            if (token != null && token.Count > 0)
            {
                com.spacepuppy.Hooks.EarlyStartHook.Invoke(this.gameObject, () =>
                {
                    token.Invoke((h) => h.OnEntityAwake(this));
                });
            }
        }