인프런 강의 - 케이디 생존게임

케이디 강의5 - (총든 팔 생성, 발사 구현, 파티클 추가, 사운드 삽입)

WMG1 2022. 11. 7. 22:34
반응형

 

public class GunController : MonoBehaviour
{
    [SerializeField]
    private Gun currentGun; // 현재 소유하고 있는 총 ((각종 총의 정보를 참조가능해짐))

    private float currentFireRate; // gun 스크립트의 FireRate 값을 넣음 //이 값을 깎아 0이 되면 발사할 수 있게 만듬


    private AudioSource audioSource; // 오디오소스 요청 



    private void Start()
    {
        
        {
            audioSource = GetComponent<AudioSource>(); //오디오 소스 할당
        }
    }
    void Update()
    {
        GunFireRateCalc();
        TryFire();
    }

    //##총기 발사##
    private void GunFireRateCalc() // 발사 딜레이 계산
    {
        if (currentFireRate > 0) //현재 연사속도가 0보다 크면
            currentFireRate -= Time.deltaTime; // 1씩 깎는다
    }

    private void TryFire() // 발사시도
    {
        if(Input.GetButton("Fire1") && currentFireRate <= 0) //좌클릭 && 현재 연사속도가 0보다 작거나 같을때만 가능
        {
            Fire();
        }
    }
    
    //##실제 발사 (클릭 후 과정)##
    private void Fire() // 발사 전
    {
        currentFireRate = currentGun.fireRate; // 발사를 하면 fireRate를 원래 값으로 돌림== 0보다 작을 경우에만 발사 할 수 있으므로 재계산까지 발사 못함
        Shoot();
    }

    private void Shoot() // 발사 후
    {
        PlaySE(currentGun.fire_Sound); //효과음 (currentGun 안에있는 효과음)

        currentGun.muzzleFlash.Play(); // 파티클 플레이
        Debug.Log("총알 발사함");
    }

    //##사운드##
    private void PlaySE(AudioClip _clip)//효과음 재생
    {
        audioSource.clip = _clip; //오디오 소스에 클립삽입
        audioSource.Play(); //재생
    }

}

발사 구현 / 사운드 코딩

 

public class Gun : MonoBehaviour
{
    public string gunName; // 총의 이름(여러 종류의 총을 이름으로 구분)
    public float range; // 사정 거리
    public float accuracy; // 정확도
    public float fireRate; // 연사속도
    public float reloadTime; // 재장전 속도

    public int damage; // 총 데미지

    //##총알 수 관리##

    public int reloadBulletCount; // 총알 재장전 개수
    public int currentBulletCount; // 현재 탄알집에 남아있는 총알의 개수
    public int maxBulletCount; // 최대 소유 가능 총알 개수
    public int carryBulletCount; // 현재 소유하고 있는 총알 개수

    //##반동##

    public float retroActionForce; // 반동 세기
    public float retroActionFineSightForce; // 정조준 시 반동 세기

    public Vector3 fineSightOrginPos; // 정조준 시 총의 위치값 변수

    public Animator anim; // 애니메이터
    public ParticleSystem muzzleFlash; // 총구섬광 파티클

    public AudioClip fire_Sound; // 총 발사음
}

총기 인포

 

 

 

 

골자는 이전 강의(케이디 강의 - 4) 와 비슷했다.

 

총마다 지정해줄 수 있는 여러 정보를 저장하는 스크립트와

 

총 발사와 여러 효과를 제어하는 스크립트가 오늘 추가되었다.

 

 

 

private void Shoot() // 발사 후
    {
        PlaySE(currentGun.fire_Sound); //효과음 (currentGun 안에있는 효과음)

        currentGun.muzzleFlash.Play(); // 파티클 플레이
        Debug.Log("총알 발사함");
    }

 

    private void PlaySE(AudioClip _clip)//효과음 재생
    {
        audioSource.clip = _clip; //오디오 소스에 클립삽입
        audioSource.Play(); //재생
    }

 

사운드 부분 이외에는 대부분 한번씩 봤던 부분이라 크게 주의할 코드는 없었다.

 

 

파티클 기능 설명이 대부분인 회차였음 파티클에 대해 상당히 자세하게 설명해준다.

(파티클 만들 때 해당 회차를 참고하면 좋을듯))

 

 

반응형