public TargetObject PrepareTarget()
        {
            if (!TargetReady())
            {
                return(null);
            }

            InteractorRuleObject _rule = m_Interactor.GetBestInteractorRule(m_Owner.transform.position);

            if (_rule == null)
            {
                m_Interactor.Target.BehaviourModeKey = m_Interactor.BehaviourModeKey;
                m_Interactor.Target.Selectors.Copy(m_Interactor.Selectors);                   // incl. default priority
            }
            else
            {
                m_Interactor.Target.BehaviourModeKey = _rule.BehaviourModeKey;
                m_Interactor.Target.Selectors.Copy(_rule.Selectors);
                m_Interactor.Target.Selectors.Priority = (_rule.UseDefaultSelectionPriority?m_Interactor.Selectors.Priority:_rule.Selectors.Priority);
            }

            if (_rule == null || _rule.OverrideTargetMovePosition == false)
            {
                m_Interactor.Target.UpdateOffset(m_Interactor.DefaultOffset);
                m_Interactor.Target.TargetStopDistance                   = m_Interactor.DefaultStopDistance;
                m_Interactor.Target.TargetRandomRange                    = m_Interactor.DefaultRandomRange;
                m_Interactor.Target.TargetSmoothingMultiplier            = m_Interactor.DefaultSmoothingMultiplier;
                m_Interactor.Target.UseUpdateOffsetOnActivateTarget      = m_Interactor.UpdateOffsetOnActivateTarget;
                m_Interactor.Target.UseUpdateOffsetOnMovePositionReached = m_Interactor.UpdateOffsetOnMovePositionReached;
            }
            else
            {
                m_Interactor.Target.UpdateOffset(_rule.Offset);
                m_Interactor.Target.TargetStopDistance                   = _rule.StopDistance;
                m_Interactor.Target.TargetRandomRange                    = _rule.RandomRange;
                m_Interactor.Target.TargetSmoothingMultiplier            = _rule.SmoothingMultiplier;
                m_Interactor.Target.UseUpdateOffsetOnActivateTarget      = _rule.UpdateOffsetOnActivateTarget;
                m_Interactor.Target.UseUpdateOffsetOnMovePositionReached = _rule.UpdateOffsetOnMovePositionReached;
            }

            return(m_Interactor.Target);
        }