본문 바로가기
공부/Unity 기초

2D 슈팅 - 7 / 총알 추가

by svcbn 2022. 5. 16.

 

이전 글의 PlayerFire

2022.05.15 - [Unity] - 2D 슈팅 - 1 / 사용자 입력 제어 및 오브젝트 이동 처리

 

 

 

플레이어가 발사할 총알의 수를 지정할 수 있는 변수를 추가

변수에 설정된 숫자만큼 1.5m의 간격으로 총알 발사

// 총알의 총 간격 = (총알의 수 - 1) * 총알의 간격
        float totalSpacing = (bulletCount - 1) * spacing;

        // 총알의 최초 위치(벡터) = x: firePosition - (총알의 총 간격 / 2), y:0, z:0
        Vector3 firstPos = firePosition.transform.position - new Vector3(totalSpacing * 0.5f, 0, 0);


        // 만약 사용자가 마우스 왼쪽버튼을 누르면
        if (Input.GetButtonDown("Fire1"))
        {
                // bulletCount에 설정된 숫자만큼
                for (int i = 0; i < bulletCount; i++)
                {

                    // 총알공장에서 총알을 만들어서
                    GameObject bullet = Instantiate(bulletFactory);

                    // 총구 위치에 가져다 놓고싶다.
                    // bullet.transform.position = firePosition.transform.position;

                    // 최초 생성위치부터 1.5m 간격으로 생성.
                    bullet.transform.position = firstPos + new Vector3(i * 1.5f, 0, 0);


                }
            }
        }

 

 

PlayerFire 전문

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 사용자가 마우스 왼쪽버튼을 누르면
// 총알을 발사하고싶다. (Bullet prefab을 읽어와서 총구 위치에 가져다 놓고싶다.)


// 플레이어가 발사할 총알의 수를 지정할 수 있는 변수 bulletCount를 추가한다.
// bulletCount에 설정된 숫자만큼 Player가 총알을 발사한다.
// 발사되는 총알의 간격은 1.5m로 균일해야한다.

public class PlayerFire : MonoBehaviour
{
    // 총알공장
    public GameObject bulletFactory;

    // 총구위치
    public GameObject firePosition;

    // 총알의 수
    public int bulletCount = 1;

    // 총알 발사 가능 체크용 변수
    public bool canFire = true;



    // 총알의 간격
    float spacing = 1.5f;

    

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
        // 총알의 총 간격 = (총알의 수 - 1) * 총알의 간격
        float totalSpacing = (bulletCount - 1) * spacing;

        // 총알의 최초 위치(벡터) = x: firePosition - (총알의 총 간격 / 2), y:0, z:0
        Vector3 firstPos = firePosition.transform.position - new Vector3(totalSpacing * 0.5f, 0, 0);


        // 만약 사용자가 마우스 왼쪽버튼을 누르면
        if (Input.GetButtonDown("Fire1"))
        {
            // 만일, 총알을 쏠 수 있는 상태라면
            if (canFire == true)
            {

                // bulletCount에 설정된 숫자만큼
                for (int i = 0; i < bulletCount; i++)
                {

                    // 총알공장에서 총알을 만들어서
                    GameObject bullet = Instantiate(bulletFactory);

                    // 총구 위치에 가져다 놓고싶다.
                    // bullet.transform.position = firePosition.transform.position;

                    // 최초 생성위치부터 1.5m 간격으로 생성.
                    bullet.transform.position = firstPos + new Vector3(i * 1.5f, 0, 0);


                }
            }
        }



    }
}