반응형

이번시간에는 게임을 빌드 시켜 안드로이드 게임앱을 만들고 Player 에 터치 드레그 프로그램을 짜 보겠습니다


먼저 안드로이드 앱을 빌드하기위해선 

안드로디드 스튜디오의 SDK Manager 와 자바 프로그램에 Jdk 가 필요 합니다.

두 프로그램을 다운받아 설치하고 그림과 같이 

Edit ->Preferences -> External Tools  로 가서 연결합니다

자바프로그램은 꼭 환경변수 설정을 하셔야 됩니다 

자바 환경변수 설정은 인터넷에 많이 나오니 참고 하시면 됩니다 



그리고 각각 Sprite Renderer가 있는 오브젝트에 Sorting Layer를 붙힙니다

PC에서는 텍스쳐는 만든 순서 대로 해서 보이겠지만  스마트 기기에 들어가면 Layer 지정이 안되 있어 화면에 텍스쳐가 가릴지도 모릅니다 



그림과 같이 Sorting Layers를 만듭니다

 아래로 내려갈수록 텍스쳐 Layer가 위로 보이게 하는 것입니다


Player오브젝트를 선택하고 Sorting Layer를 Player로 합니다





Enemy 프리팹을 선택하여 Sorting Layer 를 Enemy 로 합니다


Explosion 프리팹을 선택하여 Sorting Layer effect 로 합니다


rocket 프리팹을 선택하여 Sorting Layer 를 Rocket로 합니다



스크립트를 생성하고 이름을 DragScript 라고 합니다


Player 에 연결하여 스마트 폰에서 손가락으로 touch 하고 drag 할수 있는 스크립트를 짭니다 



DragScript


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class DragScript : MonoBehaviour

{

    float deltaX, deltaY;


    Rigidbody2D rb;


    bool moveAllowed = false;


// Use this for initialization

void Start ()

    {

        rb = GetComponent<Rigidbody2D>();


        PhysicsMaterial2D mat = new PhysicsMaterial2D();

        mat.bounciness = 0.75f;

        mat.friction = 0.4f;

        GetComponent<CircleCollider2D>().sharedMaterial = mat;

}

// Update is called once per frame

void Update ()

    {

        if (Input.touchCount > 0)

        {

            Touch touch = Input.GetTouch(0);


            Vector2 touchPos = Camera.main.ScreenToWorldPoint(touch.position);


            switch (touch.phase)

            {

                case TouchPhase.Began:


                    if (GetComponent<Collider2D>() == Physics2D.OverlapPoint(touchPos))

                    {

                        deltaX = touchPos.x - transform.position.x;

                        deltaY = touchPos.y - transform.position.y;


                        moveAllowed = true;


                        rb.freezeRotation = true;

                        rb.velocity = new Vector2(0, 0);


                        rb.gravityScale = 0;


                        GetComponent<CircleCollider2D>().sharedMaterial = null;

                    }

                    break;

                case TouchPhase.Moved:

                    if (GetComponent<Collider2D>()== 

                        Physics2D.OverlapPoint(touchPos)&& moveAllowed)

                    {                                                    

                        rb.MovePosition(new Vector2(touchPos.x - deltaX, touchPos.y - deltaY));

                    }                                                                       //Player를 좌우로만 움직일경우  touchPos.y - deltaY 대신에  transform.position.y 을 넣는다

                    break;


                case TouchPhase.Ended:


                    moveAllowed = false;

                    rb.freezeRotation = false;

                    rb.gravityScale = 2;


                    PhysicsMaterial2D mat = new PhysicsMaterial2D();

                    mat.bounciness = 0.75f;

                    mat.friction = 0.4f;

                    GetComponent<CircleCollider2D>().sharedMaterial = mat;

                    break;                   

            }


        }

}

}







DragScript를 Player 전투기에 붙힙니다




File -> Build Settings 를 엽니다



Android를 선택하고 Switch Platform을 클릭합니다


Game 씬을 드래그하여 Snenes In Build 에 집어 넣습니다






Player Settings 를 눌러 인스팩터 값을 수정합니다


Default Icon을 게임에 적합한 그림을 찾아 넣습니다 되도록 정사각형의 그림을 찾아넣고 Resolution and Presentation 에 그림과 같이 Landscape Right 와 Landscape Left를 체크 해제합니다







Other Settings 로 들어가서 Package Name을 변경합니다 


설정이 끝나면 빌드를 눌러 압축 APK 파일이 생성되도록합니다


