[유니티 C#] 1주차 - FPS + RPG 게임 제작 - 총알 발사와 장전

한승호·2022년 7월 5일
0

The Last Of City 1주차(2)

플레이어 공격과 장전

  • 마우스 왼쪽버튼으로 총알을 발사한다.
  • 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

이러면 장전 완성이다. 다만!

가지고 있는 총알이 장전 가능한 총알보다 적은 경우와 같이 예외사항이 많기 때문에 그에 맞는 처리를 꼭 해야한다.

그래서 이것저것 해봐서 그런지 좀 오래 걸렸다 :)

profile
모든 실수를 경험해 더 발전하고 싶은 개발자입니다.

0개의 댓글