-
[TIL] 고양이 밥 주기 게임게임 기획/내일배움캠프 2025. 4. 10. 21:02
프로젝트 시작에 앞서서 아직도 완벽히 이해가 안 가는 각 코드별 기능들을 공부했다.
계속 헷갈리거나 모르는 것들이 생기겠지만 일단 당장 알아보고 정리한 것들 위주로 적어두겠다.
- 자료형 변수이름 = 값;
bool isFull = false;
- 함수 = 메소드
접근제한자 반환형 함수이름(매개변수) { 실행할 코드 }
private void Start( ) {,,,}
키워드 설명 void 아무것도 반환하지 않음 private 자기 클래스 안에서만 사용 가능
다만 [SerializeField]를 앞에 붙여 사용하면 Inspector창에서 확인 가능public 다른 클래스에서도 호출 가능
함수이름 실행순서 설명 Awake() 게임 시작 직전 변수 초기화에 적합 Start() 게임 시작 시 1번 실행 오브젝트 활성화 이후 실행 됨 Update() 매 프레임 실행 이동, 반복 검사 등 OnCollisionEnter2D
OnTriggerEnter2D충돌 발생 시 실행 충돌 반응 처리용 Background를 Object 추가가 아닌 카메라 설정에서 바꿀 수 있다.
Rigidbody의 Body Type을 변경해주면 중력의 영향을 받지 않게 해준다.
탄알이랑 오브젝트가 겹쳐질 때 중력의 영향으로 탄알이 떨어지는 것을 방지해준다.
(나의 경우 탄알이 오브젝트 사이에 끼어서 같이 이동했는데 바디타입 변경 후 해결 됨)
대신 이 경우 OnCollisionEnter2D는 사용할 수 없다. OnTriggerEnter2D(Collider2D collision) 을 사용해주면 된다.
선생님 따라서 만들었는데 갑자기 오브젝트 2개가 겹쳐서 나타나는 오류가 생겼다.
Prefabs에 적용한 이후부터 생긴 오류라 어떻게 해결할지 고민하다가 새로운 bool 함수를 이용해 해결했다.
(&&은 '그리고' 라는 뜻)
bool isFull = false; // 아직 고양이가 배부른 상태가 아닐 때 private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.CompareTag("Food") && !isFull) // 충돌한 오브젝트가 Food이고 아직 isFool이 false일 때 실행 => 이미 배부른 상태일 땐 Food에 반응하지 않음 => 중복으로 바뀌는 것 차단 { if (energy < full) // 아직 에너지가 다 안 찼을 때 { energy += 1.0f; // 에너지 1만큼 증가 front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // hp바의 길이를 현재 퍼센트 비율로 줄임 Destroy(collision.gameObject); // 부딪힌 밥을 씬에서 제거 } if (energy >= full) // 만약 에너지가 다 찼다면 { isFull = true; // 고양이가 더 이상 밥에 반응하지 않게 상태를 변경 => 한 번만 발동하게 막음 hungryCat.SetActive(false); // hungryCat 오브젝트 비활성화 fullCat.SetActive(true); // fullCat 오브젝트 활성화 } } }
이렇게 써서 해결완료
if (transform.position.y < -16.0f) { GameManager.Instance.GameOver(); }
OnTrigger2D는 충돌 순간에만 실행되는거고 Update는 프레임별로 실행이니까 위치처럼 지속적인 상태 체크가 필요할 땐 Update문에 쓰는 습관을 들여야겠다.'게임 기획 > 내일배움캠프' 카테고리의 다른 글
[TIL] C# 기초 1 (1) 2025.04.14 [TIL] 실수 수정 (2) 2025.04.14 [TIL] 풍선을 지켜라 2D 게임 만들기 (0) 2025.04.09 [TIL] Unity로 2D 게임 만들기 과제 (1) 2025.04.08 [TIL] Unity로 2D 게임 만들기 (0) 2025.04.07