public bool Damage(int damage, float impact, Transform attackTran, Transform hitTran, Transform ownerTran) { if (hitTran == null || attackTran == null) { return(false); } bool isHit = false; int hitDamage = 0; switch (hitTran.tag) { case Common.CO.TAG_UNIT: case Common.CO.TAG_ENEMY: //ユニット //被弾方向補正 Vector3 hitVector = attackTran.position - hitTran.position; float damageRate = GetHitAngleRate(hitTran, hitVector); damage = (int)(damage * damageRate); hitDamage = hitTran.GetComponent <UnitController>().Hit(damage, impact * -hitVector.normalized, ownerTran); if (hitDamage > 0) { SpawnDamageEffect(attackTran, hitTran); } isHit = true; break; case Common.CO.TAG_HQ: case Common.CO.TAG_ENEMY_HQ: //HQ hitDamage = hitTran.GetComponent <UnitController>().Hit(damage, ownerTran); isHit = true; break; case Common.CO.TAG_BREAK_OBSTACLE: //破壊可能障害物 ObstacleController obstacleCtrl = hitTran.GetComponent <ObstacleController>(); if (ownerTran != null) { int obstacleSide = obstacleCtrl.GetSide(); if (obstacleSide != Common.CO.SIDE_UNKNOWN && obstacleSide == Common.Func.GetMySide(ownerTran.tag)) { damage = 0; } } if (damage > 0) { hitDamage = obstacleCtrl.Hit(damage, ownerTran); } if (hitDamage > 0) { SpawnDamageEffect(attackTran, hitTran); } isHit = true; break; case Common.CO.TAG_OBSTACLE: case Common.CO.TAG_ARTILLERY_OBSTACLE: //障害物 isHit = true; break; } return(isHit); }