2D 플랫포머 - 플레이어 점프 구현하기 [유니티 기초 강좌 B16]

Поделиться
HTML-код
  • Опубликовано: 8 янв 2025

Комментарии • 1 тыс.

  • @Dealer-od8mw
    @Dealer-od8mw Год назад +8

    4년 전 영상이지만 정말 유익합니다.
    박스 콜라이더에서 레이캐스트로 점프 양식을 바꾸니 지형 끝단에서 점프가 안되길래, 좌우 하단 대각으로 레이를 쏴주니까 해결이 됐네요. 레이캐스트 쓰실 분들은 참고하시면 될 것 같습니다.

  • @pacific_parrotlet
    @pacific_parrotlet 4 года назад +2

    27:30 쯤에 청일색님이 말씀하신 캐릭터가 아래로 내려가고 있을때만 레이는 쏘는 경우에는
    점프애니메이션은 잘 나오나 플레이어와 바닥이 닿아있을때 1번만 감지하고 더 이상 감지하지 않네요
    예를 들어 용암지대라서 계속 닿아있음을 감지해야할 경우에는 다른 방법을 써야하겠네요
    또한, 점프 애니메이션이 이미지 3개를 쓰는데 너무 빨리 지나가서 위로 올라가는 모션인 2번째 이미지와 내려오는 모션인 3번째모션이 적절히 쓰여야하는데
    내려오는 모션만 보이네요 이것도 애니메이션 시간을 잘 배분하면되겠어요
    어...네 그렇습니다 누군가 참고하세요 ㅎ
    영상 감사합니다

  • @김지훈-g2d2t
    @김지훈-g2d2t 3 года назад +13

    개인적으로 레이캐스트 대신 박스캐스트쓰는걸 추천드립니다. 레이캐스트쓰면 플레이어가 끝자락에 서있으면 점프가 안되요.

  • @sleepyboy15401
    @sleepyboy15401 2 года назад +17

    오래전 영상이지만 너무 유익하고 독학하는데 큰도움이 되네요!! 감사합니다
    혼자 공부하며 만드는것이 좋지만 필요한 분들을 위해 남깁니다.
    강의에 나온 스크립트에 이단점프를 추가한 스크립트입니다 ㅎㅎ
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class PlayerMove : MonoBehaviour
    {
    public float maxSpeed;
    public float jumpPower;
    public float jumpCount;
    Rigidbody2D rigid;
    SpriteRenderer spriteRenderer;
    Animator anim;
    void Awake()
    {
    rigid = GetComponent();
    spriteRenderer = GetComponent();
    anim = GetComponent();
    }
    private void Update()
    {
    //Jump
    if (Input.GetButtonDown("Jump") && jumpCount < 2) {
    rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
    jumpCount++;
    anim.SetBool("isJumping", true);
    }
    //Stop Speed
    if (Input.GetButtonUp("Horizontal")) {
    rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
    }
    //Direction Sprite
    if (Input.GetButton("Horizontal"))
    spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
    //Animation
    if (Mathf.Abs(rigid.velocity.x) < 0.5)
    anim.SetBool("isWalking", false);
    else
    anim.SetBool("isWalking", true);
    }
    void FixedUpdate()
    {
    //Move By Key Control
    float h = Input.GetAxisRaw("Horizontal");
    rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
    if (rigid.velocity.x > maxSpeed)
    rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y); // Right Max Speed
    else if (rigid.velocity.x < maxSpeed * (-1))
    rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y); // Left Max Speed
    //Landing Platform
    if (rigid.velocity.y < 0) {
    Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
    if (rayHit.collider != null) {
    if (rayHit.distance < 0.5f)
    {
    jumpCount = 0;
    }
    anim.SetBool("isJumping", false);
    }
    }
    }
    }

  • @AppleWind
    @AppleWind Год назад +3

    채팅과 소통하는 모습이 종종 보여서, 저까지 소통하는 느낌도 들고 재밌네여

  • @실버스톤-g2y
    @실버스톤-g2y 2 года назад

    이번 강의도 정말 유익하게 잘 들었습니다~
    궁금한 점이 하나 있는데요 6:07 을 보면 분명 왼쪽으로 점프했는데 착지 시 오른쪽으로 미끌어지는 현상이 궁금합니다.
    오른쪽 방향키를 누르지 않는 이상 float h = Input.GetAxisRaw("Horizontal")는 항상 - 값 아닌가요?

    • @goldmetal
      @goldmetal  2 года назад

      아예 누르지 않으면 0 입니다.

  • @user-dn4qd5vc4x
    @user-dn4qd5vc4x Год назад +4

    점프할 때 착지하면 점프 모션 그대로 고정되고 Idle/Walk 모션은 안되는 분들 이 방법도 한번 해보세용
    문제파악: Player의 Inspector - Capsule Collider - Offset x y를 0, 0 / Size x,y를 1, 1 로 하지 않는 이상 위의 버그가 일어납니다.
    캐릭터 크기가 콜라이더보다 더 클 경우, offset과 size를 저렇게 설정하면 모션이 제대로 작동하지만 플랫폼 속으로 들어가서 움직입니다.
    해결: 1. Player의 Collider y축의 offset 길이를 캐릭터 크기에 원하는대로 맞춥니다.
    2. RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform")); 에서 rigid.position에 1에 맞춘 y축의 값을 곱합니다.
    예: rigid.position* -0.5f

    다만 점프 모션이 고정되는 건 해결됐는데 점프 끝나기 전에 공중에서 Walk 모션이 튀어나오네용.. 저는 그냥 Jump -> Walk 트랜지션에 Mute를 걸었습니다.
    + 추가
    그냥 콜라이더를 오프셋 0,0 사이즈 1,1 하고 스프라이트를 만져서 콜라이더를 발밑에 하는게 더 나은것 같네요 코딩으로는 아직 잘 모르겠습니다

    • @공부채널-f4m
      @공부채널-f4m 4 месяца назад

      저는 점프모션이 1초이상 계속되면 isJumping을 false하도록 했어요

  • @김찬양-i4e
    @김찬양-i4e 2 года назад +1

    강의내용이 너무 좋습니다 너무 감사해요 거의 2달간 책사고 인강에 돈여기저기 썼다가 드디어 저의 선생님을 만난 느낌입니다 감사합니다 선생님 새해복 많이받으세요

  • @영블-j8q
    @영블-j8q 4 года назад +3

    인디게임 어플 만들고 싶은데 첫 유니티 스승님이십니다!, 쉽고 빠르게 이런 기능들을 이해하게해주셔서 감사합니다

  • @장민혁-t1y
    @장민혁-t1y 4 года назад +1

    정말 도움이 됬어요 ㅎㅎ 근데 골드메탈님은 항상 애니메이션이 있는 player를 초점으로 가르쳐 주셔서 그냥 단일player로 만든 사람 입장으로는 이해하기 조금 어렵군요. 30:35 부터 나오는 anim 을 사용한 방법말고 다른 방법이 있을까요?

    • @goldmetal
      @goldmetal  4 года назад +1

      SetBool() 대신에 bool isJumping = false 같은 변수로 대체해서 사용하면 됩니다.
      점프할 때 true로 바꿔두고 점프 조건에 !isJumping을 추가하면 무한 점프를 막을 수 있어요.
      물론 착지할 때는 isJumping = false로 풀어주셔야 합니다.

  • @user-mh8zf6zj1m
    @user-mh8zf6zj1m 5 лет назад +7

    강좌가 너무 좋습니다 선생님

  • @리테리-d6o
    @리테리-d6o Год назад +1

    8:46즈음에 'inspector창을 만지는 모습'을 보고 질문드립니다.
    Setting과 Condtions을 만지는 과정이 이해가 안됩니다. 크게 3가지 정도 의문점이 생겼습니다.
    1. Condition을 왜 조작해야하는지
    2. Settings에서는 왜 타임라인 같이 생긴 저것들을 조절 해줘야 하는지
    3. 조절해야한다면 얼마만큼 조절해야하는지
    해당 질문사항을 이해하려면 어떤 개념을 더 찾아서 공부해야하나요?

    • @goldmetal
      @goldmetal  Год назад +1

      1.
      애니메이터의 궁극적인 목표는 데이터 값에 따라서 애니메이션 상태가 변하는 것입니다.
      그 데이터가 바로 Parameter이고, 상태가 변하기 위한 조건이 Condition 입니다.
      ex) 점프상태로 바뀌기 위해서는? isJumping == true 되어야 한다.
      2.
      원래 저 시간 구간은 두 애니메이션이 자연스럽게 바뀌도록 블렌딩 (섞기)위한 것입니다.
      3D 애니메이션에서 잘 쓰이지만 2D 애니메이션, 특히 스프라이트만 바꾸는 셀애니메이션은 필요가 없으므로 최대한 섞는 시간을 없애는 것입니다.
      3.
      0.1정도면 충분합니다.

    • @리테리-d6o
      @리테리-d6o Год назад +1

      @@goldmetal 감사합니다! 조금 찾아보니 메카님이란 개념인것 같은데 공부하고 다시 영상봐봐야겠네요

  • @i-haru8539
    @i-haru8539 5 лет назад +7

    후... 저번강의 이해가 안 되서 3D강의 다시 보고오느라 오래걸렸네여...
    항상 감사합니닷!
    앞으론 유니티 스승님이라 부를게여!(금철님의 의견은 듣지 않습...크흡)

  • @unknown__1742
    @unknown__1742 4 года назад

    27:00 책갈피
    + 질문 : 애니메이터가 이상한것 같아요 코드는 정확하고 설정도 정확한것 같은데 게임을 시작하자마자 idle, Walk, Jump가 자동으로 실행된 후 캐릭터가 점프 마지막 포즈로 설정되고 애니메이션이 아무것도 되지 않습니다 어떻게 해야할까요??

    • @goldmetal
      @goldmetal  4 года назад

      일단 애니메이터에 Idle 만 남겨놓고 화살표(Transition)은 다 끊어놓습니다.
      Idle 상태가 노란색, 기본상태인지 확인하시고 일단 플레이 버튼 눌러보세요.
      정상적으로 실행된다면 이제 Walk와 연결시키고 화살표의 Condition 조건을 영상대로 추가하시고
      다시 테스트해보시면 됩니다.

  • @레거시-i5n
    @레거시-i5n 3 года назад +6

    2단 점프 구현하시려는 분들 참고하실 분들은 참고하시길
    (스크립트를 적는 것은 공부하시는데, 도움이 되질 않을 것 같아 방법만을 남깁니다..)
    1. 우선 class 바로 아래, 전역변수로 현재 JumpCount와 최대 점프 Count를 계산할 변수를 2개 만들어주고 값을 지정해줍니다.
    2. 점프를 제어하는 스크립트에 현재 JumpCount가 MaxJumpCount보다 적을 경우 점프하도록 하게하며 점프할 때마다 JumpCount를 1씩 증가시켜주는 스크립트를 추가합니다.
    3. 플레이어가 착지하였을 때, JumpCount가 2라면 이를 초기화 해주는 스크립트를 추가해줍니다.

    • @람사-t9b
      @람사-t9b Год назад

      마침 2단점프 구현하다가 막혔는데 정말 감사합니다!

    • @AppleWind
      @AppleWind Год назад +1

      3번에 점프 카운트가 2가 아니라도 초기화 해주어야 하지 않나요?
      점프를 한번만 했다고 초기화가 안되면 다음 점프는 한번밖에 못하잖아요

  • @권지민-e3f
    @권지민-e3f Год назад +1

    모르는 게 있는데 8:38초에 condition은 왜 둘다 true가 되어야 하나요? 달리는 중에 점프를 하면 Iswalking은 false가 되어야 하는 거 아닌가요??

    • @goldmetal
      @goldmetal  Год назад +1

      '이동 중에 점프까지 한다' 라는 조건으로 두 개 모두 True로 달아둔 것입니다.
      사실 이미 상태는 Walk 라서 isWalking 조건은 생략해도 되긴 합니다.

    • @권지민-e3f
      @권지민-e3f Год назад +1

      @@goldmetal오우 오래전 영상인데도 불구하고 빠른 댓글 너무 감사합니다 유니티 공부하는데 정말 큰 도움이 됩니다

  • @김지훈-t2n3z
    @김지훈-t2n3z 5 лет назад +7

    31:10 ㅋㅋㅋㅋ카와이 ㅜ

  • @kimgeounwoo
    @kimgeounwoo 3 года назад

    골드메탈님 버전이 문제인지 저는 20:38 때 골드메탈님처럼 콜라이더 선이 표시가 안되네요ㅠ 아 그리고 DrawRay를 눈에 보이게 해주는 로직을 썼는데도 DrawRay가 안보이네요.. 무슨 문제인가요?

    • @goldmetal
      @goldmetal  3 года назад

      Scen 창 위쪽에 작은 Gizmo 버튼이 비활성화되어있다면 눌러서 활성화해주세요.
      이미 되어있다면 너무 짧은 것일 수 있으니 DrawRay 두번째 벡터를 엄청 크게 줘보세요.

    • @kimgeounwoo
      @kimgeounwoo 3 года назад

      @@goldmetal Gizmo 가 비활성화 되어있었습니다! 감사합니다!

  • @ezg8238
    @ezg8238 Год назад +2

    와 프로젝트 세팅 같은 거 건드는 거 별로 안좋아하는데 바로 다른 방법을 알려주시네 센스가 좋네요

  • @이름추천좀-d6n
    @이름추천좀-d6n 4 года назад +1

    25:14 에서 Vector3.down 대신 new Vector3(0,0.5f,0) 을 쓰면 안되나요?
    그러면 if문 한개가 줄어드는데

    • @goldmetal
      @goldmetal  4 года назад

      로직에는 정답이 없으므로 원하시는 스타일로 작성하시면 됩니다.

  • @김진-l4h
    @김진-l4h 4 года назад

    10:43에서 플레이어가 밑으로 착지돼지 않습니다. 캡슐콜리더 2D 문제가 발생했나요? 맥스 스피드 4.5 점프 스피드 20 리니어 드래그 2 그래비티 스케일 2로 설정 되어 있습니다. 실행하게 되면 애니메이터에 IDLE만 작동합니다. 점프코드 짜기 전에는 밑으로 착지가 되었는데 이상하네용.. 알려주세요

    • @김진-l4h
      @김진-l4h 4 года назад

      public class PlayerMove : MonoBehaviour
      {
      public float maxSpeed;
      public float jumpPower;
      Rigidbody2D rigid;
      SpriteRenderer spriteRenderer;
      Animator anim;
      void Awake()
      {
      rigid = GetComponent();
      spriteRenderer = GetComponent();
      anim = GetComponent();
      }
      void Update()//단기적인 키 입력,초당 60번
      {
      // Jump
      if (Input.GetButtonDown("Jump"))
      {
      rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
      anim.SetBool("isJump", true);
      }
      //Stop Speed (문워크없애기)
      if (Input.GetButtonUp("Horizontal")) {//normalized : 벡터 크기를 1로 만든 상태,단위나 방향 구할 떄 사용
      //normalized는 벡터니깐 .를 찍고 x축이나 y축을 사용한다. 0.5는 실수 이므로 뒤에 f를 적는다.
      rigid.velocity = new Vector2(rigid.velocity.normalized.x *0.5f, rigid.velocity.y);
      }
      if (Input.GetButtonDown("Horizontal"))
      {
      spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
      //flipX 는 bool 타입입니다. -1인 경우는 true가 되어 X축으로 뒤집어지는 것이지요
      }
      //Animation, Mathf : 수학 관련 함수를 제공하는 클래스. Abs= 절대값
      if (Mathf.Abs(rigid.velocity.x) < 0.3) //속도가 0.3이하면 멈춘다.
      anim.SetBool("isWalk", false);
      else
      anim.SetBool("isWalk", true);
      }
      void FixedUpdate() //초당 50번 발동(지속적인 키 입력) = AddForce 사용할 시 초당 50의 힘이 발동
      {
      //Move By key control
      float h = Input.GetAxisRaw("Horizontal");
      rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
      if (rigid.velocity.x > maxSpeed) //rigit Max Speed
      rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);//velocity : 리지드바디의 현재 속도
      else if (rigid.velocity.x < maxSpeed*(-1)) //left Max Speed. -1하게되면
      rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);//velocity : 리지드바디의 현재 속도
      }
      }

    • @김진-l4h
      @김진-l4h 4 года назад

      플레이어를 바닥에 닿게 설정하고 실행해서 좌우로 움직였는데 모션만 나가고, 점프를 눌렀는데 애니메이터의 playerjump가 무한재생돼요. 어떻게하면 좋을까요..

    • @goldmetal
      @goldmetal  4 года назад

      rigid.AddForce(Vector2.right * h * 5, ForceMode2D.Impulse);
      위처럼 Addforce 첫번 째 값 뒤에 일정값일 더 곱해서 힘을 크기 줘보세요.
      애니메이션 무한 재생은 Jump 애니메이션 선택해서 인스펙터 창에 Loop를 끄시면 됩니다.

    • @김진-l4h
      @김진-l4h 4 года назад

      @@goldmetal 그래도 바닥에 닿지 않고 공중부양하네요 아무런 입력없이.. ㅠㅠ

    • @김진-l4h
      @김진-l4h 4 года назад

      아니네요 다시하니깐 작동 하네요

  • @서울_2호선
    @서울_2호선 2 месяца назад +2

    역시 unity 2d, unity 3d라고 치면 바로 나오시는 그저 갓 ㄷㄷ

  • @호빵감자-y7m
    @호빵감자-y7m 4 года назад +1

    저는 실행하면 player가 바로 점프 애니메이션 동작만 취하고 다른 애니메이션은 실행이 안되네요.
    20:14 까진 전부 코딩하고 따라했는데
    영상에선 20:14 전에 해당 문제가 해결된 것 같은데 맞나요?

    • @goldmetal
      @goldmetal  4 года назад +1

      애니메이터에서 Idle -> Jump 화살표 조건을 확인해보세요.

    • @호빵감자-y7m
      @호빵감자-y7m 4 года назад +1

      @@goldmetal condition 말하시는거라면 제대로 했습니다.

    • @goldmetal
      @goldmetal  4 года назад +1

      @@호빵감자-y7m 실행할 때 코드 부분에서 애니메이터 함수를 실행하고 있는지 확인해보세요. 아무 컨트롤도 안햇는데 Jump로 넘어가는거면 분명 코드가 있을겁니다. 아니면 Jump 상태가 기본이 되어있을 수도 있겠구요

  • @gammudang
    @gammudang 3 года назад

    강죄 너무 재미있게 잘 보고 있습니다. 그런데 2:05 초에서 제 캐릭터가 점프를 하지 않고 걸을 때도 문워크를 해요 어떻게 해냐 하나요???
    참고로 코드는
    public float jumpower; 와 if (Input.GetButtonDown("jump")) rigid.AddForce(Vector2.up * jumpower, ForceMode2D.Impulse); 이것 두 개 를 넣었습니다.

    • @goldmetal
      @goldmetal  3 года назад

      Input.GetButtonDown("Jump") 안에 버튼 이름 J 는 대문자입니다.
      문워크 해결 방법은 고정댓글로 달아두었습니다. 확인해보세요.

  • @부농아제
    @부농아제 3 года назад

    메탈님... 10:26구간 점프 후 애니메이션이 멈춰야하는데 Animator에서보면 Jump애니메이션이 계속 동작합니다.... 왜이럴까요??

    • @부농아제
      @부농아제 3 года назад +1

      루프타임을 안껏군요.. 7:16 다시 참조하겠습니다 죄송함다~

  • @오브젝
    @오브젝 2 года назад +1

    올린지 2년이 지나고서야 드디어 이런 명강의를 듣네요!
    감사합니다.

  • @せいいたいしょうぐん
    @せいいたいしょうぐん 4 года назад

    30:51 스크립트는 제대로 입력했는데
    Animator 에서 isJumping ㅁ 체크가 빨리 없어져서 스페이스를 마구 연속해서 눌렀을때
    N단 점프가 되버립니다..... 왜 그런걸까요?

    • @goldmetal
      @goldmetal  4 года назад

      점프 누른 직후 아래로 쏘는 Ray가 사라져야 합니다.
      늦게 사라지면 점프를 해도 ray가 바닥을 감지하게 되어 바로 false로 돌리기 때문이죠.
      RayCast if문의 조건 rigid.velocity.y를 Debug.Log()로 확인해보세요.

  • @vctnbgx
    @vctnbgx 4 года назад

    6:00 책갈피
    근데 골드메탈님이랑 완전히 똑같이 설정을 했는데도
    Jump Power를 20으로 하면 플레이어가 골드메탈님꺼랑 다르게
    급발진을 해버려서 엄청 위로 솟구치는데 왜 그런건가용 ..?

    • @goldmetal
      @goldmetal  4 года назад

      혹시 점프를 GetButton 으로 하셨는지 확인해보세요.
      GetButtonDown을 사용해서 딱 1프레임만 작동되게 해야 합니다.

  • @jooagood3558
    @jooagood3558 2 года назад +1

    와... 레이케스트 설명 진짜.. 와.. 최고예요. 와 찢었다.. 뭔지 어려울 개념인데 한번에 쏙쏙 들어오게 너무 이해를 한번에 잘 시키는 설명이예요. 대박.. ! 감동강좌

  • @FavoriteIsLove
    @FavoriteIsLove 7 месяцев назад +1

    어우 진짜 감사합니다
    이해한건 없는데 프로젝트는 만들어오라하고
    뭘 배웠는지 머리를 뒤져봐도 이걸 그댏 따라 쓰세요 밖에 기억이 안나서 혀깨물고 싶었습니다 감사합니다 정말로..

  • @날드-i9t
    @날드-i9t Год назад

    11:40 레이케스트(왜 쓰는지는 모름 아마 애니메이션 착지 넣을때 쓰는용인듯)

  • @TypeTV
    @TypeTV 4 года назад +2

    BoxCollider2D를 isTrigger로 하나 더 만들어서 바닥 감지를 해서 잘됐긴 했지만
    매번 트리거가 두번씩 발생해서 거슬렸는데 골드메탈님의 강의로 레이캐스트를 사용하여 깔끔하게 바닥과의 충돌을 구현할 수 있었습니다. 감사합니다!

    • @jooagood3558
      @jooagood3558 2 года назад

      앗 저 이전 강의에서 스코어가 2점씩 올라가는 오류가 있었는데 왠지 원인이 이거였을것 같아요!!!! 오.. 트리거가 두번씩 발생할수도 있군요 ! 덕분에원인을 찾은 느낌 ..!

  • @bulsaharam
    @bulsaharam Год назад

    점프를 꾹 누르면 땅에 닿자마자 자동으로 점프하게 하려고 GetButton으로 바꿨는데, 그러니까 점프할 때마다 애니메이션 갱신이 안 되네요. 이건 어딜 건드려야 해결할 수 있을까요?

    • @goldmetal
      @goldmetal  Год назад

      애니메이터 창과 게임창 나란히 두시고 게임 플레이 하시면서 isJumping 파라메터와 상태 변화를 직접 체크해보시는 것이 좋겠네요

  • @hooni6854
    @hooni6854 4 года назад

    명령어도 맞고 오류도 안나는데 왜 빔이 안보일까요?ㅜㅜ 그리고 14:08처럼 카메라 영역이랑 아이콘이 보이지 않는데 어떻게 보이게 하나요?

    • @hooni6854
      @hooni6854 4 года назад

      앗 아래 댓글에서 답변해 주셨었네요. 좋은 강의 감사합니다!

  • @우예찬-n6l
    @우예찬-n6l 2 года назад

    7:40초 까지는 잘 되었는데 그 이후 Idle나 Walk 노드에서 우클릭을 해도 make translation 같은 창이 없고 Create state 같은 창만 나옵니다.ㅠㅠ 이 노드들을 움직이려해도 움직이지 않구요.. 어떻게 된 걸 까요...

    • @BePowerfulAI
      @BePowerfulAI 2 года назад

      저도 같은현상입니다 하나의 에니메이션에 하나의 transition만 생성만 됩니다. 복수로 만드려고 우클릭을 누르면 make transition 메뉴가 뜨지 않네요

    • @BePowerfulAI
      @BePowerfulAI 2 года назад +1

      버전 낮추니 됩니다

    • @goldmetal
      @goldmetal  2 года назад

      설탕님 말씀대로 LTS 버전 에디터로 새롭게 설치해보시는걸 추천드립니다.

  • @cherry_tteokbokki
    @cherry_tteokbokki 4 года назад +2

    오늘도 잘들었습니다! 메탈님 덕분에 유니티 무난하게 잘 배우고 있습니다 >

  • @그럼날아봐
    @그럼날아봐 5 лет назад +1

    골메님 유니티 강좌 영상 올려주셔서 정말 정말 감사합니다!! 조만간 꼭 다 따라해볼께요^^

  • @찹쌀떡-r1t
    @찹쌀떡-r1t 4 года назад

    10:25에 jump코드에서 if 후에 중괄호를 넣고 안넣고에 어떤 차이가 있는거죠?

    • @hyeongju_
      @hyeongju_ 4 года назад

      지나가다가 답글 남깁니다 if(조건) 뒤에 내용이 한 줄이면 중괄호 안 써도 됩니다! 10:25 에서는 if(Input.GetButtonDown("jump")) 뒤에 rigid.Add~~랑 anim.setBool~~ 이렇게 두 줄이 있으므로 중괄호 안에 써야합니당

  • @꽁냥이-d5i
    @꽁냥이-d5i 4 года назад

    골드메탈님 강의 잘 보고있습니다!
    그런데 14:10에서 실행하면 레이가 보이지 않습니다. 어떻게 해야하나요??

    • @goldmetal
      @goldmetal  4 года назад

      Debug.DrawRay()함수가 보이는 레이저를 만들며 넘 짧았을 수도 있으니 벡터 매개변수 값을 더 크게 주시고, 이 레이저는 Scene 창에서만 보이니 참고하세요

    • @꽁냥이-d5i
      @꽁냥이-d5i 4 года назад

      @@goldmetal 감사합니다!!

  • @poodlehappy602
    @poodlehappy602 4 месяца назад +1

    2024.08.21) 점프 부분 어려워서 겨우 따라했어요. ㅎㅎ 드디어 다음단계로~~ 볼트하다가 역순으로 왔는데 좀 어렵지만 재밌습니다. 중간에 좀 힘들었지만요. ㅎ 감사합니다.

  • @sleepyboy15401
    @sleepyboy15401 2 года назад

    안녕하세요
    플레이어를 제가 만든 캐릭터로 설정하였는데 점프초기화가 되지않아 확인해보니 레이캐스트가 실행시 깜박깜박 나오거나 안나오는데 코드는 그대로 사용했는데 이유가 무엇이있을까요??
    그리고 레이캐스트가 짧아 Vector3.down *2 등등으로 길이를 늘려봤는데 캐릭터 내부에서 일정길이 이상 길어지지않고 땅아래로 내려오지를 않는데 이 경우는 어떻게 해야할까요..? ㅠㅠ 나중에 천천히라도 도움주시면 감사하겠습니다.
    말로 이해가 힘드시다면 메일로 파일보내드리겠습니다

    • @goldmetal
      @goldmetal  2 года назад +1

      레이캐스트를 감싸는 if문 조건 velocity.y 가 있어서 그렇습니다.
      평지를 돌아다녀도 레이캐스트가 발동되면 문제가 있는 것이니 if문 조건 확인해주세요. (낙하속도)
      레이캐스트의 길이는 두번째 벡터 입니다. Vector3.Down * 3f 를 했다면 Debug.DrawRay에도 동일하게 맞춰주세요

  • @오루에몽
    @오루에몽 3 года назад

    레이캐스트에서 솔직히 말해서 뭔말인지 하나도 몰랐는데 이해를 하려고 하니까 음... 레이저를 사용해서 땅을 감지하고 땅을 닿았을때 강제로 Idle상태로 바꾸는 것을 알았습니다 비록 항상 골드메탈님께 질문을 하지만 이러한 저를 용서해주십시오 코딩도 계속 써보니 100줄은 적다고 느낄 정도로 골드메탈님 영상에 푹 빠졌습니다 골드메탈님은 저에게 있어서 우상이자 존경하는 대상입니다 진심으로 감사드리고 앞으로도 잘부탁드립니다.! (꾸벅) 좋아요 구독은 당연히 눌렀습니다!

  • @user-gp7tt2yr5f
    @user-gp7tt2yr5f 4 года назад +1

    8:40 처럼 저 setting 아래에있는 그래프? 를 지우려고 해봤는데 저걸 아무리 땡겨도 안사라지는데 어떻게 하죠?

    • @goldmetal
      @goldmetal  4 года назад

      꼭 지우실 필요 없이 파란색 영역만 최소화 시켜주면 됩니다.
      눈금자를 옮기기가 불편하시다면 Settings 를 여셔서 Transition Duration 값을
      0으로 설정하시면 됩니다.

    • @user-gp7tt2yr5f
      @user-gp7tt2yr5f 4 года назад

      @@goldmetal 그랬는데도 캐릭터가 점프를 하면 공중에서 부들부들 떠네요

    • @goldmetal
      @goldmetal  4 года назад

      @@user-gp7tt2yr5f 그건 점프 애니메이션이 Loop가 걸려있어서 그렇습니다. 애니메이션 파일 선택하셔서 Loop 해제해주세요

  • @wolfisbest3400
    @wolfisbest3400 3 года назад

    영상 진짜 잘보고 갑니다! 일단은 쭉 달리고 점검해봐야 겠네요! 항상 감사합니다~!

  • @요정-i1m
    @요정-i1m 2 года назад +2

    강좌 잘 보고있습니다. 재밌네요!!
    점프할수없는 공간에서 bug 가 발생되어 아래와 같이 처리하였습니다.
    다른 방안도 있을것같으니 어디까지나 참고하시면 좋을것 같습니다.
    // Landing Platform
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
    if (rigid.velocity.y < 0)
    {
    if (rayHit.collider != null)
    {
    if (rayHit.distance < 0.5f)
    {
    animator.SetBool("isJumping", false);
    }
    }
    }

  • @윤정길-b6d
    @윤정길-b6d 4 года назад

    애니메이션이 조금많아지니까 생각할게 많아지네요 점프 속도와 높이도 무게,물리,힘등등 어떻게 주느냐에 따라 느낌이 많이 달라질꺼같네요 정말 하기나름인듯해요...존경합니다.

  • @raoksajsmo2959
    @raoksajsmo2959 4 года назад

    이동부터 여기까지에서 Time.deltatime을 넣을곳이 있나요?
    5:34

    • @goldmetal
      @goldmetal  4 года назад

      물리효과로 움직일때는 넣지 않아도 됩니다.

  • @sun1205
    @sun1205 Год назад +1

    선생님 감사합니다. 너무 재미있는데 잘이해가 됩니다. !!!!!!!

  • @Funbox_admin
    @Funbox_admin 2 года назад +1

    무한점프 이벤트로 막으려고하다가
    머리. 터질뻔했는데
    영상으로 해결했습니다. 감사합니다.

  • @나난나나-c4j
    @나난나나-c4j 4 года назад

    다 적용을 시키고 나서 재생을 해보니까 시작부터 캐릭터가 위로 날아가는데 뭐가 문제인가요?
    10:40부터요

    • @goldmetal
      @goldmetal  4 года назад

      점프 로직이 그냥 실행되는 모양입니다.
      if문 GetButtonDown("Jump") 조건이 있는지 확인해보세요.

  • @인표쨩
    @인표쨩 3 года назад

    @골드메탈 무한점프 스크립트 짜고 점프 높이 조절은 어떻게 안되나 막 해보다가
    if (Input.GetButtonDown("Jump") 에서 다시 Down을 빼니까 그냥 점프하는거는 똑같지만
    버튼을 누르고있을때 계속 점프하게되네요
    점프한다 > 애니메이션이 점프로 바뀐다 > 점프 애니메이션중엔 다시 점프하지않게 한다
    > 무한 점프가 되지않고 바닥으로 떨어진다 > 바닥에 돌아왔을때 점프 애니메이션이 다시
    idle 이나 뛰는 애니메이션으로 바뀐다 > 버튼을 누르고있는 상태이기때문에 다시 점프한다
    > 반복
    이렇게 되는것같네요 근데 질문이 있는데요 점프 높낮이는 어떻게 스크립팅 해야할까요
    지금 스크립된 상태로는 추가로 스크립트해도 안될것같고 보고 따라한 점프 스크립트를
    없애고 다시 스크립트 하기엔 제 힘이 너무나도 부족한것같아서 질문 해봅니다
    댓글 읽어주셔서 감사합니다 !! ❤❤❤

    • @goldmetal
      @goldmetal  3 года назад

      점프 높이는 jumpPower변수 값을 올리면 됩니다

  • @TV-qh8hv
    @TV-qh8hv 4 года назад

    영상 잘 보았습니다.
    점프까지 할 수 있게 될 줄 몰랐는데...기쁘네요~

  • @se_uwxl
    @se_uwxl 4 года назад +1

    되게 친절한 개인강사같아요^^

  • @I_am_jake1104
    @I_am_jake1104 3 года назад +2

    2:08 점프가 안돼서 계속 c#스크립트 확인했는데 고칠게없어서 고생하다가 위쪽 화살표키가아니고 스페이스바라는걸 이제야 알아서 이걸 쓰네요 ㅋㅋㅋ(수정 : 다시 본 나는 여기에 유니티는 Jump가 기본으로 스페이스 바라는걸 못들은 과거에 나를 ...ㅋ)

  • @aaa-sp5iv
    @aaa-sp5iv 5 лет назад +1

    너무 잘 보고 있습니다 좋은 강의 감사드려요 ☆ _ ☆

  • @hugeberry10
    @hugeberry10 3 года назад +1

    Ray가 Platform 만 감지해서 코인이나 깃발 같이 다른데 올라가면 점프 애니메이션이 풀리지 않습니다
    -> 애니메이션이 실행중이면 점프 못하게 막음
    -> floor어 이외의 것 위에서는 점프를 못함
    ->몬스터등이 모여있을떄 위에 플레이어가 올라가면 빠져나올수 없음
    다른것들도 Platform으로 할까요? 레이가 딱 플레이어만 무시할수는 없을까요?

    • @goldmetal
      @goldmetal  3 года назад

      코인과 깃발은 콜라이더에 IsTrigger 체크하셔야 합니다.

  • @jjong2-0pr
    @jjong2-0pr 8 месяцев назад +1

    레이어 콜라이더가 원형이라서 플랫폼의 박스콜라이더 사이의 미세한 틈에 충돌하면 미끄러지는 것 같아요.
    ㅇ - 플레이어
    ㅁㅁㅁㅁ - 바닥 콜라이더 4개
    |
    콜라이더 사이
    + Composite Collider로 콜라이더로 하나로 합쳤습니다. 바닥 중간중간에 틈은 사라졌어요
    그런데
    아무키도 누르지않았을때 콜라이더 끝점?을 지나면 플레이어가 뒷방향으로 미끄러지는 이유가 뭘까요...? physics Material에서 마찰력을 0으로 줄때 발생하는것 같긴한데..
    + 경사면을 지날때 플레이어가 가속하는 이유는 뭔가요? Friction이 0일때 경사에서는 Linear Drag가 작용을 안하는건가요?

    • @goldmetal
      @goldmetal  8 месяцев назад

      1. 플레이어 콜라이더2D가 캡슐형태이므로 중력에 의해 미끄러지는 것 같습니다.
      플레이어 콜라이더2D를 박스 형태로 변경하면 해결할 수 있습니다.
      2. Drag 값이 있어도 주어지는 힘이 이 저항을 넘기면 가속이 발생할 수 있습니다.

  • @날드-i9t
    @날드-i9t Год назад

    30:10 무한점프 막기

  • @김석진-u7u
    @김석진-u7u 3 года назад

    유니티 열심히 가르쳐주셔서 감사합니다!! 즐겁게 배우고있습니다 !!
    질문입니다 -이 영상 끝까지 그대로 따라한거샅은데 캐릭터가 점프할때 에니메이터에서 보면 JUMP에서 멈춰있어요 ㅠ 순환이 안되네요 ㅠ 그리고 점프할때 에니메이터- 파라미터 보면 isJumping에 체크되어있는 상태에서 멈춰있더라고요 ㅠ 아예 처음부터 다시해봐야할까요..
    2. 그리고 초록색 선이 Floor를 관통하지않아서요 ㅠ 이문제는 어떻게 해야할까여 ㅠ 제가 직접 그린 소스로 교체해서 하고있어서요! ㅠㅠ
    + Console 창에서 점프할때 숫자올라가는 그게 나타나지도 않네요 ㅠㅠㅠ 여러번반복해서 다시 지우고 다시하는데 이러한 문제들이 있어여 ㅠㅠ 흑흑
    스크립트 내용입니다-
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class PlayerMove : MonoBehaviour
    {
    public float maxSpeed;
    public float jumpPower;
    Rigidbody2D rigid;
    SpriteRenderer spriteRenderer;
    Animator anim;
    void Awake()
    {
    rigid = GetComponent();
    spriteRenderer = GetComponent();
    anim = GetComponent();
    }
    void Update()
    {
    //Jump
    if (Input.GetButtonDown("Jump")) {
    rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
    anim.SetBool("isJumping", true);
    }
    //Stop Speed
    if (Input.GetButtonUp("Horizontal"))
    {
    rigid.velocity = new Vector2(rigid.velocity.normalized.x*0.5f, rigid.velocity.y);
    }
    //Direction Sprite
    spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
    //Animation
    if (Mathf.Abs(rigid.velocity.x) < 0.3)
    anim.SetBool("isWalking", false);
    else
    anim.SetBool("isWalking", true);
    }
    void FixedUpdate()
    {
    //Move Speed
    float h = Input.GetAxisRaw("Horizontal");
    rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
    //Max Speed
    if (rigid.velocity.x > maxSpeed) //Right Max Speed
    rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
    else if (rigid.velocity.x < maxSpeed * (-1))//Left Max Speed
    rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
    //Landing Platform
    Debug.DrawRay(rigid.position, Vector3.down , new Color(0, 1, 0));
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
    if(rayHit.collider != null)
    {
    if (rayHit.distance < 0.5f)
    anim.SetBool("isJumping", false);
    }
    }
    }
    💓항상 수고하십니다💓

    • @goldmetal
      @goldmetal  3 года назад

      애니메이터에서 처음부터 체크되어있다면 체크해제해주세요.
      레이캐스트 직선 길이는 Physics2D.Raycast(rigid.position, Vector3.down * 3, 1, LayerMask.GetMask("Platform"));
      이런 식으로 두번째 인자값에 더 곱하시면 됩니다.

    • @김석진-u7u
      @김석진-u7u 3 года назад

      @@goldmetal 🤍🤍답변감사합니다🤍🤍🤍

  • @hundred_100
    @hundred_100 Год назад +1

    이 계정으론 댓글 잘 안 다는데 사랑합니다 선생님

  • @인표쨩
    @인표쨩 3 года назад

    저번 강의 안봤으면 if (Input.GetButton("Jump")요거애 Down 넣어야하는거 바로 못알아챘다 1:11

  • @아무개-k1c
    @아무개-k1c 4 года назад +1

    오늘도 시청 잘 했습니다.

  • @고참-t9v
    @고참-t9v 2 года назад

    저는 27분대 현상 해결하려고 코틀린쓰고 막 코드 더러워졌는데 저렇게 깔끔한 방법이 있군요 ! 좋은영상 감사합니다
    +++++++++++

  • @cjy8972
    @cjy8972 5 месяцев назад +1

    저번 강의에서 가르쳐주신 대로 만든 플레이어의 이동과 관련된 스크립트입니다.
    이동중에 이동을 키가 안먹을 때가 있는데 왜 그런건가요?
    키보드 문제일까봐 새걸로 바꿔봤는데 똑같습니다.
    void FixedUpdate()
    {
    // Move Speed
    float h = Input.GetAxisRaw("Horizontal");
    rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
    // Max Speed ; x축 속도는 maxSpeed로 제한하고 y축은 현재의 값을 유지
    if (rigid.velocity.x > maxSpeed) // Right
    rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
    else if (rigid.velocity.x < maxSpeed*(-1)) // Left
    rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
    }

    • @goldmetal
      @goldmetal  5 месяцев назад +1

      플레이어 콜라이더 모양이 박스모양이면 캡슐콜라이더2D로 바꾸시고
      구르지 않도록 리지드바디의 마지막 옵션인 Freeze Rotation Z 체크해주세요

    • @cjy8972
      @cjy8972 5 месяцев назад

      @@goldmetal 선생님의 말씀대로 적용했더니 바로 해결됐습니다!! 감사합니다!!!

  • @SMILE_MK
    @SMILE_MK Год назад +1

    안녕하세요! 3년이 지난 영상이지만 참고하며 제작하고 있습니다! 이미지에 대해 궁근한점이 있는데요 점프하는 이미지를 뒤늦게 추가했는데 본래 플레이어 이미지에 추가를 할 수 있는 방법이 있을까요? 아니면 처음부터 해야하는걸까요...

    • @goldmetal
      @goldmetal  Год назад

      1. 플레이어 오브젝트 선택
      2. 애니메이터의 컨트롤러 더블클릭해서 창 열기
      3. 변경하고 싶은 애니메이션 상태 선택 후 인스펙터의 Motion 더블클릭
      4. 열린 애니메이션 창에서 원하는 이미지를 타임라인에 드래그드랍하여 추가하기

  • @김민재-d9j9j
    @김민재-d9j9j 3 года назад

    너무 잘봤어요!! 감사합니다 요번것도 클리어~!

  • @arnononim
    @arnononim 3 года назад

    30:40 &&연산자를 넣으니까 잘못된 식의 항 && 입니다라고 에러뜨네요 뭐가 문제일까요..?

    • @goldmetal
      @goldmetal  3 года назад

      && 연산자는 양 옆이 bool 값이어야 합니다.
      양 옆을 잘 확인해보세요.

    • @arnononim
      @arnononim 3 года назад

      해결했숨다아ㅏㅏ 괄호를 잘못넣었네요

    • @arnononim
      @arnononim 3 года назад

      @@goldmetal 늦은 시간에 답변 감사합니다 지금 무한점프 방지 오류를 고쳤는데 스페이스바 연타하면 계속 점프가 가능한데 이건 왜이럴까요? 초록선의 길이를 짧게 만들어야 하나요?

    • @goldmetal
      @goldmetal  3 года назад

      @@arnononim 점프 조건에 조건을 추가해주셔야 합니다. 30:22 if문 확인해보세요.

    • @arnononim
      @arnononim 3 года назад

      @@goldmetal 드디어 모두 해결했네요 정말 감사합니다!

  • @ybji2242
    @ybji2242 5 лет назад +1

    좋은강의 정말 감사드려요~

  • @donlee840
    @donlee840 4 года назад

    정말 좋은 강의 너무 감사드립니다.

  • @싱숭생숭-b5z
    @싱숭생숭-b5z 3 года назад

    오늘도 잘봤습니다~

  • @JaeRo1339
    @JaeRo1339 Год назад

    형님..! 항상 좋은 영상으로 독학할수있어서 너무너무 감사합니다!
    다름이 아니라 저번 문제와 연관되어있는건데, 콜라이더를 박스에서 캡슐로 변경했더니 잘 움직이긴 합니다!
    근데 플랫폼 연결부위에 콜라이더가 닿으면 앞으로 밀리거나 뒤로 밀리곤 하네요.. 다시 박스콜라이더로 변경을 하면 어떤식으로 변경해야할까요? 아직 오류해결능력이 부족하네요ㅠㅠㅠ
    edit collider를 해서 콜라이더를 약간 크게 늘리고 해봐도 잘 안되네요...

    • @goldmetal
      @goldmetal  Год назад

      이 영상에서 Edit > Project Setting > Physics2D 에서 minDistance를 없애버렸는데 그걸 원상복구 시키시면 됩니다. 대신 콜라이더의 높이를 수동으로 조절해서 모양을 맞추셔야해요

  • @E_ON0109
    @E_ON0109 Год назад +1

    골드메탈님을 따라 코드를 똑같이 적었으나 버그가 계속 생겨서 질문 남깁니다 스페이스를 눌렸을 때 플레이어가 위로 올라가지만 애니메이션이 작동하지 않고 한번 더 눌러야 애니메이션이 작동합니다. 두번 눌러야 점프로 인식하는 거 같아요. 코드에 이상한 점이 있을까요?
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class pleyermove : MonoBehaviour
    {
    public float JumpPower;
    public float maxSpeed;
    Rigidbody2D rigid;
    SpriteRenderer spriteRenderer;
    Animator anim;
    void Start()
    {
    rigid = GetComponent();
    spriteRenderer = GetComponent();
    anim = GetComponent();
    }
    // Update is called once per frame
    void Update()
    {
    //jump
    if (Input.GetButtonDown("Jump") && !anim.GetBool("isJumping"))
    {
    rigid.AddForce(Vector2.up * JumpPower, ForceMode2D.Impulse);
    anim.SetBool("isJumping", true);
    }
    //Stop Speed
    if (Input.GetButtonUp("Horizontal"))
    {
    rigid.velocity = new Vector2(rigid.velocity.normalized.x*0.5f, rigid.velocity.y);
    }
    //ANimation
    if (Mathf.Abs (rigid.velocity.x) < 0.4)
    anim.SetBool("isWalking", false);
    else
    anim.SetBool("isWalking", true);
    }
    private void FixedUpdate()
    {
    //move by key control
    float h = Input.GetAxisRaw("Horizontal");
    rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
    if (rigid.velocity.x > maxSpeed) //right max speed
    rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
    else if (rigid.velocity.x < maxSpeed * (-1)) //left max speed
    rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
    //Drection Sprite
    if (Input.GetButton("Horizontal"))
    spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
    //Landing Platform
    if(rigid.velocity.y < 0)
    Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("flatform"));
    if (rayHit.collider != null)
    {
    if (rayHit.distance < 0.5f)
    anim.SetBool("isJumping", false);
    }

    }
    }

    • @goldmetal
      @goldmetal  Год назад +1

      코드 쪽은 문제없고 애니메이터 쪽에서 상태를 어떻게 연결했는지 살펴봐주셔야겠습니다. 특히 Jump 상태로 가는 화살표 Transition의 Condition이 어떻게 설정되어 있는지 확인해주세요.

  • @태이-q1y
    @태이-q1y 4 года назад

    항상 답변해주셔서 정말 감사합니다!
    이번에도 죄송스럽지만 질문을 하겠습니다.
    첫번째는 Floor을 이상하게 레이어8번로 설정하면 게임에서는 보이는데 Scene에서는 투명하게 안보입니다. 다른 번호로 설정하면 되네요,, 왜 이런거죠??
    두번째는 게임을 시작하자마자 점프모션이 나오고 idle이나 걷는 애니메이션을 안바뀌고 고정됩니다..

    • @goldmetal
      @goldmetal  4 года назад

      카메라가 Floor를 잡아주지 않아서 그렇습니다.
      Mixed..된 부분을 누르시고 Floor 추가해주세요.
      애니메이션은 transition 매개변수가 바로 들어가는지 확인이 필요하겠네요. animator창과 game창 두개를 나란히 띄우시고 플레이어 선택한 상태로 게임 실행해서 확인해보세요

    • @태이-q1y
      @태이-q1y 4 года назад

      @@goldmetal답변감사합니다~ 아 해결했습니다~ if절을 {}로 안묶어서 일어난 폐해였네요.. 그런데 죄송하지만 Mixed..된 부분은 어디에 있는 건가요? 한국어로 쓰고있어서 죄송합니다 선생님

  • @Withipad
    @Withipad 4 года назад +2

    정말 너무 강좌를 재미있게 보고있습니다
    정말 멋지십니다.. 다름이아니라
    무한점프를 막는조건문을 "is jumping"이라는 에니메이션의 bool을 가져오는것같은데 혹시 에니메이션을 안쓸땐 어떤 조건을 추가하는게 좋을까요?

    • @goldmetal
      @goldmetal  4 года назад +2

      bool isJump; 같이 bool 타입 변수 하나 선언해서 똑같이 사용하시면 됩니다.

  • @BamJung
    @BamJung 4 года назад

    안녕하세요! 우선 메탈님 영상으로 유니티를 쉽게 배우고 있어 감사의 말씀을 드립니다 ㅎㅎ 다만, 이번 영상에서 막힌 부분이 있어 여쭈어보고 싶은데.. Debug.DrawRay를 해도 제 scene에서는 초록색 선이 보이지 않습니다 ㅠ_ㅠ vector값을 크게해봐도.. 막대 길이를 늘려봐도... 도저히 보이지가 않습니다 ㅠㅠ 보이지 않은채로 강의를 진행해보니 충돌이 잘 되는지 확인하는 코드에서는 잘 충돌이 일어나 결과가 잘 뜨지만, 제 scene에서는여전히 초록색 선이 보이지않습니다...혹시 어떻게 해야 선이 보이는지 알려주실 수 있으신가요..??
    if(rigid.velocity.y < 0)
    {
    Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));
    if (rayHit.collider != null)
    {
    if (rayHit.distance < 0.5f)
    anim.SetBool("isJumping", false);
    }
    }
    코드는 나온바와 같이 똑같이 썼습니다! Debug.DrawRay(인자값들)에서 duration 부분을 넣어보기도, camera depth test? 부분에 false를 넣어보기도 했고 막대길이의 상한선도 넣어봤으며, 당연히 Vector3.down쪽의 값도 늘려보았으나 초록색 선은 나타나지 않았습니다...

    • @goldmetal
      @goldmetal  4 года назад +1

      혹시 Scene 창 위쪽에 Gizmo 버튼이 해제되어 있는지 확인해보세요

    • @BamJung
      @BamJung 4 года назад

      앗 감사합니다!!

  • @YejunYun
    @YejunYun 6 месяцев назад +1

    물어볼 점이 몇 개 있어서 댓글을 씁니다. 첫 번째로, if문에서 소괄호 안의 조건이 만족되었을 시 실행될 코드를 {}로 감싸실 때가 있고, 안 감싸실 때도 있던데, 그건 어떤 기준이 있나요? 그리고 캐릭터가 2칸 높이를 올라갔을 때 점프를 할 수 없던데, rayHit.distance가 0.5보다 커서 그런 건가요? 그리고 이 점은 추후 강의에서 수정이 되나요?

    • @goldmetal
      @goldmetal  6 месяцев назад

      1. if, for등 제어문에 들어가는 코드가 1줄이면 중괄호 생략이 가능합니다.
      두 줄부터는 무조건 중괄호로 감싸주어야해요.
      2. 이 강좌에서는 플레이어의 물리적인 속도 y축 하강일 때만 바닥체크를 하도록 되어있습니다.
      다른 플랫폼에 점프로 날라가면서 살포시 착지되는 상황에서는 레이캐스팅하지도 않은채 바닥에 닿는 것이 될 가능성도 있죠.
      다음 리뉴얼 강좌에서 아예 다른 개선된 로직으로 찾아뵐 예정입니다.

    • @YejunYun
      @YejunYun 6 месяцев назад

      @@goldmetal 다시 확인해보니 2칸 높이에서도 점프가 되네요. 제가 하고 싶었던 말은, 땅이 아니라 몬스터 위에 올라가면 몬스터는 Layer 이 Playform 이 아니니까 점프가 안 되는 게 맞는 거죠?

    • @goldmetal
      @goldmetal  6 месяцев назад

      @@YejunYun 네 맞습니다. 어느 곳에서나 점프가 되게 하려면 레이캐스팅에서 레이어마스크를 빼면 됩니다.

  • @김소울-h4f
    @김소울-h4f 4 года назад +1

    지난 강좌에서 말한 대로 1:03에서 겟버튼으로 설정했는데 스페이스버를 누르면 엄청 높게 올라가네요..ㅠㅠ

    • @김소울-h4f
      @김소울-h4f 4 года назад +2

      앗 겟버튼다운으로 다시 바꿔야 1번만 뛰는군요ㅋㅋㅋㅋ 감사합니다

    • @khhw119
      @khhw119 3 года назад +1

      저도 똑같은 증상이였는데 해결 됐네요 감사합니다!!

  • @depth8923
    @depth8923 5 лет назад

    메탈님 다음 강좌에서 타일맵으로 맵을 만들잖아요? 그 때 기본이 되는 긴 타일맵 위에 y축을 2올린 타일맵을 올리고 또 거기서 2만큼 더 올린 타일맵을 만들면 그 사이 점프해서 들어갈 때 y축이 2인 중간 타일맵의 끝자락에 걸쳐서 캐릭터의 밑으로 쏜 레이저가 히트 되지 않아 isjumping이 true인 상태로 착지가 되는 경우가 있습니다. 움직이긴 하는데 점프 모션이 굳어있는 상태로 움직여집니다.
    그냥 쉽게 말해 레이캐스트가 되지 않았다고 말할 수 있을 것 같아요.
    이런 경우에는 그냥 콜라이더로 충돌체크를 다르게 해서 점프를 구분하게 코드를 짜야 할까요? 아니면 레이캐스트를 이용해서 이 상황도 풀어나갈 수 있을까요?

    • @goldmetal
      @goldmetal  5 лет назад

      캐릭터 콜라이더를 Box에서 capsule로 바꾸어주세요. 그럼 세로로 쌓인 플랫폼에 걸리지 않습니다.

  • @Lk24191
    @Lk24191 4 года назад +2

    좋은 강의 항상 잘 보고 있습니다. 감사합니다. Raycast를 down 으로 사용할 경우, 가장자리의 처리는 어떻게 해야 하나요? 캐릭터의 정중앙이 Platform에 닿아야만 체크가 되서.. 가장자리 좌표를 찾아 Raycast를 3개 사용해야 할까요?

    • @goldmetal
      @goldmetal  4 года назад +3

      플레이어 이동방향으로 Ray를 기울여서, 살짝 옮겨서 쏘면 정확해집니다.
      아니면 아예 넓이가 있는 Cast 방식을 사용하셔도 됩니다.
      해당 내용은 아래 링크로 드릴께요.
      wergia.tistory.com/102

    • @Lk24191
      @Lk24191 4 года назад

      @@goldmetal 정말 감사합니다!

  • @hj_chan
    @hj_chan 3 года назад

    골드메탈님, raycast2D 명령어로 플레이어 중심에서 아래에 레이저를 발사하는데, 레이저가 너무 얇아서 플랫폼 왼쪽, 오른쪽 끝에 착지할 때
    raycast가 플랫폼 밖에 위치해 플랫폼을 감지하지 못해 점프 애니메이션으로 고정되고, 점프 애니메이션이 끝나지 않아 점프를 할 수 없게 되는 일이 발생하는데
    어떻게 해결하면 좋을까요? raycast를 두껍게 발사할 수는 없나요?

    • @goldmetal
      @goldmetal  3 года назад

      2D일 경우 BoxCast, CircleCast로 두껍게 쏠 수 있습니다.
      아래 링크로 사용법 공유해드릴께요
      devgom87.tistory.com/38

  • @다선중학교유튜버
    @다선중학교유튜버 3 года назад

    좋은 강의 감사합니다😀. 점프, 착지 애니메이션을 만든 후 실행을 했을 때 점프를 하면 점프하는 동안 jump 애니메이션이 계속 나오고 땅에 착지하면 idle 애니메이션이 작동 해야하는데, 저는 점프키를 누르면 점프는 하지만 점프 하고 있는 동안 jump 애니메이션이 잠깐 나왔다가 공중에 있는 도중에 walk 애니메이션으로 바뀌고, 땅에 착지하면 idle 애니메이션이 나오는데 어떤 것이 문제일지 알려주실 수 있을까요?

    • @goldmetal
      @goldmetal  3 года назад

      애니메이터에서 Jump -> Walk 로 가는 화살표 Transition의 Condition 조건이 잘 들어가있는지 확인해보세요. isExitTime 도 체크 해제되어야 합니다.

  • @KT-oz1md
    @KT-oz1md 2 года назад +1

    명강의네요 많이 배우고 갑니다

  • @bbyongusagi
    @bbyongusagi 2 года назад

    레이캐스트 레이저가 게임 화면에도 보이는데 이건 어떤 문제인가요?
    //레이
    if (rigid.velocity.y < 0)
    {
    Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
    RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("PlatForm"));
    if (rayHit.collider != null)
    {
    if (rayHit.distance < 0.45f)
    animator.SetBool("isjump", false);
    }
    }

    • @goldmetal
      @goldmetal  2 года назад +1

      Game 창 위쪽의 오른쪽에 Gizmo버튼 누르면 게임에서도 보입니다. 그거 끄시면 안보이니 참고해주세요

  • @enfiendo5250
    @enfiendo5250 2 года назад +1

    골드메탈님 영상 잘 보고 있습니다!
    현재 저는 저희 학교 동아리 팀원이 직접 만든 도트 캐릭터를 가지고 진행을 하는 중입니다. 영상을 보면서 raycast를 만들던 도중 문제가 발생했습니다. raycast의 길이가 너무 짧아 바닥에 닿지 않습니다. raycast의 길이를 늘리는 방법이 있을까요?
    (일단 최선의 방법으로 어쩔 수 없이 캐릭터의 크기를 줄이는 방법을 사용했습니다.)

    • @goldmetal
      @goldmetal  2 года назад +1

      두번째 인자값을 늘려주시면 됩니다.
      Vector3.down * 2f 이런식으로 뒤에 곱해주세요.

  • @하철우
    @하철우 2 года назад

    안녕하세요 골드메탈님 2d 점프 관련 애니메이션 구현해서 질문이 있습니다 !! ㅠㅠ
    점프 애니메이션이 바닥에 레이어를 쏴서 닿으면 플레이어의 애니메이션이 끝나잖아요 ?
    근데 제 캐릭터가 좀 커서 점프한 후 레이어가 중앙에서 나오니
    블럭 끄트머리에 플레이어가 걸치면 레이어가 블럭에 닿지않아 플레이어 애니메이션이 점프 중인 상태로 유지되는데
    이런 경우 어떻게 해결하면 좋을까요 ?

    • @goldmetal
      @goldmetal  2 года назад

      레이를 더 세게 주시면 됩니다. 첫번째 인자값 벡터에 숫자를 더 곱하면 그만큼 길게 쏘니 참고 바랍니다.

  • @이호용-t9f
    @이호용-t9f 3 года назад

    정상작동 하는데 갑자기 뭐지? 싶어서 댓글 남깁니다.
    점프후 착지 그 이후 다시 Idle애니메이션으로 돌아가는데 ,착지되는 순간에 타이밍 잘맞춰 점프키를 누르면
    원래 높이의 절반도 뛰지 않습니다. isJumping 값이 true -> false -> true로 바뀌는 것은 확인 해서 더블점프는 아닌거 같고
    어떤 Physics2D와 관련이 있는걸까요?

    • @goldmetal
      @goldmetal  3 года назад

      아직 낙하속도 rigid.velocity.y 값으로 인해 상쇄되서 그렇습니다.
      제대로 점프를 구현하려면 점프 로직에서 첫번째로 rigid.velocity = new Vector2(rigid.velocity.x, 0); 으로 y축 값을 없애주어야합니다.

  • @서상민-h9j
    @서상민-h9j 4 года назад

    "02.점프-착지 애니메이션" 부분까지는 구현을 했는데 Parameters창에서 isWalking과 isJumping의 체크박스가 계속 꺼져있습니다. 그리고 오른쪽에 애니메이션 흐름도(?)에서도 각 애니메이션의 진행 상황(파란색 바)이 표시가 안되는데 혹시 해결 방법이 있을까요?
    게임 창 내에서는 이동, 점프 전부 작동이 되는 상황입니다.

    • @goldmetal
      @goldmetal  4 года назад

      SetBool() 함수로 값을 세팅하는지 스크립트 확인해보시고,
      애니메이터 보실 때는 게임 플레이 후, 애니메이터를 가지고 있는 오브젝트를 선택해주셔야 합니다.

  • @민둠미
    @민둠미 4 года назад +1

    제가 2일 전에 유니티 신버전을 다운받고 어제부터 강의를 꾸준히 봐왔는데 anim.SetBool("isJumping", true) 이 부분에서 에러가 나더라고요 혹시나 해서 그 부분을 지워보고 실행했는데 그러면 되더라고요 그리고 다시 썼는데도 에러가 나서 실행이 안돼더라고요 이 문제를 해결할 방법이 없을까요? (그리고 b13, b14 에서 픽셀 그림을 다운로드 받고 캐릭터를 동글동글한 공모양으로 수정해서 걷는 에니메이션은 안넣었습니다)
    밑은 전체 c# 구문입니다
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class PlayerMove : MonoBehaviour
    {
    public float maxSpeed;
    public float jumpPower;
    Rigidbody2D rigid;
    SpriteRenderer spriteRenderer;
    void Awake()
    {
    rigid = GetComponent();
    spriteRenderer = GetComponent();
    }
    void Update()
    {
    //Jump
    if (Input.GetButton("Jump")) {
    rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);
    anim.SetBool("isJumping", true)
    }

    //Stop Speed
    if(Input.GetButton("Horizontal")) {
    rigid.velocity = new Vector2(rigid.velocity.normalized.x*1f, rigid.velocity.y);
    }

    //Direction Sprite
    if (Input.GetButton("Horizontal"))
    spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1 ;
    }

    void FixedUpdate()
    {
    //Move Speed
    float h = Input.GetAxisRaw("Horizontal");
    rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);

    if(rigid.velocity.x > maxSpeed) //Right Max Speed
    rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
    else if(rigid.velocity.x < maxSpeed*(-1)) //Left Max Speed
    rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
    }
    }

    • @goldmetal
      @goldmetal  4 года назад

      anim 변수 선언이 안되어있습니다. 전역변수로 선언과 초기화 해주세요.

    • @민둠미
      @민둠미 4 года назад

      아.. 혹시 죄송한데 유니티 배운지 이틀되서 뭔말인지 모르겠네요 ㅠㅠ 풀어서 설명해주실수 있나요?

    • @goldmetal
      @goldmetal  4 года назад

      @@민둠미 C# 프로그래밍 기초를 건너뛰신 모양이군요.
      위쪽에 Rigidbody2D rigid; 가 있는 것이 바로 변수 선언입니다. 이렇게 변수를 만든 다음 값을 넣어주고 변수를 원하는대로 이리저리 요리하는거죠. anim 변수의 경우 선언도 안된 상태로 사용하려니 찾지 못해서 에러가 발생하는 겁니다.
      Animator anim; 해주시고 Awake() 함수 내에서 anim = GetComponent(); 로 초기화 해주시면 됩니다. C# 기초 강좌 B4가 있으니 왠만하면 이쪽부터 학습하시길 권장해드립니다.

    • @민둠미
      @민둠미 4 года назад

      @@goldmetal 흠.. 저도 위에 말을 보고 한번 b15도 다시 봐보고 해서 여기까진 했습니다
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      public class PlayerMove : MonoBehaviour
      {
      public float maxSpeed;
      public float jumpPower;
      Rigidbody2D rigid;
      SpriteRenderer spriteRenderer;
      Animator anim;

      void Awake()
      {
      rigid = GetComponent();
      spriteRenderer = GetComponent();
      anim = GetComponent();
      }
      void Update()
      {
      //Jump
      if (Input.GetButton("Jump")) {
      rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse)
      anim.SetBool("isJumping", true);
      }

      //Stop Speed
      if(Input.GetButton("Horizontal")) {
      rigid.velocity = new Vector2(rigid.velocity.normalized.x*1f, rigid.velocity.y);
      }

      //Direction Sprite
      if (Input.GetButton("Horizontal"))
      spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1 ;
      }

      void FixedUpdate()
      {
      //Move Speed
      float h = Input.GetAxisRaw("Horizontal");
      rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);

      if(rigid.velocity.x > maxSpeed) //Right Max Speed
      rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
      else if(rigid.velocity.x < maxSpeed*(-1)) //Left Max Speed
      rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
      }
      }
      혹시 여기서 문제점이 있나요?

    • @민둠미
      @민둠미 4 года назад

      @@goldmetal 오 어찌저찌하니 해결 됬어유 감사합니다

  • @kungburibab
    @kungburibab 3 года назад

    이거 레이캐스트 할때 저는 2등신 캐릭터를 써서 몸통 반쪽 크기가 딱 1이라서 첫 매개변수 rigid.position-new Vector2(0,1.01f)로 정하고 쐈더니 딱 발에서 나가네요.. 사실 제가 2D플랫포머 만들때 2단 점프도 넣고 플랫폼 뿐만 아니라 적을 밟았을때도 점프 횟수가 충전되는 걸 원했거든요 ㅋㅋ; 그래서 레이어 마스크는 주석으로 메모만 해놓고 그냥 안 쓰려구용..아니면 레이어 마스크 쓰는 버전의 함수도 혹시 레이어마스크를 여러개 가져올 수 있나요?

    • @goldmetal
      @goldmetal  3 года назад

      쉼표로 구분하여 한번에 여러 레이어를 마크로 지정할 수 있습니다.
      docs.unity3d.com/ScriptReference/LayerMask.GetMask.html

  • @yjames5943
    @yjames5943 4 года назад +1

    안녕하세요. 항상 잘 보고 있습니다. rayhit 초록색 선을 더 길게 주고 싶은데. 길이를 늘리는 방법이 없을까요? 인간형 케릭터를 만들어서 똑같이 스크립터 짜보는 중인데, 사이즈 1 1 인 케릭터와 달리 인간케릭이 새로로 길어서 콜라이더가 늘어지는데, rayhit 초록색 선이 짧아서 땅에 안 닿습니다 ㅜㅜ

    • @goldmetal
      @goldmetal  4 года назад

      RayCast 두번째 매개변수 벡터를 더 아래로 크게 주시면 됩니다.
      해당 영상에선 Vector2.down 으로 했는데 여기서 *2 더 붙여서 크게 늘리시면 됩니다.

    • @yjames5943
      @yjames5943 4 года назад

      @@goldmetal 감사합니다! 항상 좋은 영상 올려주셔서 잘 배우고 있습니다 !!!

  • @우르키오라-u6q
    @우르키오라-u6q 2 года назад

    골드메탈님 영상 내용이랑은 살짝 다른 질문입니다...
    제가 더블점프를 구현하였는데.. 이제 애니메이션을 붙여야하는데.. 더블점프니까 점프를 2개하게 되면 점프 애니메이션이 연속으로 2번 발동하고 싶은데... 이러면 쉽게 짜는 방법이 (Animator)로 해야하나여?? 스크립트로 해야하나여??? 혹시나... 어떻게 해야하는지 아신다면 알려주실 수 있으신가여...

    • @goldmetal
      @goldmetal  2 года назад

      점프 자기자신을 가리키는 Transition을 추가해주시고 파라메터는 isKeyDown이라는 Trigger 하나 더 만드시고 점프 상태로 가는 Transition의 Condition에 추가해주세요. 점프할 때마다 SetTrigger("isKeyDown"); 호출해주시면 되겠지요.

    • @우르키오라-u6q
      @우르키오라-u6q 2 года назад

      @@goldmetal 제가 Idle-> Jump1 상태로 가는 상태로 이미 만들어준 상태거든요.. 근데 골드메탈님 말씀은 Idle->Jump1->또 Jump 애니메이션을 Jump1뒤에 연결해서 Idle->Jump1->Jump2이런식으로 연결하라는 말씀이신건가여???

    • @goldmetal
      @goldmetal  2 года назад

      @@우르키오라-u6q Jump1 -> Jump1 이렇게 자기자신을 바라보는 Transition을 만들 수 있습니다. 직접 우클릭하셔서 눌러보시면 삼각형으로 만들어지는 Transition을 보실 수 있습니다.

  • @You-ks4iz
    @You-ks4iz 4 года назад

    선생님 영상 잘보고있습니다! 질문이 하나 있는데요
    선생님 애니메이션 말고 에셋스토에서 가져온것중에
    점프하는 모션이 한개뿐인 스프라이트는 어떻게 케릭터에 적용해야하나요??
    점프이미지를 케릭터에 드래그 해도 애니메이션 저장하는게 안뜨고 씬뷰에 점프하던 그 이미지가 들어가버려요

    • @goldmetal
      @goldmetal  4 года назад +1

      일단 아무거나 하나 더 선택해서 최소 두개 스프라이트를 선택한 상태로 드래그해서 애니메이션을 만드세요.
      그리고 Ctrl + 6으로 애니메이션 창을 띄우고 다시 점프 애니메이션을 선택한 다음
      점프 스프라이트만 남기고 나머지 스프라이트 키프레임은 지우시면 됩니다.

    • @You-ks4iz
      @You-ks4iz 4 года назад

      @@goldmetal 아하! 그런방법이 감사합니다~

  • @Noname-pc1qr
    @Noname-pc1qr Год назад

    안녕하세요 골드메탈님! 메탈님 영상을 바탕으로 전체적인 내용은 따라하면서 배경이나 플랫폼, 플레이어의 디자인 등을 살짝씩 바꾸면서 따라가고 있는데, 제가 플레이어 디자인을 빼빼로처럼 길게 만들었더니 rigidbody 가운데서 시작한 레이캐스트가 바닥까지 안 닿는데 이럴 경우에는 어떻게 해야할까요??ㅠㅠ

    • @goldmetal
      @goldmetal  Год назад

      레이캐스트의 세번째 인자값 숫자를 늘리시면 그만큼 늘어납니다.

  • @갱이-d9f
    @갱이-d9f 2 года назад

    골드메탈님 안녕하세요, 지금까지 혼자 해결했는데 막히는 부분이 있습니다.
    1. 처음에는 전부 잘 작동되다가 1단 점프를 설정하고 난 뒤부터 애니메이션이 계속 점프일때로만 설정이되고, 걷고있는데도 isjumping에 체크가 되어있어요.
    2. 그리고 멈췄을때도 멈추지 않습니다 .. ! 분명 아까는 잘 됐는데 소스코드도 같고 뭐가 문제인가요 ..?
    3. 1단 점프 소스코드를 같게 작성하였는데 그 전까지는 무한점프 잘 되다가 1단점프 소스코드 작성하자마자 점프가 안됩니다. .
    말도 안되는 오류라서 죄송하지만 해결가능한 부분 좀 알려주세요 ㅜㅡㅜ

    • @갱이-d9f
      @갱이-d9f 2 года назад

      if (Input.GetButtonDown("Jump")&& !anim.GetBool("isJumping")){ //1단만 가능
      rigid.AddForce(Vector2.up * jump, ForceMode2D.Impulse);
      anim.SetBool("isJumping", true);
      여기에 문제가 있나요 ..?

    • @갱이-d9f
      @갱이-d9f 2 года назад

      다른거 다 해결했는데, 1단점프만 안되고, 무한점프가 됩니다 ... 골든메탈님 살려쥬세요 ...
      /*Jump*/
      if (Input.GetButton("Jump")&& !anim.GetBool("isJumping")){ //1단만 가능
      rigid.AddForce(Vector2.up * jump, ForceMode2D.Impulse);
      anim.SetBool("isJumping", true);
      }

    • @goldmetal
      @goldmetal  2 года назад

      애니메이터 들어가시고 대소문자 정확히 isJumping 파라메터가 있는지 확인해주세요.

  • @송연-l7n
    @송연-l7n 4 года назад +2

    플레이어의 점프나 이동같은 것도 델타타임을 곱하지 않는 이유가 있나요? 제가 영상을 본대로라면 컴퓨터의 성능의 따라 점프 높이, 이동하는 거리가 달라질 수도 있지 않나요?

    • @goldmetal
      @goldmetal  4 года назад +2

      Update에서 이루어지는 transform 이동은 델타타임이 들어가야 하나,
      FixedUpdate에서 이루어지는 물리효과 이동에는 델타타임이 필요하지 않습니다.
      델타타임은 Update 프레임과 연관된 시간 변수이기 때문이죠.
      docs.unity3d.com/kr/530/ScriptReference/Time-deltaTime.html

    • @송연-l7n
      @송연-l7n 4 года назад +1

      @@goldmetal 아 Update함수에서만.. 잘 알았습니다. 답변 감사해요!!

  • @otowow1538
    @otowow1538 4 года назад

    잘들었습니다 ! 하나 질문이있는데
    플레이어가 공중에서 초기 위치값을 가질 때, 이미 anim bool값이 false라서 점프가 한번 실행되는데
    이 변수값을 true로 초기에 선언하려면 start함수에 써야하나요 awake함수에 써야하나요?

    • @goldmetal
      @goldmetal  4 года назад

      animator 변수만 먼저 선언 초기화한다면 상관은 없습니다.
      스크립트 말고도 애니메이터 내에서 아예 미리 체크해버리는 방법도 있으니 참고하세요.

    • @otowow1538
      @otowow1538 4 года назад

      골드메탈 아 애니메이터에서 먼저 정하면 되겠군요..! 답변감사합니다

  • @Sparronix
    @Sparronix 4 года назад

    항상 강좌 잘 보고 있습니다.
    질문이 또 생겨 댓글 남겨봅니다.
    1. 캐릭터 방향전환의 키가 순간적으로 따닥 하고 누르면 작동을 하지 않는지, 뒷걸음질을 치는데 해결할 방법이 없을까요?
    if(Input.GetButtonDown("Horizontal"))
    {
    SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
    }
    2. 이유는 모르겠지만 점프 상태에서 방향전환이 이루어지지 않습니다...
    위 SpriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
    의 값이 입력키값 좌측일 경우 -1로 들어오는건 확인했는데, 회전만 플립만 안되더라구요...;;
    > 정확하게는 왼쪽으로 뛴 후, 오른쪽으로 턴을하면 정상적으로 작동하는데
    > 오른쪽으로 뛴 후, 왼쪽으로 턴을 하면 계속 오른쪽을 바라본 상태를 유지합니다.

    • @Sparronix
      @Sparronix 4 года назад

      두 문제 다 아래와 같은 방식으로 해결을 하긴 했습니다.
      if (Input.GetButtonDown("Horizontal")) 이걸 조건으로 회전을 시키던 규칙을
      if(rigid.velocity.x < 0) 이 규칙으로 바꾸고 나니까 회전은 정상적으로 작동하고 있습니다.
      문제는 멈춘 다음에 다시 오른쪽으로 돌아보는 문제가 생기네요...;;

    • @goldmetal
      @goldmetal  4 года назад

      해당 로직을 FixedUpdate에서 Update로 옮겨주세요.

  • @imlmhl874
    @imlmhl874 10 месяцев назад +1

    Hi 골드메탈!
    I'm so apologize because I can't speak Korean. May you help me to fix "the referenced script (unknown) on this behavior is missing". I have already checked all the code and it's true. But I don't know how to fix this error. I also make the transition for 'jump' and 'idle". However, when I start the game, 'jump' doesn't work, only 'idle' runs
    Thank you so much

    • @goldmetal
      @goldmetal  10 месяцев назад +1

      The problem is caused by a C# script asset you created missing from your project.
      If you accidentally deleted it, check the Windows Recycle Bin. Fortunately, if you have deleted C# scripts, you can restore them and put them back into your Unity project.
      Animation problems often occur because the parameters of C# scripting and animator do not match. (human error)
      Place the animator window and the game window side by side, enter play mode, select the player object, and try jumping.
      If the animator state does not change, you will be able to find the answer by looking closely at the parameters and transition conditions.

    • @imlmhl874
      @imlmhl874 10 месяцев назад

      @@goldmetal thank you a lot, goldmetal. I have already restored C# script. Let me try to check the parameters and transition conditions again.
      many thanks.

  • @revo7711
    @revo7711 8 месяцев назад +1

    오른쪽 방향키 DOWN > 왼쪽 방향키 DOWN > 오른쪽 방향키 UP 순으로 누르면 오른쪽을 보면서 왼쪽으로 이동합니다. 이를 방지하려면 state를 어떻게 설계하면 좋을까요?

    • @goldmetal
      @goldmetal  8 месяцев назад +1

      업데이트에 작성한 GetButtonDown을 GetButton으로 교체해주세요

  • @지니-h2x4q
    @지니-h2x4q 4 года назад

    금철님 항상 잘보고있어요😉
    지금도 댓글 달아주실지 모르겠지만..
    제가 점프를 하고 땅에 닿을 때 타일 사이로 떨어지면 애니메이션이 부들부들거린다고해여하나.. 렉걸린것처럼 움직이는데 뭐가 잘못일까여????

    • @goldmetal
      @goldmetal  4 года назад

      플레이어 콜라이더를 캡슐 콜라이더로 바꾸어주시고, 리지드바디 마지막 옵션인 Freeze Rotation Z를 체크해주세요.
      그래도 동일하다면 이 영상에서 설명한 Physics > Min Distance Offset 을 원래대로 0.1로 돌려놓고 테스트 해보세요.

    • @지니-h2x4q
      @지니-h2x4q 4 года назад

      골드메탈 캡슐콜라이더랑 프리즈 잠궈놓은 상태에용 Physics가 유니티 편집창에서 말씀하시는거죠?? 하지만 Min Distance offset 을 못찾겠네요 ㅠㅠㅠ 캡슐콜라이더 크기 때문에도 이러는것 같기도 하고 ㅜㅜ어엉엉