신입 개발자 공부 과정

Unity - CatEscape 물체 피하기 게임 본문

C#/수업 내용

Unity - CatEscape 물체 피하기 게임

Lewisjkim 2022. 1. 18. 16:30
*프리팹(prefab)=설계도 / 게임 오브젝트를 파일화 된것 (재사용하기 위해)
*프리팹을 hierachy창에 가져가면 인스턴스화 하면서 packing되어있다(unpack할수도있다)
*프리팹 베리언트=일부 변화를 할 수 있는 프리팹

 

목표= 플레이어를 움직여 떨어지는 화살을 피하는 게임
Action=
1. 화면 중앙에 플레이어 표시하고
2. 오른쪽 위에는 HP게이지를 표시
3. 화살을 랜덤으로 떨어지게 생성한다
4. 좌우 화살표 버튼으로 움직여 화살을 피하게한다
5. 화살에 맞으면 HP게이지가 줄어든다

PC에서 할경우

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

public class GameDirector : MonoBehaviour
{
    GameObject hpGauge;
    // Start is called before the first frame update
    void Start()
    {
        this.hpGauge = GameObject.Find("hpGauge");
    }

    
    public void DecreaseHp()
    {
        this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ArrowGenerator : MonoBehaviour
{
    public GameObject arrowPrefab;
    float span = 1.0f;
    float delta = 0; //시간 누적
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        this.delta += Time.deltaTime;
        if(this.delta >= this.span)
        {
            this.delta = 0;

            GameObject go = Instantiate<GameObject>(this.arrowPrefab);
            int px = Random.Range(-6, 7);
            go.transform.position = new Vector3(px, 7, 0);
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ArrowController : MonoBehaviour
{
    GameObject player;
    // Start is called before the first frame update
    void Start()
    {
        this.player = GameObject.Find("player");
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(0, -0.1f, 0);//속도 -0.1로 떨어진다

        if(transform.position.y< -4.03f)//-4.03에 도착하면 사라진다
        {
            Destroy(gameObject);
        }
        Vector2 p1 = transform.position;//화살의 중심 좌표
        Vector2 p2 = this.player.transform.position;//플레이어의 중심 좌표
        Vector2 dir = p1 - p2;
        float d = dir.magnitude;//중심간의 거리
        float r1 = 0.5f;//화살의 반경이 0.5
        float r2 = 1.0f;//플레이어의 반경이 1.0

        if(d<r1+r2)//화살의 반경과 플레이어 반경을 합친 값이 2개의 값의 거리보다 적으면(충돌)
        {
            GameObject director = GameObject.Find("GameDirector");//gamedirector에게 맞으면 피깍이게
            director.GetComponent<GameDirector>().DecreaseHp();

            Destroy(gameObject);//화살을 제거
        }

    //    private void OnDrawGizmos()
    //{
        
    //}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    public void LButtonDown()
    {
        transform.Translate(-2, 0, 0);
    }
    public void RButtonDown()
    {
        transform.Translate(2, 0, 0);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))//왼쪽으로 3 움직인다
        {
            transform.Translate(-2, 0, 0);
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))//오른쪽으로 3 움직인다
        {
            transform.Translate(2, 0, 0);
        }
    }
}


CatEscape.apk
18.07MB