본문 바로가기
게임 개발 수업

스파르타 코딩 3주차 숙제 (해적 고양이 만들기)

by parkjongdi 2024. 8. 8.
728x90
반응형

해적 고양이 만들기

  • Lv.4 에서 해적고양이를 등장시킵니다! 준비하는 것은 튜터와 지금! 함께할께요 😎
  • 해적고양이의 속성
    • normalCat 보다 사이즈가 작음 scale: x:0.8, y:0.8
    • normalCat 보다 빠르게 내려옴 -0.1f
  • 해적고양이 준비하기 (튜터와 함께)
    1. normalCat 프리팹을 가져와서, 오른쪽 키 → unpack 합니다.

cat.cs

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

public class Cat : MonoBehaviour
{

    public GameObject hungrycat;
    public GameObject Fullcat;
    public GameObject pirateCat;

    public RectTransform front;

    public int type;

    float Full = 5.0f;
    float energy = 0.0f;
    float speed = 0.05f;

    bool isFull = false;
    // Start is called before the first frame update
    void Start()
    {
        float x = Random.Range(-9.0f, 9.0f);
        float y = 30.0f;
        transform.position = new Vector2(x, y);

        if(type ==1)
        {
            speed = 0.05f;
            Full = 5f;
        }
        else if (type == 2)
        {
            speed = 0.02f;
            Full= 10f;
        }
        else if (type == 3)
        {
            speed = 0.1f;
            Full = 3f;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (energy < Full)
        {
            transform.position += Vector3.down * speed;
            if(transform.position.y < -16.0f)
            {
                GameManager.Instance.GameOver();
            }
        }
        else
        {
            if(transform.position.x > 0)
            {
                transform.position += Vector3.right * 0.05f;
            }
            else
            {
                transform.position += Vector3.left * 0.05f;
            }
        }
    }


    private void OnTriggerEnter2D(Collider2D collision)

    {

        if (collision.gameObject.CompareTag("Food"))

        {

            Debug.Log(energy);

            if(energy < Full)

            {

                energy += 1.0f;

                front.localScale = new Vector3(energy / Full, 1.0f, 1.0f);

                Destroy(collision.gameObject);

           

                if(energy == 5.0f)

                {

                    if(!isFull)

                    {
                        isFull = true;
                        hungrycat.SetActive(false);
                        Fullcat.SetActive(true);
                        Destroy(gameObject, 3.0f);
                        GameManager.Instance.AddScore();

                    }

                }

            }

        }

    }
}

GameManager.cs

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

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public GameObject normalCat;
    public GameObject fatCat;
    public GameObject pirateCat;
    public GameObject retryBtn;
   
    public RectTransform levelFront;
    public Text levelTxt;

    int level = 0;
    int score = 0;


    private void Awake()
    {
        if(Instance == null)
        {
            Instance = this;
        }
        Application.targetFrameRate = 60;
        Time.timeScale = 1.0f;
    }
    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating("MakeCat", 0f, 1f);
       
    }

    // Update is called once per frame
    void Update()
    {
       
    }

    void MakeCat()
    {
        Instantiate(normalCat);

        // lv.2 20% 확률로 고양이를 더 생성해준다.
        if(level == 1)
        {
            int p = Random.Range(0, 10);
            if(p < 2) Instantiate(normalCat);
        }
        else if(level == 2)
        {
            // lv.2 50% 확률로 고양이를 더 생성해준다.
            int p = Random.Range(0, 10);
            if(p < 5) Instantiate(normalCat);
        }
        else if(level ==3)
        {
            // lv.3 뚱뚱한 고양이를 생성해준다.
            Instantiate(fatCat);
        }
        else if (level >= 4)
        {
            float p = Random.Range(0, 10);
            if (p < 5) Instantiate(normalCat);

            Instantiate(fatCat);
            Instantiate(pirateCat);
        }
    }

    public void GameOver()
    {
        retryBtn.SetActive(true);
        Time.timeScale = 0f;
    }

    public void AddScore()
    {
        score++;
        level = score / 5;

        levelTxt.text = level.ToString();
        levelFront.localScale = new Vector3((score - level * 5) / 3.0f, 1f, 1f);
    }
}
728x90
반응형