생성한 압축파일 아이콘이 각자에 압축프로그램에 따라 다를수 있습니다

저는 참고로 반디집을 깔아서 저렇게 나오네요 ㅎㅎ


각자 안드로이드 휴대폰에 파일을 넣고 실행시킵니다











프로젝트파일 다운로드 





반응형
반응형

이번시간은 재시작 버튼을 만들어 게임을 재시작하는 프로그램을 짜보겠습니다


Hierarchy 창에 오른쪽 마우스 버튼을 눌러 UI -> Button 을 생성합니다


생성된 Button을  GameOver 오브젝트  밑으로 자식으로 둡니다 그리고 속성을 그림과 같이 합니다



Button 밑에 Text Retry 라 하고 그림과 같이 속성 바꿉니다 




그리과 같이 Button 의 크기와 위치을 하게 합니다


ObjectManager 스크립트를 열어서 수정합니다


총알을 모두 비활성 시키는 함수 ClearBullets()를 만들어 저장합니다





SpawnManager 함수를 열고 수정합니다



적 리스트를 담을 리스트배열 변수를 만들고 생성되는 적오브젝트를 삭제 하는 함수를 만듭니다






TextContrl 스크립트를 열고 수정합니다


Restart()함수를 만들어 게임오버 텍스쳐를 비활성 시키고 코루틴함수 ShowReady()를 실행시켜 게임을 재시작 합니다



Player 스크립트를 열어 스크립트를 수정합니다


Player가 격파 되었을때 삭제 하지 않고 비활성으로 만듭니다

그리고 게임이 재시작 되었을때 Player 가 초기 지점에 올수 있도록 transform.position 을 playerPos에 맞춤니다




GameManager 스크립트를 열고 수정합니다 


게임 재시작 과 관련된 수정된 스크립트를 불러 들여 게임을 3초후 재시작 하고 Palyer를  활성 시킵니다 




Button 오브젝트를 선택하여 OnClick에 + 를 눌러 그림과 같이 합니다



GameManager 오브젝트를 드래그하여 OnClick()에 넣습니다



No Function에 GameManager -> ResetGame() 선택합니다 




게임을 실행 시킵니다 

Player가 격파되고  Retry 버튼이 생성되고 버튼 눌렸을때 3초후 게임이 실행되는지 확인 합니다




반응형
반응형

이번시간에는 총알이 계속 생성되고 삭제되면 메모리 누수현상이 일어나는 것을 방지 하기 위한 프로그램을 짜보겠습니다

그림과 같이 비행기 총알을 만들고 계속 삭제 하다 보면 기기에 메모리 누수 현상으로 기기에 무리를 가하게 됩니다

그래서 memory pool을 만들어 활용 하겠습니다

이것은 총알 뿐만 아니라 다른 이팩트나 적을 생성 할때도 같이 활용합니다 



빈 게임오브젝트를 만들어 ObjectManager라 이름 붙힘니다


ObjectManager 스크립트를 만듭니다




ObjectManager 스크립트를 오브젝트에 붙힘니다


ObjectManager 스크립트작성



using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class ObjectManager : MonoBehaviour

{

    public static ObjectManager instance;


    public GameObject rocketPrefab;


    List<GameObject> bullets = new List<GameObject>();// 총알을 담아둘 리스트를 만듬


    private void Awake()

    {

        if (ObjectManager.instance == null)

        {

            ObjectManager.instance = this;

        }

    }

    void Start ()

    {

        CreateBullets(5); //총알 5개를 생성

}

    void CreateBullets(int bulletCount)

    {

        for (int i = 0; i <  bulletCount; i++)

        {     

            // Instantiate()로 생성한 게임 오브젝트를 변수에 담고자 하면 ,"as + 데이터타임"을 명령어 뒤어 붙여 주어야 함

            GameObject bullet = Instantiate(rocketPrefab) as GameObject;


            bullet.transform.parent = transform;

            bullet.SetActive(false);


            bullets.Add(bullet);

        }

    }

    public GameObject GetBullet(Vector3 pos)

    {

        GameObject reqBullet = null;

        for (int i = 0; i < bullets.Count; i++) 

        {

            if (bullets[i].activeSelf == false)

            {

                reqBullet = bullets[i];// 비활성화 되어있는 총알을 찾아 reqBullet에 담아둠니다


                break;

            }

        }


        if (reqBullet == null)// 추가 총알 생성

        {

            GameObject newBullet = Instantiate(rocketPrefab) as GameObject;

            newBullet.transform.parent = transform;


            bullets.Add(newBullet);

            reqBullet = newBullet;

        }


        reqBullet.SetActive(true); //reqBullet활성


        reqBullet.transform.position = pos;


        return reqBullet;

    }

void Update () {

}

}







