public void Sense() { InteractorObject _best_interactor = null; GameObject _best_creature = null; int _best_priority = 0; float _best_distance = Mathf.Infinity; for (int i = 0; i < Interactors.Count; ++i) { InteractorObject _interactor = Interactors[i]; if (!_interactor.Enabled) { continue; } GameObject _creature = CreatureRegister.FindNearestCreature(_interactor.Name, m_Owner.transform.position, _interactor.GetStartDistance()); if (_creature != null) { float _creature_distance = Tools.GetHorizontalDistance(m_Owner.transform.position, _creature.transform.position); if (_creature_distance <= _best_distance) { int _priority = GetPriority(_creature, _interactor.Selectors.Priority); if (_priority >= _best_priority) { _best_priority = _priority; _best_creature = _creature; _best_distance = _creature_distance; _best_interactor = _interactor; } } } } if (_best_creature != null && _best_interactor != null) { if (m_Interactor == null || m_Interactor.Target.TargetGameObject != _best_creature) { m_Interactor = _best_interactor; m_Interactor.Target = new TargetObject(TargetType.INTERACTOR); m_Interactor.Target.TargetGameObject = _best_creature; PrepareTarget(); } } else { m_Interactor = null; } }