ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 문에 작성해서 실행 안 되는 오류 발생.
    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
Designed by Tistory.