메모리 플 스크립트를 작성 하였습니다

메모리 플 스크립트를 총알에 활둉하기 위하여 총알과 연관되어 있는 스크립트를 수정하여야 합니다



Player 스크립트를 엽니다




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


Rocket스크립트를 엽니다 




Rocket 스크립트를 수정합니다


Enemy 스크립트를 엽니다


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


게임을 실행하여 총알의 메모리 풀이 제대로 동작하는지 확인합니다

이번시간은 총알을 활용한 메모리 풀을 만들어 보았는데 같은 방법으로 적기나 이팩트를 메모리 풀로 활용하면 데이터 메모리 누수를 막을 수 있습니다 

 


반응형
반응형

이번시간은 

슈팅게임이 시작하기 전에 게임시작을 알리는 텍스쳐를 만들고 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을 체크합니다




반응형
반응형

이번시간은 사운드 매니져를 만들어 전투기가 폭발하였을때 음향효과를 내어보겠습니다


먼저 Asset Store에 들어 감니다


free sfx package 를 찾기에 써서 Asset을 찾습니다


에셋을 임포트합니다




Assets폴더에  Free sfx pakage가 들어 갔습니다




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



SoundManage 오브젝트에 Audio Source를 붙힙니다


SoundManager란  새 스크립트를 만들고 바로 SoundManage 오브젝트에 붙힘니다




스크립트를 작성합니다

사운드매니저 자신의 인스턴스를 담을 정적변수를 만드는 스크립트입니다


SoundManage 오브젝트  SoundManager스크립트에 Asset에서 받은 Explosion_04를 붙힘니다 



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





OnTriggerEnter2D 함수에 SoundManager.instance.PlaySound();를 추가합니다



Enemy 스크립트도 수정합니다 



OnTriggerEnter2D 함수에    SoundManager.instance.PlaySound(); 를 추가 하고 게임을 실해 시키면 

사운드가 되는것을 볼수 있습니다





반응형
반응형


이번에는 적을 폭발시키고 로켓을 게임화면에서 멀어졌을때 로켓제거하는 스크립트를 만들어보겠습니다


먼저 Enemy오브젝트를 선택하고 스크립트를 수정합니다



변수에 explosion 을 만들고 그림과 같이 로켓과 접촉되었을때 이벤트 함수를 만듭니다





Enemy스크립트에 Explosion 프리팹을 연결합니다



게임을 실행시키면 동영상과 같이 적 비행기가 로켓을 맞고 사리지고 터지는 이팩트를 생성하는 모습을 볼수있습니다



그러나 한가지 문제가있는데 Player에서 생성되는 로켓이 계속 생성되어 누적되는 모습을 볼수있습니다 

이렇게 되면 PC의 메로리가 많이 차지하게 되서 나중에 PC에 메모리가 모자라는 경우가 생김니다


로켓 프리팹을 선택하고 Rocket스크립트를 수정합니다






Rocket 스크립트에 OnBecamelnvisible함수를 추가하고 로켓이 화면에서 안보이면 삭제되는 함수를 만듭니다


동영상에서 볼수 있듯이 화면에서 볼수 없는 로켓은 삭제되는 모습을 볼수있습니다



반응형
반응형

저번시간에 이어서 비행기 총알을 만들어 보겠습니다


projectiles폴더를 찾아 roket 텍스쳐를 선택한다음 inspector에 속성을 그림과 같이 바꿉니다


속성을 바꾼 텍스쳐를 Hierarchy에 드래그하여 Scene에 보이게 합니다



그리고 roket을 회전 시켜 z값을 90으로 합니다





그림과 같이 회전한 상태



Rocket 스크립트를 생성합니다


Rocket스크립트를 작성합니다





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


rocket 오브젝트를 선택하고 tog를 생성합니다




Rocket 태그를 생성합니다




rocket 오브젝트를 선택하고 태그를 Rocket을 선택합니다





태그를 붙히고 그림과 같이 Rigidbody2D 와 BoxCollider2D를 붙힙니다 그리고 Kinematic을 선택하고 isTrigger를 클릭합니다



그리고 roket 프리팹을 만들고 Hierachy에 있는 rocket 오브젝트는 삭제 합니다 





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


그림과 같이 빨간 부분을 추가 하였습니다

