본문 바로가기

[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL

10월 15일 화요일 본 캠프 개발 일지 | NULL 참조 팀 프로젝트

📌

 드디어! 팀 프로젝트가 시작됐다.  프로젝트 작업 하느라 진이 다 빠져서 발제 내용이랑 한 작업만 간단히 정리해야겠다. 

학습 내용 

 

1. 팀 프로젝트 발제 
2. 캐릭터 점프 구현 


1. 팀 프로젝트 발제   

 

 이번 팀 프로젝트 주제는 똥 피하기, 닷지, 벽돌 깨기 중 하나를 골라 제작하는 것이다. 우리는 똥 피하기(하지만 절대 오브젝트로 똥이 들어가면 안되는) 게임으로 결정했다! 팀원분들께는 다 괜찮다고 했지만 제일 쉬운 거 선택돼서 너무 좋았다 ^^. 새로운 것도 익숙한 게임에서 도전해야 더 잘 되는 법. 르탄이 비 피하기 게임을 한번 만들어봐서 필수 기능 구현은 빨리 될 듯. 

 

 열심히 스토리(컨셉)이랑 아이디어도 정리했다. 다들 의견도 잘 내주시고 적극적이라 좋았다! 
 나도 열심히 말 해보긴 했는데 척척 구현할 능력은 없어서 말하면서도 조금 죄송했다. 

✅ 내가 맡은 스크립트 

 일단 기본적인 스크립트를 분담해서 만들기로 했다. 나는 캐릭터 Inputsystem 을 통한 여러가지 이동과 스크립트를 제작하게 되었다. 저번에 애니메이션 버튼 별로 만드는 걸 실패해서 이번에야 말로 무조건반드시제발꼭필히 성공하고자 하는 욕구가 있어서 직접 하겠다고 했다.
 

 

2. 캐릭터 점프 구현    

 

 그래서 성공했냐고요? 아니요. 하루만에 애니메이션 단계까지 갈 수가 없었다. 
 점프 구현에서 큰 시련이 있었기 때문이다. 

✅ 구현 방법 

 

 InputSystem 을 한번이라도 썼다면 구현은 정말 쉬웠을 것이다. OnJump 함수에 Value 값이 들어왔을 때 물리적으로 플레이어의 y값을 높여주면 되니까!

private void Jump()
{
    movementRigidbody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);


 그리고 이 코드에 문제는 없었다. 그런데 왜 제대로 작동이 안 된 걸까? 

  private void FixedUpdate()
  {
  ApplyMovement(movementDirection);

(생략)
  
  private void ApplyMovement(Vector2 direction)
  {
      direction = direction * 5;
      movementRigidbody.velocity = direction;
  }

 

 스크립트 전문을 살펴보자. ApplyMovement 함수를 매초마다 확인하고 있고, ApplyMovement에 따라 플레이어의 Rigidbody2D 전체 속도(x와 y 모두)는 direction 값으로 설정된다. 내가 점프키를 눌러서 y값을 변경시켜도 1초 뒤 move가 실행되면서 점프 동작이 제대로 실행되지 않았던 것이다. 

   private void ApplyMovement(Vector2 direction)
   {
       direction = direction * 5;
       movementRigidbody.velocity = new Vector2(direction.x, movementRigidbody.velocity.y);
   }


 그래서 y축만 현재의 속도를 따라가도록 변경해줬다. 이 간단한 문제를 가지고 1시간 넘게 고민을 했다. 이래서 제대로 이해한 코드만 가져와서 써야 되는 거구나~ 하고 서른마흔번째 반성했다. 

    private void Jump()
    {
        movementRigidbody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        isGrounded = false; 
        Debug.Log("Jump executed");
    }

    private void CheckIfGrounded()
    {
        isGrounded = Physics2D.OverlapCircle(transform.position, 0.1f, LayerMask.GetMask("Ground")); 
    }


 허공 점프가 불가능하도록 땅에 닿았을 때만 점프가 가능하도록 체크하는 함수까지 구현해줬다. 

 

결과: 날아라 핑크맨 완성 ^_^!! 귀엽따.
(도움주신 튜터님 정말정말 감사합니다.)


오늘의 지식+

✅ Sprite 픽셀 크기로 자르기
✅ Vector 개념과 생성법
✅ LayerMask 개념과 사용법
캐릭터 점프하기  
✅ 애니메이션 빠르게 만들기



📝

 

베이직 반 꾸준 실습도... 객체 지향 특강도... 아직 개인 과제 해설 TIL도 못 썼는데 무수히 쏟아지는 할 일... 나한테 누가 이과 머리 좀 줬으면 좋겠다. 한 번 보고 다 이해하고 싶음. 오늘은 객체 지향 특강 보면서 자야겠다.