[유니티] Rigidbody로 캐릭터 움직임 구현

Поділитися
Вставка
  • Опубліковано 25 жов 2024
  • 탑뷰 방식의 캐릭터 컨트롤을 구현하는 방법을 소개합니다.
    구체적인 방법은 유니티의 리지드바디를 사용하였으며
    처음 해보는 초보자들도 따라만한다면 이해할 수 있도록 자세하게 설명하였습니다.
    사실 구현하는 방법은 너무나 많기 때문에
    제가 소개한 방법보다 훨씬 더 좋은 방식들도 많습니다.
    초보자를 위해서 간단한 방식으로 구현했습니다.
    시청해주셔서 감사합니다.
    저도 아직 모르는게 많고 부족한 부분이 많기 때문에
    저 역시 공부한다는 생각으로 찾아보고 조사하면서 영상을 만들고 있습니다.
    틀린 부분이나 보충할 부분이 있다면 댓글로 남겨주시면 감사하겠습니다.
    문의 및 이메일 : devtodaycoding@gmail.com

КОМЕНТАРІ • 42

  • @mlcats5445
    @mlcats5445 2 роки тому +12

    지식을 전달하는 기술은 생각보다 어렵습니다.그런점에 오늘 코딩님의 강의방식은 웬만한 유료강의보다 전달력이 좋아요.가난한 초보 프로그래머의 등불이 되어 주심에 감사하고 고맙습니다.2년안에 유튜브 최고의 코딩선생님이 되실것이라 예견해봅니다.

    • @오늘코딩
      @오늘코딩  2 роки тому +2

      너무 기분이 좋아지는 극찬 댓글 감사합니다! 남겨주신 말씀에 부응하기 위해서 더 좋은 영상들 업로드하도록 노력해보겠습니다! 감사합니다!!

  • @woo00hyuijk122_
    @woo00hyuijk122_ 2 роки тому +3

    와.. 이 채널 숨겨진 보석이네요. 선생님 이해 잘되게 설명을 너무 잘하십니다 👍

  • @wonnyjo9428
    @wonnyjo9428 2 роки тому +2

    정말 많은 도움이 되는 채널을 찾게 되었네요. 영상 감사합니다. 질문 하나 드려도 될까요? 대쉬 부분에서 mathf.Log 부분에 해당 값만 확인해보니까 -infinity값이 나오더라고요 마이너스를 붙여서 infinity가 나오고요 이렇게 되면 무한대 값을 반환하는데 여기서 무한대 값은 무한대의 힘을 말하는 건 아닌 것 같고(그러면 오브젝트가 엄청난 속도를 가지는 것이나까요) 어떤 것을 의미하는 건가요? 그리고 drag의 역수에서 1/변수 에서 변수는 다른 값으로 바꿔도 인피니트가 나오는데 변수를 10에서 다른 값으로 했을 때 dash가 다르게 되는 건가요(rigidbody.drag를 그냥 상수로 바꾸니까 에러가 뜨더라고요). 긴 글 읽어 주셔서 감사합니다.

    • @오늘코딩
      @오늘코딩  2 роки тому

      어떻게 계산을 하신건지는 모르겠는데, 제 영상에 나온 그대로 했다면 mathf.log 부분은 무한대 값을 반환하지 않고 약 -2.302585를 반환합니다.
      디버깅을 다시한번 해보시길 바랍니다.

  • @JJYYHH-t3y
    @JJYYHH-t3y Рік тому +1

    애니메이션만 할줄 알아서, 유니티에서 구현해보고 싶었는데 너무 잘 알려주셔서 감사합니다. ㅠㅠ 팬이 될것 같습니다.

  • @상위포식자
    @상위포식자 2 роки тому +1

    내용도 알차고 친절하시고 심지여 목소리도 좋네요 강의내용이 완벽해서 너무 좋네요~
    좋은 강의 만들어 주셔서 감사합니다

  • @jjbbk5676
    @jjbbk5676 8 місяців тому

    오 강의 너무 좋아요~감사합니다.구독박고 갑니다

  • @박성찬-c1w
    @박성찬-c1w Рік тому +2

    유니티 3인칭 캐릭터 템플릿에서는 캐릭터컨트롤러 + 뉴인풋 시스템으로 캐릭터 움직임을 구현하더라고요. 리지드바디, 트랜스폼, 캐릭터 컨트롤러, 뉴인풋 시스템 및 기존 인풋시스템, 아니면 에셋스토어에서 개인이 올린 캐릭터 컨트롤러 에셋도 있고요. 방법이 워낙 많으니 어떤 걸 써야할지 모르겠습니다. 권장되는 방법이 있나요?

    • @오늘코딩
      @오늘코딩  Рік тому

      하나하나 비교해보면 더 효율적인 순서는 있겠지만, 사실 큰 의미는 없는 것 같고 본인 편한거 쓰면됩니다. 개인적으로는 남이 만든거 쓰느니 그냥 내가 만들어야 나중에 수정하기도 편하다는 주의라서 직접 만드는걸 추천합니다

  • @신주길
    @신주길 Рік тому

    점프나 대쉬기능을 넣지 않은 상태에서 움직이는 것만 썼습니다. 그 상태에서 캐릭터가 움직이다 멈출때 그 자리에서 바로 멈추지 않고 움직이고 있던 방향으로 미끄러지다 멈춤니다. 왜 이러는 걸까요?

  • @whatIsHandle792
    @whatIsHandle792 Рік тому +1

    점프 기능에서 Ray 쏘는 길이를 세부조정을 했을 때 땅에 닿기 직전에 곧바로 점프를 하면, 점프가 여러번 되는 현상과 점프가 아예 안 되는 현상이 동시에 발생합니다. 세부조정하는 것 외에 다른 방법이 있을까요?

    • @whatIsHandle792
      @whatIsHandle792 Рік тому +1

      OnCollisionEnter 함수를 쓰면 이 문제가 해결되긴 합니다

    • @오늘코딩
      @오늘코딩  Рік тому +1

      @@whatIsHandle792 사실 이 영상은 가장 기초적인 방식의 구현이라서 그냥 사용하게 되면 여러가지 버그가 발생할 수 있습니다. 보통은 말씀하신 것처럼 콜리전엔터 통해서 해결합니다.

  • @abzc1281
    @abzc1281 8 місяців тому

    29:45
    제 생각엔 대쉬 진행중일 때와 아닐 때 drag 값을 다르게 줘서 낙하 문제를 해결할 수도 있을 것 같네요
    대쉬 상태를 구별하는 방법으론 drag 값에 의해 dashpower가 유의미하게 사라지는 시간을 수식으로 계산하는 방법이 있을 것 같아요.

  • @왕초보게임개발
    @왕초보게임개발 2 роки тому +1

    안녕하세요~! 많은 도움 받고 있는 왕왕초보 유니티 사용자 입니다. 질문을 드리고 싶은데 혹시 물리 에러가 나는데 어떻게 고쳐야 할지 막막합니다. 오늘코딩님께서 하신데로 했는데 캐릭터가 움직이면서 물체에 충돌을 하면 혼자 돌고 있어서 제가 돌아 버리겠습니다. ㅠㅠ

    • @오늘코딩
      @오늘코딩  2 роки тому +1

      리지드바디 속성 중에서 Constraints 열어서 로테이션에 전부 체크하셨나요?

  • @황금두부
    @황금두부 Рік тому +1

    그 PlayeMove 스크리트를 캐릭터에 드래그해서 넣고 클릭해서 들어갈려하는데 안들어가집니다..왜 안들어가지나요?
    다운로드 보기가 들어가져요..

    • @오늘코딩
      @오늘코딩  Рік тому

      스크립트를 먼저 클릭해서 열고 난 뒤에 캐릭터에 드래그해서 붙여보세요. 컴파일이 제대로 이뤄지지 않아서 그럴때가 있습니다.

  • @TV-nm5tq
    @TV-nm5tq Рік тому

    21분4초때에서 21분44초에 forward에서 왜 갑자기 position으로 바뀌나요. 답변 부탁드릴게요

  • @vovovovookbook
    @vovovovookbook Рік тому

    혹시 이 유니티 무슨 버전인가요? 제가 1년째 이것도 못하는데 대부분 강의 영상의 버전이 틀려 오류가 제가 생기더라고요

  • @삶은너구리
    @삶은너구리 Рік тому

    다른사람들한테 추천할게요 설명잘하시니까 올려드려야지

  • @doeunfirst
    @doeunfirst 4 місяці тому

    감사합니다~

  • @stonein3165
    @stonein3165 2 роки тому

    영상 감사합니다.

  • @CodeBlues-TimeisGold
    @CodeBlues-TimeisGold Рік тому

    좋은 지식들 감사합니다.

  • @borjigin
    @borjigin 2 роки тому

    친절하고 너무 유익해요......(_ _) 넙죽
    감사드립니다....

  • @DDoogie
    @DDoogie Рік тому +1

    죄송하지만 mathf.log가 어떤 역할인지 잘 모르겠습니다. 답글로 알려주시면 감사하겠습니다.

    • @오늘코딩
      @오늘코딩  Рік тому +1

      말 그대로 밑이 자연상수인 log 계산을 해주는 함수입니다.

  • @솔무한
    @솔무한 2 роки тому

    좋은 강의 감사합니다!^^

  • @Dragons2game
    @Dragons2game Рік тому +1

    밑에 화살표 2:35 어떻게 하는거죠 똑같이 해도 안되서 답답하네요 ㅠㅠ 자꾸 가운데로 생겨요.

    • @goldenyear2909
      @goldenyear2909 Рік тому

      creat empty로 빈 오브젝트 만들고 그 안에다 캡슐 만들어서 캡슐만 위로 올리면 됨.creat empty 좌표 부분은 건들지 말고

  • @rianb6897
    @rianb6897 7 місяців тому

    살짝 움직임이 밀리는게 정상인가요?

  • @jangseokhan1984
    @jangseokhan1984 Рік тому

    9:00 유니티 소스코드를 까보진 않았지만 rotational constraints는 연산을 하지 않는게 아니라 그냥 0으로 세팅하고 연산하는것으로 알고 있습니다.
    일반적으로 3D 강체 물리에서 관성 모멘트 텐서가 3x3 행렬인데, 그중에 로컬 텐서의 값(xx, yy, zz)들을 세팅해주는거죠. (이후에 현재 world 회전 상태를 곱해주면 별도의 xy, xz, yz 값들이 구해집니다.)
    알짜토크에서 각 가속도를 계산할때 역 관성모멘트 텐서의 값을 0으로 해주는 것 또는 0을 곱하게 해주는 것이죠. 그것도 아니면 0으로 마스킹 하거나요.
    대부분 아시는 뉴턴 공식으로 말하면 f=ma, a = f/m 역질량 1/m이 0이면 질량이 무한대라 알짜힘으로 인한 운동의 변화가 없게 되죠.
    같은 역할로, 역관성텐서의 값이 0이면 해당 회전에 대한 DOF를 제약해 주는 효과가 있는것이죠.
    관성 텐서의 경우 행렬이기 때문에, 보통은 역행렬을 생각해서 0으로 세팅한다면 역행렬 연산시에 부하가 줄어 드는게 아닌가 할수 있지만
    로컬 관성 텐서의 경우 대각행렬이기 때문에 (관성 텐서를 구하는 연산 자체가 평행축 정리를 이용해 대각행렬로 만드는 편입니다.) 역행렬 자체가 손쉽게 계산됩니다.
    즉 켜고 끔에 따라 물리 연산 부하는 거의 없다고 이해하셔도 됩니다.
    물론 그런 연산의 최적화가 없는 엔진이라면 일부 좀 빨라질수도 있겠지만요...
    대략적으로 보여드리면
    | xx, 0, 0 |
    | 0, yy, 0 |
    | 0, 0, zz |
    로컬 관성텐서는 이런 형태이고, 저기서 xx, yy, zz의 값을 0으로 세팅하는 역할입니다.
    당연히 이 행렬의 역행렬은 1/xx, 1/yy, 1/zz를 대각행렬로 가지고 있고요.
    이런 방식으로 소스코드가 돌아가는게 아니라면,
    모든 연산을 동일하게 끝낸 후에 개별 강체마다 DOF를 제한하는 방법도 있는데, 이렇다면 더더욱 연산 부하는 아무 상관이 없구요.
    저는 유니티의 소스를 까본게 아니기 때문에, 정확한 작동 방식은 모르겠습니다만, 대부분의 엔진들이 저런 방식으로 회전 DOF 제약을 걸어줍니다.
    혹시나 틀린 부분이 있다면 답글 달아주세요 ^^7

  • @goods7994
    @goods7994 2 роки тому +1

    캡슐 기여워ㅜㅜ

  • @망두-d3t
    @망두-d3t Рік тому +1

    무슨문제인진 모르겠지만 움직일떄 앞뒤만 움직여지네요 왜그럴까요.. 답변 부탁드립니다 ㅠㅠ

    • @오늘코딩
      @오늘코딩  Рік тому

      제 코드와 동일하게 작성했다면 다르게 움직일 수가 없습니다.
      코드를 잘못 따라친 겁니다.

    • @망두-d3t
      @망두-d3t Рік тому

      @@오늘코딩 그러면 코드를 다시 고치면 잘움직일까요??

    • @오늘코딩
      @오늘코딩  Рік тому +1

      모든걸 똑같이했다면, 영상과 다른 결과가 나올 수가 없습니다.

  • @망두-d3t
    @망두-d3t Рік тому +1

    20:31 이떄 짝대기 2개 기호가 뭘까요 ㅠㅠ

    • @오늘코딩
      @오늘코딩  Рік тому

      보통 엔터위에 있는 원화기호 혹은 \ 기호입니다.
      쉬프트 키 누른 상태에서 누르면 | 이렇게 입력됩니다.

  • @우주최강뿡뿡-q5g
    @우주최강뿡뿡-q5g 10 місяців тому

    레이어 창이 안뜨는데 머가 문제일까요ㅠ

  • @kidult282
    @kidult282 6 місяців тому

    쥰내어렵누..