반응형

이번시간은 

슈팅게임이 시작하기 전에 게임시작을 알리는 텍스쳐를 만들고 Player가 격파 되었을때 게임오버 텍스쳐를 나타내어 보겠습니다


먼저 Canvas 에  Text를 만들고 이름을 Ready 라고 합니다.

Ready 인스펙터를 그림과 같이 바꿉니다


새로운 스크립트를 생성하고 이름을  TextContrl 라고 합니다



TextContrl 스크립트를 Canvas 에 붙힙니다




TextContrl 스크립트를 작성합니다 코루틴 함수를 넣어 3초간 텍스쳐가 깜박이는 스크립트를 짭니다





Canvas 를 선택하여 Ready텍스쳐를 Text Contrl 스크립트에 연결합니다.



GameOver 텍스트를 만들고 그림과 같이 인스텍터 속성을 바꿉니다





TextContrl 스크립트를 수정합니다



TextContrl 스크립트를 수정합니다


GameOver 텍스트를 TextContrl스크립트에 연결합니다



GameManager 스크립트를 선택하고 수정합니다


그리과 같이 isPlayerAlive 변수와 KillPlayer() 함수를 추가 합니다 





Player 스크립트를 선택하고 스크립트를 수정합니다



OnTriggerEnter2D() 함수에  GameManager.instance.KillPlayer();

추가하여 저장합니다


게임을 실행합니다 

게임 시작하면 Ready 텍스쳐가 깜박거리고 Player가 격파 되었을때 GameOver텍스쳐가 뜨는지 확인합니다




반응형
반응형

이번에는 Game Manager를 만들어서 게임전체를 컨트롤 하고 점수를 올리는 프로그램을 짜보겠습니다

먼저 빈게임오브젝트를 만들고 GameManager라고 합니다



GameManager스크립트를 만듭니다


Player스크립트를 선택하고 수정합니다


canShoot = false로 수정합니다


can Shoot 체크 해제 합니다




SpawnManager스크립트를 수정합니다


SpawnManager스크립트를 SoundManager스크립트 처럼 인스턴스 스크립트를 추가 합니다


SpawnManager오브젝트를 선택하고 is Spawn 을 체크 해제한다


GameManager스크립트를 GameManager오브젝트에 붙힙니다



그리고  Hierarchy창에서 마우스 오른쪽 버튼을 눌러 UI -> Text 를 생성합니다





생성된 Canvas -> Canvas Scaler를 그림과 같이 Scale With Screen Size를 선택합니다


Scale With Screen Size를 선택 하고 Reference Resolution 을 200 320 으로 바끕니다


Text를 선택하여 그림과 같이 속성을 바꿉니다


Text가 화면에 잘보일수있게 그림과같이 설정되었습니다.Text와 위치는 사용자가 보기 좋은 방향으로 위치와 색깔을 수정하셔도 됩니다



그림과 같이 GameManager 스크립트를 작성합니다

3초후 게임이 실행되는 Invoke 함수를 넣고 AddScore 함수를 넣어 적을 격파 하였을때 점수를 올리는 스크립트를 짭니다







GameManager를 선택하고 Text를 붙힙니다



using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class GameManager : MonoBehaviour {


    GameObject player;


    int score = 0;


    public Text scoreText;


    public static GameManager instance;


    private void Awake()

    {

        if (GameManager.instance == null)

        {

            GameManager.instance = this;

        }

    }

    void Start ()

    {

        player = GameObject.FindGameObjectWithTag("Player");


        Invoke("StartGame", 3f);//3초후 StarGame실행

}


    void StartGame()

    {

        player.GetComponent<Player>().canShoot = true;


        SpawnManager.instance.isSpawn = true;

        

    }


    public void AddScore(int enemyScore)//적을 격파할때마다 점수가 올라가는 함수

    {

        score += enemyScore;

        scoreText.text = "Score:" + score;

    }

void Update () {

}

}





Enemy 스크립트를 선택하고 수정합니다


그림과 같이 Enemy스크립트를 수정합니다




게임을 실행하여 3초후 총알이 발사되고 적이나오는것을 확인하고 적을 격파하였을때 점수가 올라가는 것을 확인합니다





