Unity/RPG Project
RPG Project - 35 [ 방패 막기 ]
SiJun-Park
2024. 11. 22. 00:46
이번에는 방패로 막는 것을 구현을 해보려고 한다.
이때 방패를 치켜세운 즉 앞면만 막고 다른 방향에서 날라오는 공격은 막지 못하여야 한다.
이것을 하기 위해서 상대방과 나의 transform.position을 가져와 차이를 구하고 nomalization을 해주면 방향이 나올 것이다.
public void Attack()
{
if (_isDead) return;
_isSound = true;
SoundManager._instance.PrivatePlaySound(_attacksound[Random.Range(0, _attacksound.Length)], transform, 0.3f);
Collider[] Targets = Physics.OverlapBox(_AttackArea.position, _AreaSize, _AttackArea.rotation);
foreach (Collider target in Targets)
{
if (target.CompareTag("Player"))
{
UserControl user = target.GetComponent<UserControl>();
Vector3 direction = (target.transform.position - transform.position).normalized;
float point = Vector3.Dot(target.transform.forward, direction);
if (point < 0)
{
if (user._isShield == true)
{
SoundManager._instance.PrivatePlaySound(user._nowShield._UseSound, target.transform, 0.3f);
break;
}
}
user.Hit(_damage);
break;
}
}
}
MonsterAttack 부분이다.
여기서 target이 플레이어면 불러오고 그 플레이어와 몬스터의 방향을 구한 뒤
플레이어 기준으로 direction을 dot해 앞을 보는지 뒤를 보는지 확인을 해준다
이때 중요한 것은 point < 0 일때이다. 이게 몬스터의 방향을 찾을 때에는 target대신에 transform이 들어가고 > 0 일때 앞이다.
이건 반대편이기 때문에 < 0으로 해주어야 한다.
만약에 플레이어가 앞을 보고있고 방패를 낀 상태에서 우측 마우스를 꾹 누르고 있다면 데미지를 받지 않도록 설정을 하였습니다.