📍오늘의 학습 키워드

  • 1주차 미니 프로젝트 진행 (3)
    • 히든 스테이지 작업 마무리

📍학습 내용

  • 히든 스테이지 작업
    • 씬 오브젝트를 통해 대부분의 컴퍼넌트에 접근 가능하게 해주었다. (Scene_Hidden.cs)
      public class Scene_Hidden : Scene_Base
      {
          public HiddenCharacter[] characters;
          public HiddenCards[] cards;
      
          public Hidden_StageButton stageButton;
          public Hidden_TitleButton titleButton;
      
          public SpeechBubble bubble;
      
          public Text titleText;
      
          public int whoseTurn;
          public int turnCount;
          public float speed = 1.0f;
      
          public bool isEnd = false;
       }
    • 캐릭터와 카드에 각각 index값을 부여해주고, 카드에 달린 버튼이 눌렸을 때 캐릭터와 카드의 index 값을 비교하게 만들었다. (HiddenCards.cs)
      public void OnClickCard()
      {
          //캐릭터와 카드가 같은 index를 가지고 있는지 확인
      
          //만약 캐릭터의 turn과 card가 같은 인덱스를 가지고 있다면
          if (hidden.whoseTurn == (int)index)
          {
              //정답입니다!
              hidden.bubble.CorrectText();
              hidden.bubble.RequestText();
      
              //캐릭터가 점프
              hidden.characters[(int)index].Jump();
      
              //돌아가게 만들기
              hidden.characters[(int)index].isBack = true;
              
              //만약 아직 다른 사람이 남아있다면
              if (hidden.whoseTurn < 4) 
              {
                  //타음 턴으로 넘겨주기
                  hidden.whoseTurn++;
      
                  //앞자리까지 부르기
                  hidden.characters[hidden.whoseTurn].isGoing = true;
              }
      
              hidden.turnCount++;
      
          }
          //만약 다른 인덱스를 가지고 있다면
          else
          {
              //틀렸습니다
              hidden.bubble.WrongText();
              hidden.bubble.RequestText();
          }
      
      }
    • 카드 스크립트에서 bool 변수의 상태를 변경시키고, 각각의 캐릭터 스크립트에서 입장/퇴장 메서드가 실행되도록 만들었다. (HiddenCharacter.cs)
      private void Update()
      {
          if (isGoing)
          {
              if (hidden.whoseTurn == 0)
              {
                  Go();
              }
              else
              {
                  Invoke("Go", hidden.speed);
              }
          }
      
          if (isBack)
          {
              Invoke("Back", hidden.speed);
          }
      }

📍겪은 어려움

  • rigidbody를 이용한 점프
    • 팀원 분께서 만들어주신 점프하는 캐릭터들을 써보고 싶어서 수정하고 사용하려고 했더니, 캐릭터가 점프를 하다못해 로켓처럼 발사되는 오류가 발생했다.
    • 알고 보니 이 캐릭터는 rigidbody를 이용해서 점프하는 모션을 취할 수 있었던 건데, 내가 이걸 position 값을 이용한 이동처럼 생각해 버려서 이 코드를 Update에 넣었다가 끝도 없이 날아가게 되어버린 것.
    • 팀원 분께 조언을 받은 대로 Update에서 해당 코드를 꺼내고, OnClick 메서드에서 한 번만 실행되도록 수정했더니 잘 점프하게 되었다.
    • 아래는 rigidbody를 이용해서 점프하게 만들었던 코드:
      public Rigidbody2D children;
      
      void Start()
      {
          children = GetComponent<Rigidbody2D>();
      }
      public void Jump()
      {
          children.AddForce(150.0f * Vector2.up);
      }
  • Collider 오류

    • 캐릭터가 점프하는 것처럼 말풍선도 점프를 하면 좋을 것 같아서 해당 기능을 캐릭터들과 비슷하게 구현해보려다 거하게 실패했다.
    • 아래는 해당 오류 영상 (팀원분들 미안해요):
    • 말풍선은 캐릭터들과 달리 UI기 때문에 캔버스 공간에 Collider를 하나 더 만들어 주었는데, 그 때문에 해당 오류가 발생한 듯 했다.
    • 아무래도 말풍선까지 점프를 시키려면 말풍선도 캐릭터들처럼 캔버스 공간에서 월드 공간으로 이동시켜주어야 할 것 같은데, 그 과정에서 또 다른 오류가 일어나면 시간을 너무 많이 잡아먹을 것 같아 이 작업은 후순위로 미뤄두기로 했다.

📍회고 및 반성

  • 히든 스테이지에 넣고 싶은 기능이 정말 많았는데, 막상 구현을 하려고 하니 잘 되지 않았다. 강의를 그대로 따라 하는 것과 내가 직접 생각해서 코드를 구현하는 것은 정말 다른 일임을 새삼 느꼈다.
  • 어느 정도 기능이 구현되고 나니 내 코드가 더러운 게 눈에 보여서 많이 아쉬웠다.
  • 코드를 짤 때는 항상 어떤 식으로, 어떤 구조로 만들 건지 먼저 구체적으로 생각해 놓은 뒤에 작업을 시작해야 한다… 는 소리를 정말 많이 들었는데, 아는 것과 별개로 막상 무언가를 만들려고 하면 막연한 마음만 들고 잘 되지 않는 것 같다.
  • 많이 공부하고, 코딩도 많이 하다 보면 언젠간 할 수 있게 되는 걸까? 일단은 파이팅🥲👍

1개의 댓글

comment-user-thumbnail
2025년 4월 10일

마음에 드는 부분
: "캐릭터가 점프를 하다못해 로켓처럼 발사되는 오류가 발생했다."
: 폴짝 뛰는 사람 옆에서 우수수 떨어지는 팀원들.

답글 달기
Powered by GraphCDN, the GraphQL CDN