int level = 0;
int cat = 0;
public void addCat()
{
cat += 1; // 고양이를 다섯마리 제거하면 1레벨이 상승
level = cat / 5; // 0.2, 0.4~ 이렇게 늘어나지만 정수 / 정수의 값이 정수가 아닐 경우 무시하기 때문에
5 / 5의 값 1이 되었을 때 1레벨이 상승하는 결과가 나타난다.
}
bool isFull = false; //
if (isFull == false)
{
gameManager.I.addCat();
gameObject.transform.Find("hungry").gameObject.SetActive(false);
gameObject.transform.Find("full").gameObject.SetActive(true);
isFull = true;
}
addCat()
함수를 불러버리면 반복 실행되어 레벨이 계속해서 올라가게 된다.bool
을 사용하여 한 번 실행이 되면 isFull=true;
로 만들어주어 멈춰준다.using UnityEngine.UI; // text 기능을 사용하기 위해 추가
public Text levelText;
public GameObject levelFront;
public void addCat()
{
cat += 1;
level = cat / 5;
levelText.text = level.ToString(); // 레벨을 문자로 출력
levelFront.transform.localScale = new Vector3((cat - level * 5) / 5.0f, 1.0f, 1.0f);
} // front가 0.2, 0.4~ 순차적으로 채워지게 된다.
// gameManager.cs
void makeCat()
{
Instantiate(normalCat);
if (level == 1)
{
float p = Random.Range(0, 10); // 0~10 중 임의의 숫자를 p로 초기화
if (p < 2) Instantiate(normalCat); // p가 2보다 작을 때 nomalCat을 추가로 생성
}
else if (level >= 2)
{
float p = Random.Range(0, 10);
if (p < 5) Instantiate(normalCat); // 레벨이 높으니 더 많이 !
}
}
// cat.cs
public int type;
public int type;
코드를 추가하여 각 타입 별로 코드를 적용할 수 있다.// cat.cs
void Start()
{
float x = Random.Range(-8.5f, 8.5f);
float y = 30.0f;
transform.position = new Vector3(x, y, 0);
if (type == 1) // type:1인 fatCat은 energy가 10
{
full = 10.0f;
}
}
// cat.cs
void Update()
{
if (energy < full)
{
if (type == 0) // type:0이라면 내려오는 속도가 y-0.03
{
transform.position += new Vector3(0.0f, -0.03f, 0.0f);
}
else if (type == 1) type:1이라면 내려오는 속도가 y-0.015
{
transform.position += new Vector3(0.0f, -0.015f, 0.0f);
}
if (transform.position.y < -16.0f)
{
gameManager.I.gameOver();
}
}
else
{
if (transform.position.x > 0)
{
transform.position += new Vector3(0.05f, 0.0f, 0.0f);
}
else
{
transform.position += new Vector3(-0.05f, 0.0f, 0.0f);
}
Destroy(gameObject, 3.0f);
}
}
if
문과 else
문 사용에서 약간의 혼동이 있었다.. C# 기본기가 부족함을 느낀다.// gameManager.cs
void makeCat()
{
Instantiate(normalCat);
if (level == 1)
{
float p = Random.Range(0, 10);
if (p < 2) Instantiate(normalCat);
}
else if (level == 2)
{
float p = Random.Range(0, 10);
if (p < 5) Instantiate(normalCat);
}
else if (level >= 3) // 레벨 3 이상부터 fatCat을 등장시킨다.
{
float p = Random.Range(0, 10);
if (p < 6) Instantiate(normalCat);
Instantiate(fatCat);
}
}
하지만 replay 버튼 클릭 시 food가 생성되지 않는다.
// gameManager.cs
void Start()
{
InvokeRepeating("makeFood", 0.0f, 0.1f);
InvokeRepeating("makeCat", 0.0f, 1.0f);
Time.timeScale = 1.0f; // gameOver()에서 멈춰놓았던 시간을 다시 흐르게 한다.
}
// cat.cs - void update - if문 아래
if (transform.position.y < -16.0f)
{
Destroy(gameObject); // y=-16.0에서 오브젝트 삭제
gameManager.I.gameOver();
}
// gameManager.cs
void makeFood()
{
float x = dog.transform.position.x;
float y = dog.transform.position.y + 2.0f;
Instantiate(food, new Vector3(x, y, 0), Quaternion.identity);
Instantiate(food, new Vector3(x-3.0f, y, 0), Quaternion.identity);
Instantiate(food, new Vector3(x+3.0f, y, 0), Quaternion.identity);
}
각 코드들에 대한 이해도가 늘어날 수록 기존의 예제에서 기능을 추가하고 변경하고 싶은 욕구가 계속해서 생긴다. 상당히 재밌고 나중에는 내가 만든 이미지들로도 만들어 보고 싶다!
와 멋지십니다!!