/// <summary> /// 获得损害 /// </summary> /// </summary> /// <param name="damage"></param> /// <returns></returns> public bool GetDamage(int damage, int deathDir) { if (!m_CharacterController.IsAlive()) { return(false); } m_CharacterController.Hit(); SubtractHealth(damage); if (health <= 0) { m_CharacterController.Die(deathDir); //一半的几率会爆炸,只是简单的特效展示 if (Random.Range(0, 100) > 50) { FXDisplay explosionFXDisplay = ObjPoolMgr.Instance.SpawnObj <FXDisplay>(explosionPrefName); explosionFXDisplay.transform.position = transform.position; explosionFXDisplay.ShowFX(); GameMgr.Instance.shakeCamera.ExplosionShake(); } return(false); } return(true); }
private void OnCollisionEnter2D(Collision2D collision) { bool isHitFXShowed = false; //敌人受伤并会被击退 if (collision.transform.CompareTag(DataMgr.Instance.EnemyTag)) { KinematicObject kObj = collision.transform.GetComponent <KinematicObject>(); Damageable damageable = kObj.GetComponent <Damageable>(); int deathDir = (int)Mathf.Sign(kObj.transform.position.x - transform.position.x); if (!damageable.GetDamage(damage, deathDir)) { return; } int sign = transform.right.x > 0 ? 1 : -1; if (!kObj.IsForwardWalled && !kObj.IsBackObstacled) { kObj.transform.position += Vector3.right * beatBackPower * sign * Time.deltaTime; } } //显示击中特效 foreach (ContactPoint2D point2D in collision.contacts) { if (isHitFXShowed) { break; } FXDisplay hitFXDisplay = ObjPoolMgr.Instance.SpawnObj <FXDisplay>("pref_Hit"); hitFXDisplay.transform.position = new Vector3(point2D.point.x, point2D.point.y, 0); hitFXDisplay.ShowFX(); isHitFXShowed = true; } ObjPoolMgr.Instance.RecycleObj(gameObject); }