로켓을 0.5초간 생성하는 스크립트를 만듭니다





Player오브젝트를 선택하고 rocket 프리팹을 연결합니다


로켓이 잘나가는 것을 확임합니다



반응형
반응형

이번시간은 Player가 죽을때 폭발효과를 만들어 보겠습니다



먼저 explosion폴더에 있는 텍스쳐를 전부 선택하여 그림과 같이 인스팩터 속성을 바꿉니다


그리고 하이라키창으로 텍스쳐를 몽땅 끌고 오면 애니메이션을 저장하는 위치를 선정하고 이를을 explosion이라 합니다 그리고 하이라키에 있는 Explosion 을 선택하여  사이즈를 X 0.25 Y 0.25 로 바꿉니다 그림과 같이 인스팩터에 Animator가 생성되는 것을 볼수 있습니다




그림과 같이 애니메이션과 Animator controller생성


Explosion에  Animator에 Controller에 있는 것을 이름을 explosion으로 바꿉니다



애니메이션 explosion을 선택하고 Loop Time을 해제합니다



그리고 그림과 같이 Animator explosion에 Speed를 0.5로 바꿉니다


스크립트 폴더를 선택하고 Explosion스크립트를 만듭니다





그림과같이 0.8초후면 폭발이 사라지는 스크립트를 작성합니다


작성한스크립트를 Explosion 오브젝트에 붙혀넣습니다



Prefabs폴더를 만듭니다


Explosion 오브젝트를 방금만든 폴더에 드래그하여 프리팹을 만듭니다 


기존에 있던 하이라키에 Explosion 삭제 합니다





Player를 선택하고 그림과 같이 스크립트를 수정합니다

Instantiate(프리팹,생성위치,생성시 방향)

                         Quaternion.identity:프리팹이 가지고 있는 방향값을 그대로 사둉한다는 의미



Player를 선택하고 Explosion 프리팹을 드래스하여 Player 스크립트 Explosion 여백에 같다 꽂자 넣습니다



반응형
반응형

이번시간은 Player에 충돌체를 만들어 적과 충돌하였을때 Player가 사라지는 효과를 만들어 보겠습니다.


먼저 Enemy를 선택하고 Tag에서 Add Tag를 선택하여 Tag이름을 Enemy로 하고 Save한다


Enemy Tag가  생성 되면 Enemy Tag를 선택한다





Player 를 선택하고 Tag를 Player를 선택한다


Player선택하고 Component ->Physics 2D -> Circle Collider 2D를 선택하여 Collider2D를 생성한다


Player에 Circle Collider2D가 생성된 모습




Cire Collider2D에 Is Trigger를 체크한다



Component -> Physics 2D -> Rigidbody 2D 선택



RigidBody 2D 가 생성되면 Body Type을 Kinematic으로 바꾼다





Enemy를 선택하고 Player와 같이 한다



Player를 선택하고 스크립트를 수정한다 .

OnTriggerEneter2D 함수를 추가하여  Enemy Tag 와 충돌하였을때 사라지게 하는 코드를 입력한다



게임실행 화면

반응형
반응형

이번 이간은 적의 전투기를 움직여 보겠습니다

Assets에 있는 enemies 폴더에 boarder를 드래그하여 Herarchy에 올려 놓습니다

그리고 이름을 Enemy 라고 바꿉니다



Scripts폴더에 Enemy 스크립트를 생성합니다





public class Enemy : MonoBehaviour

{

    public float moveSpeed = 0.5f;


// Use this for initialization

void Start () {

}


    void MoveControl()

    {

        float yMove = moveSpeed * Time.deltaTime;

        transform.Translate(0, -yMove, 0);

    }

// Update is called once per frame

void Update ()

    {

        MoveControl();


    }

}


스크립트를 작성합니다



작성한 스크립트를 Enemy 오브젝트에 드레그 하여 붙힙니다 


게임을 실행하면 Enemy 오브젝트가 위에서 아래로 움직이는 것을 볼수 있습니다



반응형
반응형


플레이어 비행기를 움직이는 스크립트를 짜보겠습니다



스크립트 폴더에 스크립트를 생성하고 이름을 Player라고 합니다



스크립트를 열고  그림과 같이 스크립트를 짭니다 

여기서 Horizontal은 유니티 엔진에서 제공하는 좌우 input  GetAxis이고 좌표 X에 -1과 1을 대입하게 됩니다



using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Player : MonoBehaviour

