[unity] 유니티 게임 따라 만들기5.1 (총 구현과 총구섬광)

김동민·2021년 10월 1일
0
post-thumbnail

https://youtu.be/uandR5M30ho [유튜버: 케이디]님의 유니티 3D강좌 영상을 보고 따라하면서 유니티 공부용으로 제작한 게임입니다.

이번 시간에는 총을 들고 있는 모션과 관련된 내용을 배워봤다. 총을 꺼내고,쏠 때 총구의 효과를 구현했는데 플레이 할 때는 그냥 마우스 왼쪽 클릭을 누르면 끝나는 일이 프로그램적으로 이렇게 구체적인지 몰랐었다.


전시간에 배웠던 걷기,뛰기 모션처럼 총과 관련된 애니메이션들의 동작별 구간을 나눠주고 이름을 짓고 파라미터에 bool과 triger를 만들어 관련된 동작이 서로 연결되도록 이어주었다.

SubMachineGun1을 만들고 인스펙터에서 관리해줄 데미지, 창탄 수, 사정거리 등등 필요한 것을 코딩해줘야 한다.

    public string gunName; //총 이름
    public float range; //사정거리
    public float accuracy; //정확도
    public float fireRate;//연사속도
    public float reloatTime; //재장전 속도

    public int damage; //데미지

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

    public float retroActionForce; // 반동 세기
    public float retroActionFineSightForece; // 정조준시의 반동 세기
    public Vector3 fineSightOriginPos; 

    public Animator anim;

    public ParticleSystem muzzleFlash;
    

    public AudioClip fire_Sound;

필요한 것들을 선언하고

    private void TryFire()
    {
        if (Input.GetButton("Fire1") && currentFireRate <= 0)
        {
            Fire();
        }
    }

왼쪽 클릭과 FireRate <= 0 을 만족하면 Fire함수를 실행한다.

   private void GunFireRateCalc()
    {
        if (currentFireRate > 0)
            currentFireRate -= Time.deltaTime;
        
    }

currentFireRate는 0보다 크며 deltatime만큼 감소시킨다. 1/60로 간단히 말해 1초동안 1씩 감소하는 것과 같은 말이다. 그리고 shoot()함수를 실행한다. 발사를 할 차례니까

    private void Fire()
        {
            currentFireRate = currentGun.fireRate;
            Shoot();
        }

currentFireRate을 다시 Gun.cs의 fireRate 값으로 초기화하고 currentFireRate값은 fireRate에서 시작하여 GunFireRateCalc에서 설정한 것과 같이 매 프레임마다 Time.deltaTime 만큼 감소되고, 0 이하로 떨어질 때까지 발사하지 못한다.

    private void Shoot()
   {
       PlaySE(currentGun.fire_Sound);
       currentGun.muzzleFlash.Play();
       Debug.Log("총알 발사함");

   }

발사되면 로그를 통해 얼마나 발사했는지 표시하게 해줬고 소리와 총열의 섬광을 Play하도록 해준다.

그리고 Effacts에서 particle system을 하나 만들어 총열의 섬광 효과를 만들어 주는데 이과정이 생각보다 섬세하고 과정이 많아서 헷갈렸다.

아까 선언했던 것들을 인스펙터 창에서 원하는 값을 조절해 주면 된다.


크기, 퍼짐정도, 퍼짐반경 등 여러가지 효과들을 건들여 자연스러운 효과를 만들었다. 발사 할 때 나는 간단한 소리도 넣어주었다.

이제 왼쪽 클릭을 누를 때 마다 소리와 발사 이펙트가 나타난다. 여기까지 만드니 아직 많이 남았지만 뭔가 착실히 만들어 지고 있는 것 같고 자주 쓰는 코딩 함수나 명령, 유니티의 기능들을 더 많이 알게 됐다.

profile
상상을 현실로 만들어내는 것이 즐겁습니다. 새로운 지식을 학습하고 기존의 지식들이 변화하는 과정들이 즐겁습니다. 개발의 과정은 개발자의 편의를 고려하고 결과는 사용자의 편의를 고려합니다.

0개의 댓글