Exemple #1
0
    // 실제 재장전 처리를 진행
    private IEnumerator ReloadRoutine()
    {
        // 현재 상태를 재장전 중 상태로 전환
        state = UziState.Reloading;
        //재장전 소리 재생
        gunAudioPlayer.PlayOneShot(reloadClip);

        // 재장전 소요 시간 만큼 처리를 쉬기
        yield return(new WaitForSeconds(reloadTime));

        int ammoToFill = magCapacity - magAmmo;//최대 탄약 수 - 현재 탄약 수


        if (ammoRemain < ammoToFill)
        {
            //만약 남은 탄알의 개수가 채워야할 탄알보다 적다면
            //채워야할 탄알수를 남은 탄알에 맞춰서 줄임
            ammoToFill = ammoRemain;
        }
        magAmmo    += ammoToFill;
        ammoRemain -= ammoToFill;

        state = UziState.Ready;
        // 총의 현재 상태를 발사 준비된 상태로 변경
        state = UziState.Ready;
    }
Exemple #2
0
 private void OnEnable()
 {
     // 총 상태 초기화
     magAmmo = magCapacity;
     //총의 현재 상태를 총을 쏠 준비가 된 상태로 변경
     state = UziState.Ready;
     //마지막으로 총을 쏜 시점을 초기화
     lastFireTime = 0;
 }
Exemple #3
0
    // 실제 발사 처리
    private void Shot()
    {
        //레이캐스트에 의한 충돌 정보를 저장하는 컨테이너, FPS 총알 충돌 구현 방식
        RaycastHit hit;
        //탄알이 맞은 곳을 저장할 변수
        Vector3 hitPosition = Vector3.zero;

        //레이캐스트(시작 지점, 방향, 충돌 정보 컨테이너_out, 사정거리)
        if (Physics.Raycast(fireTransform.position, fireTransform.forward, out hit, fireDistance))
        {
            //레이가 어떤 물체와 충돌한 경우

            //충돌한 상대방으로부터 IDamageable 오브젝트 가져오기 시도
            IDamageable target = hit.collider.GetComponent <IDamageable>();


            //상대방으로부터 IDamageable 오브젝트를 가져오는데 성공 했다면
            if (target != null)
            {
                //상대방의 OnDamage함수를 실행시켜 상대방에 대미지 주기
                target.OnDamage(GetDamage(), hit.point, hit.normal);
            }
            hitPosition = hit.point;
        }
        else
        {
            //레이가 다른 물체와 충돌하지 않았다면
            //탄알이 최대 사정거리 까지 날아갔을 때의 위치를 충돌 위치로 사용
            hitPosition = fireTransform.position + fireTransform.forward * fireDistance;
        }
        StartCoroutine(ShotEffect(hitPosition));//발사 이펙트 코루틴 시작
        magAmmo--;
        if (magAmmo <= 0)
        {
            state = UziState.Empty;
        }
    }