본문 바로가기
IT Tip/(Unity) 슈팅 게임 만들기

[유니티 게임 만들기] 레이저 발사

by 연꽃연못 2020. 12. 16.
반응형

Step 3. 레이저(공격용 무기) 발사

 

이번에는 공격할 수 있도록 레이저빔(공격용 무기)를 발사하는 것을 설정하도록 하겠습니다. 

게임을 우선 만들어 보는것을 목적으로 하는 강좌로 되도록이면 간단하면서도 꼭 있어야 할 것 위주로 넣었습니다. 플레이어 움직임도 좌우로만 방향키로 움직이고 공격도 한가지만 가능하게 할 예정입니다. 하지만 약간 추가하는걸로 좀더 화려하게는 넣을수 있을 거에요. ^^

목적 : 스페이스바(Space Bar)를 눌리면 공격용 무기(레이저빔)이 발사되도록 한다.

먼저 저번까지 진행한 유니티를 기동시켜 주세요. 

작업을 하기전에 임의의 폴더를 만들어 주세요. 사용할 무기는 에니메이션화 되어 있어서 바로 사용하면 되는데 간단한 작업이라도 폴더를 만들어서 관리를 해 놓으면 혹시 나중에 추가를 하더라도 한번에 알기 쉽고 편리하게 작업을 할수 있어요. 
전 이번에는 Assets 폴더 밑에 Animation이라고 폴더를 하나 만들어 줬어요. 이 작업에서는 애니메이션이 한가지 아이템밖에 없지만 일단 움직이는건 저쪽에 몰아놓을 거에요. ^^

레이저빔은 저번에 받아놨던 Asset Store에서 다운 받았던 이미지를 활용할 거에요. 
Assets > Galaxia Sprite Pack #1 > Effects 폴더안에 있어요. 무료에셋인데 참 유용해요 ^^ 이렇게 공격용 무기까지 다 기본으로 장착이 되어 있으니 만들어 보기 정말 좋아요. ^^ 안 그럼 허접하게 어디선가 붙여야 되던가 아님.. 정말.. ㅠㅠ 똥손으로 그려야 되는데 이렇게 무료로 사용할수 있게 올려놓은 사람에게 고맙다는 맘까지. ㅋㅋ 계절바뀌어서 그런지.. 요즘.. 감정이 ㅋㅋ흠흠

 

유니티 슛팅 게임 만들기

 

꼭 레이저빔 아니라도 되니 맘에 드는걸 골라서 씬뷰에 올려놔주세요. 전 오늘따라 강력한게 끌리니 제일 두꺼운 LaserSprit...으로 할거에요. 색상은 녹색으로 정했어요. 파란색은 먼지 모르게 차가울거 같아서 ^^ 

레이저빔을 선택을 한후 오른쪽에 화면사이즈에 맞는 크기로 맞춰줄거에요. Pixels Per Unit의 기본설정값 100을 48로 변경해 주세요. 
그리고 제일 하단에 Apply를 클릭해주세요. 

Pixels Per Unit : 48 
Apply

 

 

 

씬뷰에 끌어다 놓으면 바로 아래와 같은 팝업창이 뜹니다. 
사용할 무기의 애니메이션에 이름을 줄거에요. 
제일 처음에 만들어 놨던 Assets > Animation> 폴더에 Bullet이라고 줬어요. 

 

 

 

저장한 후 화면을 확인하면 Hierarchy에 LaserSpirteSheetGreen 오브젝트가 하나 생성되어 있고 Animation 폴더 안에도 생성되어 있는게 보이실 거에요. 

 

 

 

실행시켜서 게임뷰로 확인해보세요. ^^ 겁나 빠르게 레이저가 움직이는게 확인되실거에요. 

이번에는 Assets > Scripts> BulletController.cs를 생성해서 총알이 발사되는 스크립트를 작성하겠습니다. 
새로운 C# Script 파일을 생성후 아래와 같이 스크립트를 작성해 주세요. 

 

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

public class BulletController : MonoBehaviour
{
    void Update()
    {
        transform.Translate (0, 0.2f, 0);

		if (transform.position.y > 7) 
        {
			Destroy (gameObject);
		}
    }
}

 

스크립트 내용을 간단히 설명하자면..

 

transform.Translate (0, 0.2f, 0);

 

Translate 함수를 사용하여 총알이 위로 0.2씩 이동하라고 되어 있습니다. 

이것만으로는 총알이 얼척없이 날아가니 아래와 같이 Y축 방향이 위로 7이상 진행되면 이 객체를 지워라고 해줬습니다. 
총알이 스테이지를 초과 할때 그 내용을 지워라는 명령입니다.

 

if (transform.position.y > 7) 
        {
			Destroy (gameObject);
		}

 

