게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 3주차 03/26

정광훈(Unity_9기)·2025년 3월 26일

TIL (Today I Learned)

목록 보기
6/110

●고양이 만들기 - 반복 생성

public GameObject normalCat; // normalCat 게임 오브젝트를 변수로 만들어준다.
public GameObject fatCat; // fatCat 게임 오브젝트를 변수로 만들어준다.
public GameObject pirateCat; // pirateCat 게임 오브젝트를 변수로 만들어준다.

void Start()
{
    InvokeRepeating("MakeCat", 0f, 1f); // 고양이를 반복적으로 생성 - 시작부터 1초마다 생성
}

void MakeCat() // 게임 오브젝트를 생성해 주는 로직
{
    Instantiate(normalCat);
	// 레벨이 오를 때마다  등장하는 고양이가 추가 됨
    if (level == 1) // lv.1 20% 확률로 고양이를 더 생성함
    {
        int p = Random.Range(0, 10); // 랜덤으로 0 ~ 9까지 퍼센트 생성
        if (p < 2) Instantiate(normalCat); // p가 2보다 작다면 고양이를 더 생성해라 0 ~ 9까지 10중에  0,1만 해당하기 때문에 20%에 해당한다
    }
    else if (level == 2) // lv.2 50% 확률로 고양이를 더 생성함
    {
        int p = Random.Range(0, 10); // 랜덤으로 0 ~ 9까지 퍼센트 생성
        if (p < 5) Instantiate(normalCat); // p가 5보다 작다면 고양이를 더 생성해라 0 ~ 9(10가지)중에  0 ~ 4(5가지)만 해당하기 때문에 50%에 해당한다
    }ㅁ
    else if (level == 3) // lv.3 뚱뚱한 고양이를 생성함
    {
        Instantiate(fatCat);
    }
    else if (level == 4) // lv.4 해적 고양이를 생성함
    {
        Instantiate(pirateCat);
    }
}

●레벨 구성하기 - 레벨업 표시, 반영하기
3번에서 생성된 GameObject를 Level로 이름바꾼다.1. Level을 클릭 후 2번을 눌러 Reset하고 Rect Transform(3번)에 필요한 값을 입력한다.
2. 1번은 우클릭하고 UI -> Image를 생성
Image에 Images 파일의 cat_level 이미지를 적용

으로 설정해 줍니다.
2. 1번을 만들고 2번을 세팅하고 복붙해서 Front를 만들고 Front의 2번을 수정
1. UI > Legacy > Text를 Level 안 Image에 생성
2. Image안에 Text를 눌러 Rect Transform을 수정


표시와 반영하는 코드같이 묶음
<GameManager.cs>

using UnityEngine.UI; // 레벨 값을 UI에 표시하기 위해 사용

public RectTransform levelFront; 
public Text levelTxt; // level 값을 표시해줄 수 있는 텍스트를 가져옴

int level = 0; // 레벨
int score = 0; // 점수
public void AddScore() // 점수가 추가될 때
{
    score++; // 점수가 계속 더해진다
    level = score / 5;
}
public void AddScore() // 점수가 추가될 때
{
    score++; // 점수가 계속 더해진다
    level = score / 5;
    levelTxt.text = level.ToString(); // 레벨 값을 문자로 표기
    levelFront.localScale = new Vector3((score - level * 5) / 5.0f, 1f, 1f); // 레벨 게이지인 x축만 변경
}

<cat.cs>

bool isFull = false; // 배부른가? = 아니오
void Update()
{
	if(energy < full) // 배고플 때
	{
    	transform.position += Vector3.down * speed; // Vector3.down은 (0, -1, 0)이기에 y축이 -1씩 감소된다. / 속도를 늦추기 위해 0.05를 곱함

    	if (transform.position.y < -16.0f) // 고양이의 y축이 -16보다 작을 때
    	{
        	GameManager.Instance.GameOver(); // GameOver를 실행
    	}
	}
	else // 배부를 때
	{
    	if(transform.position.x > 0) // 고양이의 x축이 0보다 클 때
    	{
        	transform.position += Vector3.right * speed; // 오른쪽으로 퇴장
    	}
    	else // 0보다 작을 때
    	{
        	transform.position += Vector3.left * speed; // 왼쪽으로 퇴장
    	}
	}
}

private void OnTriggerEnter2D(Collider2D collision)
{
	if(collision.gameObject.CompareTag("Food")) // Tag가 Food인 게임 오브젝트와 충돌 시
 	{
    	if (energy < full) // 에너지가 배부름보다 작을 때 (배고플 때)
     	{
        	energy += 1.0f; // 에너지를 1씩 더한다.
         	front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 배부름(x축)이 (energy / full)만큼 찬다 / x가 1이 되었을 때 배부른 상태가 됨
         	Destroy(collision.gameObject); // Cat과 충돌 시 파괴

         	if(energy == 5.0f) // 배부를 때
         	{
             	if(!isFull) // 고양이가 배부르지 않을 때 실행 / !ifFull로 대체 가능
             	{
                 	isFull = true; // 배부르다
                 	hungryCat.SetActive(false); // 배고픈 고양이 게임 오브젝트 끔
                 	fullCat.SetActive(true); // 배부른 고양이 게임 오브젝트 켬
                 	Destroy(gameObject, 3.0f); // 3초 뒤 고양이 파괴
                 	GameManager.Instance.AddScore(); // GameManager에 있는 AddScore를 호출 / 고양이가 배부르면 스코어가 오름
             	}

         	}
     	}
 	}
}

업로드중..Prefabs에 있는 Cat들을 클릭하고 Cat(Script)에 있는 Type을 알맞게 바꿔준다.

0개의 댓글