2025.01.10 (금)

윤혜진·2025년 1월 10일
0

TIL

목록 보기
3/42
post-thumbnail

📍오늘 목표

  • 3주차 강의 - 고양이 밥주기 게임

📍배운 것

  • 이미 등록한 prefab은 overrides를 통해 수정/갱신할 수 있다
  • rigidbody의 Body Type (Kinematic로 바꾸면 중력의 영향을 받지 않는다)

📍겪은 어려움

  • 고양이의 프레임이 겹쳐 등장함
    • fatcat의 하위인 full과 hungry에 애니메이션과 이미지를 넣어주어야 했는데 fatcat자체에도 이미지를 넣는 바람에 겹치는 현상이 발생한 거였음
  • normalCat과 FatCat의 Type를 그냥 숫자 말고 enum문으로 표현해보려고 했는데 살짝 헤맴 (하지만 해냄)
    • enum문으로 표현하면 Type을 숫자 말고 Normal과 Fat으로 선택할 수 있어서 직관적이고 헷갈릴 여지가 적다. 자주 써먹어도 좋을듯!
  • fatCat에 닿으면 front가 할당되지 않았다는 오류가 뜸 (할당은 잘 함)
    • 동일한 cat 스크립트 2개가 붙어있었음…
  • fatCat이 퇴장하지 않는 문제 발생
    • isTrigger를 체크하지 않아 문제였음 (제발)
  • fatCat의 퇴장이 더 느림 (왜??)
    • normalCat은 바로바로 퇴장하는데 유독 fatCat만 딜레이가 생김
    • 3초 후에 사라지는 것은 동일
    • 클론이 너무 많아 렉이 발생하는 건가 싶어 fatCat을 일찍 등장시켜 봤는데도 동일한 현상 나타남
    • Update에서 energy를 주기적으로 확인하던 코드를 빼고 OnTriggerEnter2D안에서 돌아가던 코드와 합쳐줌 > 이후 빠릿빠릿 잘 퇴장함! (코드 아래 첨부)
public enum CAT_STATE
{
   stay,   	    //아직 퇴장불가
   exit_left,   //퇴장가능: 왼쪽으로
   exit_right   //퇴장가능: 오른쪽으로
}
public class Cat : MonoBehaviour
{
	private CAT_STATE catState = CAT_STATE.stay;
}
void Update()
{
   /*
    * 원래 여기에는 if (energy < full) 로
    * 고양이가 배부른지 계속 확인하는 코드가 있었지만
    * enum으로 고양이의 상태를 저장하는 변수를 새로 만들어
    * OnTriggerEnter2D안에서 고양이의 상태가 변경될 수 있게 함
    * 때문에 Update에는 상태를 확인하고 이동하는 코드만 존재함
    */

   //만약 고양이의 상태가 exit_right라면
   if (catState == CAT_STATE.exit_right)
   {
       //오른쪽으로 퇴장하라
       transform.position += Vector3.right * 0.05f;
   }
   //만약 고양이의 상태가 exit_left라면
   else if (catState == CAT_STATE.exit_left)
   {
       //왼쪽으로 퇴장하라
       transform.position += Vector3.left * 0.05f;
   }
   //아직 퇴장해야 할 때가 아니라면
   else if (catState == CAT_STATE.stay)
   {
       //앞으로 계속 이동
       transform.position += Vector3.down * speed;
       if (transform.position.y < -16.0f)
       {
           GameManager.Instance.GameOver();
       }

   }
   else
   {
       Debug.Log("catState error");
   }


}//Update End
//고양이가 배부른데, 아직도 stay 상태라면
if (catState == CAT_STATE.stay)
{
   /*
    * 원래 이 if문은 if (!isFull)이었지만
    * 퇴장 딜레이 문제로 코드를 수정하는 과정 중
    * 고양이의 상태를 담을 catState이라는 enum 변수를 만들면서
    * isFull대신 CAT_STATE.stay를 사용하게 됨
    */

   //만약 고양이가 중앙(0)을 기준으로 오른쪽(+)에 치우쳐 있다면
   if (transform.position.x > 0)
       //'오른쪽으로 퇴장' 상태로 변경
       catState = CAT_STATE.exit_right;  

   //그렇지 않다면
   else
       //'왼쪽으로 퇴장' 상태로 변경
       catState = CAT_STATE.exit_left;   

}

📍회고 및 반성

  • TIL 초안 작성을 마치고 좀 더 내용을 추가하고 싶다는 욕심을 부리다가 결국 하루를 넘김 (추가도 제대로 안 함…)
  • 앞으로는 완벽하지 않더라도 당일에 TIL을 올릴 것.
  • 왜냐하면 그게 TIL이니까……

0개의 댓글

관련 채용 정보