이제 아까 스테이지에 올려서 대기 타고 있는 레이저빔의 이름을 바꾸고 스크립트를 적용하겠습니다. 
작성한 스크립트를 끌어와서 Bullets밑에 추가해주세요. 

 

 

 

실행시켜서 게임뷰를 확인해주세요. 

 

 

 

실행하면 총알이 한번만 발사되어 위쪽으로 사라지면 OK입니다. gif화면을 보면 총알이 좀 허접한데 이건 무시하면 되요. ^^ 화면에는 제대로 나오는데 동영상으로 찍어서 gif로 변환하니.. 저렇게 보이더라구요. ^^
만들어진 총알을 프리팹화 시켜놓을 거에요. 

Assets > Prefabs 폴더를 만들어 주세요. 

Hierarchy에 만들어 놓은 Bullets를 Prefabs 폴더에 넣어 주세요. 
프리팹화 시키는 작업이에요. 

원래는 저렇게 회색 사각형 박스에요.

 

 

 

프리팹화시키면 아래와 같이 파란박스로 변해요. 

 

 

파란박스로 변한 총알을 확인한 후 Hierarchy에 위치한 Bullets는 지워주세요. ^^

총알 밑작업을 한거에요. 스테이지에서는 없어졌지만 나중에 스페이스키가 눌러졌을때는 나타나게 할거에요. 이대로 지우지 않으면 게임 시작할때 총알이 표시되니까 지우는 거에요. ^^

이제 스페이스키에 총알이 나오도록 하는 스크립트를 작성해 줄거에요. 스페이스키를 누르는건 플레이어(Player)의 역할이니 이미 작성해 있는 PlayerController.cs에 스크립트를 아래의 스크립트를 추가해 주세요. 
아래는 전체 스크립트에요. 

 

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

public class PlayerController : MonoBehaviour
{
    // 총알 선언
    public GameObject bullets;

    // 이동가능한 범위
    Vector2 m_moveLimit = new Vector2(4.0f, 0);

    void Start()
    {
        
    }

    void Update()
    {
        Move();
        Attack();
    }

    void Move()
    {
        transform.localPosition = ClampPosition(transform.localPosition);

        // 왼쪽으로 이동
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            this.transform.Translate(-0.1f, 0, 0);
        }

        //오른쪽으로 이동
        if(Input.GetKey(KeyCode.RightArrow))
        {
            this.transform.Translate(0.1f, 0, 0);
        }
    }

    public Vector3 ClampPosition(Vector3 position)
    {
        return new Vector3
        (
            // 좌우로 움직이는 이동범위
            Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x),
            -7f,
            0
        );
    }

    // 총알 발사
    void Attack() {
        if (Input.GetKeyDown(KeyCode.Space)) 
        {
			Instantiate (bullets, transform.position, Quaternion.identity);
		}
    }
}

 

1. 총알 선언

만들어 놓은 총알을 지정해 줄거에요. 스크립트의 제일 윗줄에 추가합니다. 
게임 개체에 사용할거라고 선언하는 부분입니다. 여기에서 선언한 부분은 Attact()에서 사용을 해줍니다. 

    // 총알 변수 지정 
    public GameObject bullets;

 

1. 제일 하단에 Attack() 추가

Update()에 직접해도 되지만 분리를 해줄까해요. ^^

 

    void Attack() {
        if (Input.GetKeyDown(KeyCode.Space)) 
        {
			Instantiate (bullets, transform.position, Quaternion.identity);
		}
    }

 

3. Update()에 Attack(); 추가

기존에 있던 Move(); 밑에 Attack(); 한줄만 추가해 주세요. 

 

    void Update()
    {
        Move();
	// 이밑에 한줄 추가
        Attack();
    }

 

이제 다시 화면으로 돌아와서 플레이어의 Inspector를 확인하면 Bullets를 선언할수 있도록 추가가 된게 확인되실거에요. 여기에 아까 만들어 놨던 총알을 끌어다가 지정해주세요. 

 

먼저 Hierarchy에 있는 Player를 클릭한후 Assets > Prefabs> Bullets를 마우스로 끌어서 스크립트의 bullets에 장착시켜줍니다. 

 

 

오브젝트객체를 이런식으로 선언해서 사용하면 매우 유용해요. ^^ Tag로 찾아줄 필요없이 바로 지정해서 사용할때 정말 좋아요. 

 

 

 

동작을 확인해 보세요. 스페이스를 누를때마다 레이저빔이 발사되요. ㅋ

좌우로 움직이면서 스페이스 키를 눌러서 꼼꼼하게 확인해주세요. 

 

 

오늘의 분량 레이저 발사가 완료되었습니다. 처음이 좀 어렵지 한번 해보면 정말 별거 아니구나 하고 느끼실 거에요. ^^ 다음에는 적을 움직이는 강좌를 해볼께요. 추운데 건강조심하세요. ^^ 

반응형

댓글