반응형
반응형


이번 시간에는 Player 전투기가 화면 밖으로 나가지 않도록 이동 제한을 주겠습니다


Player 스크립트를 선택하고 수정합니다


 

  



MoveContro()함수를 수정합니다 /현재 플레이어의 월드좌표(transform.position)을 뷰포트 기준 좌표로 변환시키는 명령을 추가 하고 

//Mathf.Clamp01(값)- 입력된 값이 0~1 사이를 벗어나지 못하게 강제로 조정해 주는 함수를 넣어 줍니다

그리고 다시 뷰포트를 월드좌표를 변환한 벡터값을 Player  transform position에 넣어줍니다


게임을 실행하여 Player전투기가 화면의 이동제한이 되었는지 확인합니다


반응형
반응형

이번시간에는 적기가 계속 나오는 것을 화면상 안보이면 삭제하여 데

이터 메모리를 절약하는 프로그램을 짜보이겠습니다

먼저 빈게임오브젝트를 만들어 RemoveZone 이라고 이름 붙힙니다


RemoveZone 읍젝트에 Box Collider2D를 붙힘니다



배경 스크롤 밑에다 화면 끝나는 지점에 RemoveZone을 크기와 맞추어 놓습니다


새로운 스크립트 이름을 RemoveZone 이라 하고 스크립트를 만듭니다




RemoveZone 오브젝트에  RemoveZone 스크립트를 붙힙니다



RemoveZone 스크립트에 OnTriggerEnter2D() 함수를 넣어 Enemy 태그가 있는 오브젝트를 삭제 시키는 스크립트를 짭니다



RemoveZone오브젝트에 isTrigger을 체크합니다


게임을 실행합니다




반응형
반응형

이번시간에는 적이 자동으로 생성되는 적 Spawn을 만들겠습니다

Enemy 오브젝트를 선택하고 프리팹을 만듭니다 Enemy 오브젝트를 폴더에 드래그하면 생성됩니다


그리고 Enemy프리팹에 좌표를 0으로 세팅합니다


게임화면에 있는 Enemy는 삭제합니다




빈 오브젝트를 만들어 이름을 SpawnManager라 합니다


스크립트를 생성하여 SpawnManager라 이름 붙힙니다


SpawnManager스크립트를 SpawnManager오브젝트에 붙힙니다




SpawnManager 스크립트를 작성합니다

적이 생성되는 지점을 카메라의 월드좌표를 정의 하는 함수 CreatePosition()을 만들고

시간에따라 자동으로 랜덤하게 적을 생성하게하는 SpawnEnemy()함수를 만들어 저장합니다



using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class SpawnManager : MonoBehaviour

{


    Vector3[] positions = new Vector3[5];


    public GameObject enemy;


    public bool isSpawn = false;


    public float spawnDelay = 1.5f;

    float spawnTimer = 0f;


// Use this for initialization

void Start ()

    {

        CreatePositions();

}

    void CreatePositions() // 적이 나오는 지점을 카메라의 월드좌표로 정의한다

    {

        float viewPosY = 1.2f;

        float gapX = 1f / 6f;

        float viewPosX = 0f;


        for(int i= 0; i < positions.Length; i++)

        {

            viewPosX = gapX + gapX * i;


            Vector3 viewPos = new Vector3(viewPosX, viewPosY, 0);


            Vector3 WorldPos = Camera.main.ViewportToWorldPoint(viewPos);


            WorldPos.z = 0f;


            positions[i] = WorldPos;

        }

    }


    void SpawnEnemy()//isSpawn이 true일때 적을 랜덤하게 생성

    {

        if (isSpawn == true)

        {

            if (spawnTimer > spawnDelay)

            {

                 int rand = Random.Range(0, positions.Length);

              

                 Instantiate(enemy, positions[rand], Quaternion.identity);

                           

                spawnTimer = 0f;

            }


            spawnTimer += Time.deltaTime;

        }


    }

// Update is called once per frame

void Update ()

    {

        SpawnEnemy();

    }

}






SpawnManager오브젝트를 선택하고 Enemy 프리팹을 연결하고 isSpawn을 체크합니다




반응형

+ Recent posts