●고양이 만들기 - 반복 생성
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을 알맞게 바꿔준다.