[유니티]탑다운 슈팅 따라하기 #17 무기 교체

안녕하세요 유랑입니다.

 

 

실력향상을 위해서 오늘은 유튜브를 따라하면서 공부하겠습니다.

궁금하신점 있으시다면 댓글로 남겨주세요^^

 

 

 

1. 탑다운 슈팅 따라하기

 

 

이번 강의는 Sebastian Lague님께서 만든 예제이며,

유튜브를 보시면 자세한 내용을 배우실 수 있습니다.

 

유튜브 사이트 => 유튜브 

 

 

유니티 슈팅

 

 

 

2. 무기 교체

 

 

이번 시간에는 무기 교체 시스템을 만들어 보겠습니다.

무기 교체라지만 쏘는 방식만 우선 구성하겠습니다.

 

 

 

유니티 슈팅

 

 

 

2-1) 무기 교체 시스템 -㉠Gun 스크립트 작성

 

 

Gun 스크립트에서는 총의 모드 즉 자동, 버스트, 단발 이렇게 모드를 추가해주겠습니다.

마우스 버튼을 누르고 있는지 여부도 판별해줄게요^^

 

 

using UnityEngine;
using System.Collections;

// 총에 해당
public class Gun : MonoBehaviour
{
    // 발사 모드
    public enum FireMode { Auto, Burst, Single };
    public FireMode fireMode;

    public Transform[] projectileSpawn; // 발사 위치
    public Projectile projectile; // 총알
    public float msBetweenShots = 100; // 연사 간격
    public float muzzleVelocity = 35;  // 총알 속도
    public int burstCount; // 버스트 횟수

    public Transform shell; // 탄피
    public Transform shellEjection; // 탄피 생성위치
    MuzzleFlash muzzleflash; // 머즐플래쉬효과
    float nextShotTime;

    bool triggerReleasedSinceLastShot; // 총알발사 가능여부
    int shotsRemainingInBurst; // 남아있는 버스트 횟수

    void Start()
    {
        muzzleflash = GetComponent<MuzzleFlash>();
        shotsRemainingInBurst = burstCount;
    }

    void Shoot()
    {
        if (Time.time > nextShotTime)
        {
            // 버스트 모드
            if (fireMode == FireMode.Burst)
            {
                if (shotsRemainingInBurst == 0)
                {
                    return;
                }
                shotsRemainingInBurst--;
            }
            // 싱글 모드
            else if (fireMode == FireMode.Single)
            {
                if (!triggerReleasedSinceLastShot)
                {
                    return;
                }
            }
            // 총알 생성
            for (int i = 0; i < projectileSpawn.Length; i++)
            {
                nextShotTime = Time.time + msBetweenShots / 1000;
                Projectile newProjectile = Instantiate(projectile, projectileSpawn[i].position, projectileSpawn[i].rotation);
                newProjectile.SetSpeed(muzzleVelocity);
            }

            Instantiate(shell, shellEjection.position, shellEjection.rotation); // 탄피 생성
            muzzleflash.Activate(); // 머즐플래쉬 효과
        }
    }
    // 마우스 버튼을 누르고 있을 때
    public void OnTriggerHold()
    {
        Shoot();
        triggerReleasedSinceLastShot = false;
    }
    // 마우스 버튼을 땠을 때
    public void OnTriggerRelease()
    {
        triggerReleasedSinceLastShot = true;
        shotsRemainingInBurst = burstCount;
    }
}

 

 

 

2-2) 무기 교체 시스템 -㉡GunController 스크립트 작성

 

 

GunController 스크립트에서는 총알을 발사했는지 여부에 대한 메소드를 추가해 주겠습니다.

여기서 총을 관리해 주는것이죠.

 

 

 

유니티 슈팅

 

 

 

2-3) 무기 교체 시스템 -㉢Player 스크립트 작성

 

 

결국 Player 스크립트에서 마우스 입력여부에 따른 총알 발사를 제어합니다.

 

 

 

유니티 슈팅

 

 

 

2-4) 무기 교체 시스템 -㉣스크립트 적용

 

 

총알은 이제 두 곳에서 나옵니다.

ProjectileSpawn을 복사하여 하나는 좌측방향

 

 

 

유니티 슈팅

 

 

또 다른 하나는 우측방향을 바라보게 구성합니다.

 

 

유니티 슈팅

 

 

이제 스크립트 컴포넌트에 해당 내용을 적용하고

 

 

유니티 슈팅

 

 

적이 바로 죽을 수 있도록 체력도 수정하고

 

 

유니티 슈팅

 

 

게임을 시작하여 발사해 봅니다.

발사발사!!

샷건같네요ㅎㅎ

 

 

유니티 슈팅

 

 

 

2-5) 총알 효과 -㉠Trail Renderer

 

 

총알이 날아갈 때 효과를 주면 좋겠죠?

Trail Renderer컴포넌트를 추가해줄게요.

0.02초 동안 다음과 같은 곡선을 토대로 생겨났다가 없어집니다.

 

 

 

유니티 슈팅

 

 

여기에다가 적용해줄 머티리얼은 이렇게 생성하고,

쉐이더는 파티클용으로 적용해 줄게요.

 

 

유니티 슈팅

 

 

Color는 투명도만 쓰무스하게 줄어줄도록 구성해줍니다.

 

 

유니티 슈팅

 

 

 

2-6) 총알 효과 -㉡Projectile 스크립트 작성

 

 

Projectile 스크립트에서 트레일렌더러 컬러를 변경가능하게 만들어 줄게요.

 

 

 

유니티 슈팅

 

 

원하는 컬러값으로 바꾸시고

 

 

유니티 슈팅

 

 

마구마구 쏘세요.

이번에는 자동으로 변경한 뒤 사격합니다.

멋져요ㅎㅎ

 

 

유니티 슈팅

 

 

 

3. 마무리

 

 

오늘 강의는 여기까지입니다.

탑다운 슈팅을 따라하면서 무기 교체 시스템을 만들어 보았습니다.

감사합니다.

 

 

 

수업자료: 탑다운 슈팅 따라하기 #17 무기 교체

 

 

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY