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); }