// 3D에서는 판정이 쉽지만 2D에서 어려운부분이있기때문에 때릴때마다 콜라이더 생성해줌 // 포인트 하나 정해놓고 그위에 판정박스 열어줌. 애니메이션상에서 메소드 호출해줌 // 이부분에 덱스를 이용한 랜덤값으로... 미스라던가 크리티컬 해줄수있음 public void AttackAnimationEvent() { // 공격 포인트에서 1반지름 안에 들어오는 몬스터들의 콜라이더를 검출함 Collider2D[] colliders = Physics2D.OverlapCircleAll(_attackPoint.position, 0.85f, 1 << LayerMask.NameToLayer("Enemy")); // OverlapCircleAll 은 복수의 오브젝트를 검출함, 디테일하게 나누려면 태그와 레이어를 같이써도됨 // 검출된 콜라이더에서 foreach (Collider2D collider in colliders) { // 몬스터에게 if (collider.tag == "Enemy" || collider.tag == "BossEnemy") { mpUp.plusMp(); // 피격 처리를 요청함 인터페이스를 안쓰고 데미지 주려고 센드메세지사용함 // 이부분에 덱스를 이용한 랜덤값으로... 미스라던가 크리티컬 해줄수있음 _weaponDamage = GameObject.Find("LHTwoHandSword").GetComponent <WeaponInfo>(); _weaponDamage.damage = Random.Range(_weaponDamage.minDamage, _weaponDamage.maxDamage + 1); collider.SendMessage("Damage", Mathf.Round(_weaponDamage.damage)); return; // 리턴하는이유는 1마리씩만 때리려고 } } }
protected override void OnTriggerEnter2D(Collider2D col) // 몹은 istrigger가 되어있어서 총알이 istrigger가 아니어도 { // 항상 관통하는거로 보이기때문에,, 관통형 비관통형 만들어야함 // 플레이어 피격시 // 불타입 옵션 만들어서 if (col.tag == _targetTag || col.tag == "Boss" + _targetTag) { bulletDamage.damage = Random.Range(bulletDamage.minDamage, bulletDamage.maxDamage + 1); col.SendMessage("Damage", Mathf.Round(bulletDamage.damage)); if (_isPierce == false) // 관통형총알은 플레이어가쏜.. 마법 평타일경우에 마나1씩올려줌 { if (gameObject.tag == "PlayerBullet") { magicArrowManaUp = GameObject.Find("Player").GetComponentInChildren <PlayerSkill>(); } magicArrowManaUp.plusMp(); Destroy(gameObject); } } // 벽 충돌시 base.OnTriggerEnter2D(col); }