void Regene() { if (m_isDead) { return; } m_HP += m_HPRegene * Time.deltaTime; m_HP = Mathf.Clamp(m_HP, 0f, m_MaxHP); m_OnHPChanged.Invoke(m_HP); }
void FixedUpdate() { if (!m_HitBox.enabled) { return; } // Determine if the Damager is overlapping a Damagable object. Vector2 scale = transform.lossyScale; Vector2 scaledSize = Vector2.Scale(m_HitBox.size, scale); Vector2 pointA = (Vector2)m_HitBox.bounds.center - scaledSize * 0.5f; Vector2 pointB = pointA + scaledSize; int hitCount = Physics2D.OverlapArea(pointA, pointB, attackContactFilter, attackOverlapResults); for (int i = 0; i < hitCount; i++) { lastHit = attackOverlapResults[i]; Damageable damageable = lastHit.GetComponent <Damageable>(); if (damageable) { OnDamageableHit.Invoke(this, damageable); damageable.TakeDamage(this); } else { OnNonDamageableHit.Invoke(this); } } }
private void OnTriggerEnter2D(Collider2D collision) { var Damageable = collision.GetComponent<Damageable>(); if(Damageable) { Damageable.TakeDamage(this); OnDamageable.Invoke(this, Damageable); } }
public void TakeHeal(int health) { if (!activeFlag || IsDead()) { return; } Health += health; OnTakeHeal.Invoke((int)health); }
private void ToDamage(Damageable damageable) { if (damageable) { _delayBetweenDamage = startDelayBetweenDamage; OnDamageableHit?.Invoke(this, damageable); damageable.TakeDamage(this); } else { OnNonDamageableHit?.Invoke(this); } }
public void TakeDamage(Damager damager)//ダメージを受ける { if (!activeFlag || !m_damageFlag || IsDead()) { return; } Debug.Log("take damage:" + damager.damage, gameObject); Health -= damager.damage; OnTakeDamage.Invoke(damager.damage); if (IsDead())//もしHPが0以下になったら死んだときのイベントを呼び出す { OnDead.Invoke(); } m_damageFlag = false; }
private void FixedUpdate() { if (!canDamage) { return; } Vector2 scale = damagerTransform.lossyScale; Vector2 facingOffset = Vector2.Scale(offset, scale); if (offsetBasedOnSpriteFacing && spriteRenderer != null && spriteRenderer.flipX != spriteOriginallyFlipped) { facingOffset = new Vector2(-offset.x * scale.x, offset.y * scale.y); } Vector2 scaledSize = Vector2.Scale(size, scale); Vector2 pointA = (Vector2)damagerTransform.position + facingOffset - scaledSize * 0.5f; Vector2 pointB = pointA + scaledSize; int hitCount = Physics2D.OverlapArea(pointA, pointB, attackContactFilter, attackOverlapResults); for (int i = 0; i < hitCount; i++) { lastHit = attackOverlapResults[i]; Damageable damageable = lastHit.GetComponent <Damageable>(); if (lastHit.GetComponent <CompositeCollider2D>()) { damageable = lastHit.GetComponentInChildren <Damageable>(); } if (damageable) { OnDamageableHit.Invoke(this, damageable); damageable.TakeDamage(this, ignoreInvincibility); if (disableDamageAfterHit) { DisableDamage(); } } else { OnNonDamageableHit.Invoke(this); } } }
private void FixedUpdate() { if (!m_canDamage) { return; } Vector2 scale = m_damagerTransform.lossyScale; Vector2 facingOffset = Vector2.Scale(Offset, scale); if (OffsetBasedOnSpriteFacing && m_isSpriteRendererNotNull && SpriteRenderer.flipX != m_spriteOriginallyFlipped) { facingOffset = new Vector2(-Offset.x * scale.x, Offset.y * scale.y); } Vector2 scaledSize = Vector2.Scale(Size, scale); Vector2 pointA = (Vector2)m_damagerTransform.position + facingOffset - scaledSize * 0.5f; Vector2 pointB = pointA + scaledSize; int hitCount = Physics2D.OverlapArea(pointA, pointB, m_attackContactFilter, m_attackOverlapResults); for (int i = 0; i < hitCount; ++i) { m_lastHit = m_attackOverlapResults[i]; Damageable damageable = m_lastHit.GetComponent <Damageable>(); if (damageable != null) { OnDamageableHit?.Invoke(this, damageable); damageable.TakeDamage(this, IgnoreInvincibility); if (DisableDamageAfterHit) { DisableDamage(); } } else { OnNonDamageableHit?.Invoke(this); } } }