{

    public float moveSpeed = 0.5f;


        


// Use this for initialization

void Start ()

    {

}

void MoveControl()

    {

        float moveX = moveSpeed * Time.deltaTime * Input.GetAxis("Horizontal");

        transform.Translate(moveX, 0, 0);

    }

// Update is called once per frame

void Update ()

    {

        MoveControl();


    }

}



Player 오브젝트를 선택하고 스크립트를 드래그하여 붙힙니다 그리고

키보드 A 와 D 키 와 키보드 좌우키를 움직이면 비행기가 움직입니다. 



반응형
반응형

유니티 슈팅게임 만들기 2장 배경스크롤(background scroller) 만들기 입니다 

 

그림과 같이 raw 파일에 있는 bg 텍스쳐를 선택하고 속성을 바꿉니다

 

 

GameObject -> 3DObject -> Quad 를 만들어 배경화면에 맞춥니다

그리고 이름을BackGround 로 바꿉니다

 

 

 

새로운 폴더를Assets에 만들어 이름을 Materials라하고 새로은 Material을 생성하여 이름을 BackGround라 하고  Shader를 Partcles/Alpha Blended로 바꿉니다 그리고  배경텍스쳐 bg 를 Select에 드래그하여 올립니다.

 

 

BackGround 메터리얼을 BackGround  오브젝트에 드래그 하여 붙입니다

 

BackGround 오브젝트를 선택하고 position을 0 ,0, -5 로 한다

 

 

 

배경이 화면과 같이 나오게 됩니다

 

 

 

BackGround 오브젝트를 선택하고 인스팩터에 offset y 값을 움직여보세요

배경이 스크롤 되는 것을 보게 될것입니다

 

새로운 폴더 Scripts를 만들과 스크립트를 생성하여 이름을 그림과 같이 합니다

 

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

 

 

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class BackGroundCtrl : MonoBehaviour

{

    public float scrollSpeed = 0.5f;

    Material myMaterial;

 

// Use this for initialization

void Start ()

    {

        myMaterial = GetComponent<Renderer>().material;

 

}

 

// Update is called once per frame

void Update ()

    {

        float newOffsetY = myMaterial.mainTextureOffset.y + scrollSpeed * Time.deltaTime;

        Vector2 newOffset = new Vector2(0, newOffsetY);

 

        myMaterial.mainTextureOffset = newOffset;

 

}

}

 

 

스크립트를 그림과 같이 드래그하여 붙힙니다

 

게임을 실행하면 배경이 위에서 아래로 스크롤 되는 것을 볼수있습니다

 

 

반응형
반응형

유니티 3D 엔진 다운로드 


게임 리소스 다운로드



유니티3D 작업창 


씬 뷰(Scene) : 게임 제작을 위해 제공되는 씬이(scene)라는 3차원 공간을 편집 하도록 도와 주는 공간


계층뷰(Hierarchy) : 씬에 배치된 물체의 정보를 보여주는 공간  계층구조로 구성되어 있어서 계층 뷰라고 합니다 


프로젝트 뷰(Project) : 프로젝트 제작에 재료로 사용되는 에셋을 관리하는 공간 


인스펙터 뷰(Inspector) : 물체 및 에셋의 상세한 속성을 지정할 때 사용되는 뷰 입니니다


게임뷰 (Game) : 게임 제작이 완료되면 툴바의 플레이 버튼을 눌러 활성화되는 뷰입니다 이곳에서는 제작된 게임이 어떻게 동작하는지 미리 볼수 있습니다


프로젝트 뷰에서 Assets 을 눌러 오른쪽 마우스를 누르면  Creat -> Folder 를 생성하고 그림과 같이 

이름을 Graphic  , Scenes 라고 합니다 


Scenes 폴더에 Scene을 생성하고 이름을 Game 이라 합니다 

 


                                         유니티를 열고 게임 리소스를 다운 받아 에셋에 Graphic 폴더를 만들어 게임 리소스를 다움받아 Graphic 폴더에 집어 넣습니다

리소스를 유니티 Assets -> Graphic 에 몽땅 드레그하여 집어 넣어요

그림과 같이 폴더들이 생기면 됩니다 




2. 그리고 Player폴더에 ship2을Hierarchy에 올려 놓고 이름을 Player로 바꿉니다



3.  Game화면에서 디스플레이를 그림과 같이 설정하고 바꿉니다




4.메인카메라(Main Camera)를 선택하고 인스펙터에 사이즈를 1  로합니다



그림과 같은 모습이 되도록합니다


To bo continue

반응형

+ Recent posts