
강의를 보고 고양이 게임을 만들었을 때, 고양이가 full 상태가 되어 옆으로 움직이기 시작한 이후 한 번 더 먹이를 주어야 스코어가 올라가는데
이 부분을 full 상태가 됐을 때, 스코어가 올라가면서 옆으로 움직이게 하고 싶어서 코드를 수정해보았습니다.
다른 질문들을 참고하여 cat.cs에서 OntriggerEnter2D 함수의
isFull 조건문과 addCat, setActive 부분을 삭제하고
void Update() 함수의 else 문으로 옮겼습니다.
이렇게 수정했을 경우, 제가 원하는 대로 실행은 되는데 수정해야 할 점이나 더 좋은 방법이 있는지 궁금해 여쭤보고 싶습니다.

작성한 코드 및 에러 메세지
cat.cs 의 전체 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cat : MonoBehaviour
{
float full = 5f;
float energy = 0f;
bool isFull = false;
public int type;
// Start is called before the first frame update
void Start()
{
float x = Random.Range(-8.5f, 8.5f);
float y = 30f;
if (type == 1)
{
full = 10f;
}
transform.position = new Vector3(x, y, 0);
}
// Update is called once per frame
void Update()
{
if (energy < full)
{
if (type == 0)
{
transform.position += new Vector3(0, -0.02f, 0);
}
else if (type == 1)
{
transform.position += new Vector3(0, -0.01f, 0);
}
else if (type == 2)
{
transform.position += new Vector3(0, -0.05f, 0);
}
if (transform.position.y < -16f)
{
gameManager.I.gameOver();
}
}
else
{
if (isFull == false) //OnTriggerEnter2D 함수의 else 문을 옮김
{
gameManager.I.addCat();
gameObject.transform.Find("hungry").gameObject.SetActive(false);
gameObject.transform.Find("full").gameObject.SetActive(true);
isFull = true;
}
if (transform.position.x > 0)
{
transform.position += new Vector3(0.05f, 0, 0);
}
else
{
transform.position += new Vector3(-0.05f, 0, 0);
}
Destroy(gameObject, 3f);
}
}
void OnTriggerEnter2D(Collider2D coll)
{
if (coll.gameObject.tag == "food")
{
if (energy < full)
{
energy += 1f;
Destroy(coll.gameObject);
gameObject.transform.Find("hungry/Canvas/front").transform.localScale = new Vector3(energy / full, 1.0f, 1.0f);
}
// 원래 else문 위치
}
}
}
