private void SphereCastEnemy() { if (UnitEnemy != null) { UnitEnemy.Status.HP.OnCurrentHealthUpdated.RemoveListener(OnEnemyDead); UnitEnemy = null; OnCatchedEnemyReleased.Invoke(); return; } var radius = 10.0f; var layer = LayerMask.GetMask(LayerManager.LAYER_AI); var colliders = Physics.OverlapSphere(transform.position, radius, layer); if (colliders.Length == 0) { OnCatchedNothing.Invoke(); return; } var mainCamera = GameManager.MainCamera; UnitEnemy = null; var distance = float.MaxValue; var myPos = transform.position; foreach (var c in colliders) { if (c.transform.IsInsideCameraFrustum(mainCamera) == false) { continue; } var unitEnemy = c.GetComponent <Unit_AI>(); if (unitEnemy.Status.IsDead == true || unitEnemy.Behaviour == AIBehaviour.Neutral) { continue; } var dist = Vector3.Distance(myPos, c.transform.position); if (dist < distance) { distance = dist; UnitEnemy = unitEnemy; } } if (UnitEnemy == null) { Debug.Log("Unable to catch any enemy!!", Debug.LogType.Error); OnCatchedNothing.Invoke(); return; } UnitEnemy.Status.HP.OnCurrentHealthUpdated.AddListener(OnEnemyDead); OnEnemyCatched.Invoke(UnitEnemy); }
private void OnEnemyDead(float enemyCurrentHealthRate) { if (UnitEnemy.Status.IsDead == true) { UnitEnemy = null; OnCatchedEnemyReleased.Invoke(); } }