//pObject中心对象, excludePlayerOther是否排除玩家 public CObject GetNearestTargetByOrigin(CObject pObject, float fMaxDistance, bool excludePlayerOther) { float fNearestDist = fMaxDistance; CObject pNearestTarget = null; CObject pOriginObject = (CObject)pObject; Vector2 fvOrigin = new Vector2(pOriginObject.GetPosition().x, pOriginObject.GetPosition().z); foreach (int k in mServerObjects.Keys) { CObject pObj = mServerObjects[k]; //不再查找自身 if (pObj == pOriginObject) { continue; } if (CObjectManager.Instance.getPlayerMySelf().IsMyPet(pObj.ServerID)) { continue; } //非角色 if (!(pObj is CObject_Character)) { continue; } if (excludePlayerOther) { if (pObj is CObject_PlayerOther) { continue; } } //友好阵营 CObject_Character pChar = (CObject_Character)pObj; if (ENUM_RELATION.RELATION_ENEMY != GameProcedure.s_pGameInterface.GetCampType( getPlayerMySelf(), pChar)) { continue; } //死亡 if (ENUM_CHARACTER_LOGIC.CHARACTER_LOGIC_DEAD == pChar.CharacterLogic_Get()) { continue; } //距离太远 Vector2 vec = fvOrigin - new Vector2(pObj.GetPosition().x, pObj.GetPosition().z); float fDistance = vec.magnitude; if (fDistance >= fNearestDist) { continue; } pNearestTarget = pObj; fNearestDist = fDistance; } return(pNearestTarget); }