- 마우스 왼쪽버튼으로 총알을 발사한다.
- R키를 눌러 장전을 실행하며, 장전 중인 경우 공격할 수 없다.
카메라 중앙 즉, 내가 보고 있는 화면 중앙으로 Ray를 쏘고, 맞은 물체가 있다면 이펙트를 활성화시켜 총에 맞은 것 처럼 만들어준다. 그리고 맞은 물체가 몬스터라면 대미지를 입힐 수 있도록 한다.
Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, weapon.range))
{
GameObject clone = Instantiate(bulletImpact, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(clone, 1f);
if (hit.collider.GetComponent<Monster>() != null)
{
int damage = (playerState.att + weapon.damage);
float totalDamage = (int)(Random.Range(damage * 0.7f, damage * 0.9f));
totalDamage -= hit.collider.GetComponent<Monster>().defence;
}
}
공격 부분은 괜찮은데, 장전이 문제였다.
디버그를 찍어가며 총알 수를 확인하는데 문제가 많더라...
열심히 생각한 끝에 장전의 구조는 다음과 같다.
총알은 이렇고, 보통 FPS에서 한 탄창은 30발이라고 하기 때문에 장전 가능한 최대 총알 수는 30발이라고 가정해보자.
남아 있는 현재 총알을 전체 총알에 더해준다 > 0 / 105
전체 총알에서 장전 가능한 총알 수를 빼준다 > 0 / 75
뺀 수만큼 현재 총알에 넣어준다 > 30 / 75
이러면 장전 완성이다. 다만!
가지고 있는 총알이 장전 가능한 총알보다 적은 경우와 같이 예외사항이 많기 때문에 그에 맞는 처리를 꼭 해야한다.
그래서 이것저것 해봐서 그런지 좀 오래 걸렸다 :)