inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[유니티 3D] 실전! 생존게임 만들기 - Advanced

총 심화 구현

재장전을 하고나면 정조준 값은 똑같은데 위치가 바꿔저요

359

dydybest

작성한 질문수 15

0

전체 코드:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GunController : MonoBehaviour
{
    [SerializeField]
    private Gun currentGun;

    private float currentFireRate;

    private bool isReload = false;
    private bool isFineSightMode = false;

    [SerializeField]
    private Vector3 originPos;

    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

// Update is called once per frame
    void Update()
    {
        GunFireRateCalc();
        TryFire();
        TryReload();
        TryFineSight();
    }
    private void GunFireRateCalc()
    {
        if(currentFireRate > 0)
            currentFireRate -= Time.deltaTime;
    }
    private void TryFire()
    {
        if (Input.GetButton("Fire1") && currentFireRate <= 0 && !isReload)
        {
            Fire();
        }
    }
    private void Fire()
    {
        if(!isReload)
        {
           if(currentGun.currentBulletCount > 0)
               Shoot();
           else
               StartCoroutine(ReloadCoroutine());
        }
    }
    private void Shoot()
    {
        currentGun.currentBulletCount--;
        currentFireRate = currentGun.fireRate;
        PlaySE(currentGun.fire_Sound);
        currentGun.muzzleFlash.Play();
        Debug.Log("총알 발사함");
    }

    private void TryReload()
    {
        if(Input.GetKeyDown(KeyCode.R) && !isReload && currentGun.currentBulletCount < currentGun.reloadBulletCount)
        {
            StartCoroutine(ReloadCoroutine());
        }
    }


    IEnumerator ReloadCoroutine()

    {
        if(currentGun.carryBulletCount > 0)
        {

            isReload = true;
            
            currentGun.anim.SetTrigger("reload");

            currentGun.carryBulletCount += currentGun.currentBulletCount;
            currentGun.currentBulletCount = 0;


            yield return new WaitForSeconds(currentGun.reloadTime);

            if(currentGun.carryBulletCount >= currentGun.reloadBulletCount)
            {
                currentGun.currentBulletCount = currentGun.reloadBulletCount;
                currentGun.carryBulletCount -= currentGun.reloadBulletCount;
            }
            else
            {
                currentGun.currentBulletCount = currentGun.carryBulletCount;
                currentGun.carryBulletCount = 0;
            }
            isReload = false;
        }
        else
        {
            Debug.Log("소유한 총알이 없습니다.");
        }
    }

    private void TryFineSight()
    {
        if(Input.GetButtonDown("Fire2"))
        {
            FineSight();
        }
    }

    private void FineSight()
    {
        isFineSightMode = !isFineSightMode;
        currentGun.anim.SetBool("FineSightMode"isFineSightMode);

        if(isFineSightMode)
        {
            StopAllCoroutines();
            StartCoroutine(fineSightActivateCoroutine());
        }
        else
        {
            StopAllCoroutines();
            StartCoroutine(fineSightDeactivateCoroutine());
        }
    }

    IEnumerator fineSightActivateCoroutine()
    {
        while(currentGun.transform.localPosition != currentGun.fineSightOriginPos)
        {
            currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPositioncurrentGun.fineSightOriginPos0.2f);
            yield return null;
        }
    }
    IEnumerator fineSightDeactivateCoroutine()
    {
        while(currentGun.transform.localPosition != originPos)
        {
            currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPositionoriginPos0.2f);
            yield return null;
        }
    }

    private void PlaySE(AudioClip _clip)
    {
        audioSource.clip = _clip;
        audioSource.Play();
    }
}

unity

답변 0

코드 파일

0

100

1

currentFireRate 질문

0

104

0

thePlayerController의 값이 갑자기 null로 바뀌는 현상이 발생합니다

0

222

1

인벤토리 끄고 퀵슬롯 아이템 드래그앤 드랍시 공격

0

256

1

멀티로 개발하고 싶으면 어떤것을 알아야할까요?

0

359

1

유니티 3d 터레인 브러쉬 문제

0

527

1

moveposition 문제

0

360

2

navigation bake한 후 오류

0

290

1

무기 교체 오류

0

521

1

gun애니메이션이 손만 작동하고 총은 가만히 있어요

0

313

1

34:49 내용 생략 부분

0

500

0

고화질 서비스 안되나요..

0

371

1

바닥에 있는 아이템이 사라지지 않습니다

0

334

1

전체 프로젝트 파일 받을 수 있을까요?

0

412

1

질문 있습니다

0

285

0

움직이며 정조준을 하니까 총의 포지션 값이 이상해지네요;; 어떻게 해결해야되나요?

0

240

0

Quaternion 값은 왜 곱하나요?

0

312

0

Hand를 main camera에 넣으면 오류가 생깁니다.

0

242

0

웨폰 매니저 강의중 똑같은 내용 영상 중복됨

0

266

0

공격성을 띄고있는 동물이 죽어도 계속 쫓아옵니다.

0

322

1

시야각 구현이 제대로 안되는데 어떻게 해결해야하나요.

0

596

1

크로스헤어 문제

1

743

7

효과음 넣을 때 오류

0

446

1

강의 잘 듣고 있는데 질문거리가 많네요 ㅠㅠ

0

191

0