3D 쿼터뷰 액션게임 - 플레이어 점프와 회피 [유니티 기초 강좌 B39]

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

Комментарии • 414

  • @개발종권
    @개발종권 2 года назад +17

    골드메탈님 덕분에
    2022 메타버스 콘텐츠 리쿠르팅 캠프에 참가해서 무려 아이패드 받아왔습니다.
    아무래도 이 강의에서 보여주신 에셋 정리, 하이어라키 정리, 코드 정리를 골드메탈님 따라 깔끔하게 해봤는데
    그 부분에서 좋은 점수를 받았나봐요.
    정말 감사합니다. 별거 아니지만 이렇게라도 감사 인사를 드리고 싶네요.
    앞으로도 좋은 강의 잘 부탁드립니다!!!!

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

      와! 정말 축하드립니다. 좋은 소식을 이렇게 공유해주셔서 감사해요 🥰
      앞으로도 좋은 결과 얻으시길 바랍니다.

  • @류흠냥
    @류흠냥 2 года назад +9

    골드메탈 님 강좌 잘 보고있습니다. 감사합니다. 그런데 17:55 부분에 wall의 boxcollider의 material에 physics material을 넣는 부분이 추가되면 초보자가 보기가 좋을 것 같습니다.

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

    우와 ㅋ 점프와 회피라니!!!! 선댓추천입니다~ ㅋㅋ
    고양이 연타 완전웃겨요 ㅋ 방심하다 터졌습니닼ㅋㅋㅋㅋ
    영상보고 따라할때, 코딩 작성시 당시에는 동일하게 베끼듯이 한다고해도 에러가 발생하는 경우가 생김을 경험했는데요. 영상을 다시보고 다시보면서 코딩이 달라진 부분을 찾으면 거의 대문자와 소문자를 다르게 작성하던지 자동완성으로 들어가 양식이 달라진걸 눈치채지 못한것이었습니다.

  • @샬럿-d4y
    @샬럿-d4y Год назад +2

    좋은 강의 항상 감사합니다.
    회피중 방향 전환 막는법으로 dodgeVec를 만드는 대신
    if(!isDodge)
    {
    moveVec = new Vector3(hAxis, 0, vAxis).normalized;
    }
    이런식으로 응용해도 잘 적용이 되는것 같네요.

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

    좋은 강의 감사합니다 😊😊

  • @jjbbk5676
    @jjbbk5676 11 месяцев назад +1

    캐릭터 너무 귀여워요 ㅎㅎ 항상 잘 배우고 갑니다.

  • @징어오-t6v
    @징어오-t6v Год назад +1

    이렇게 재미있는 강의는 진짜 두 눈을 씻고 찾아봐도 없구만~

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

    항상 감사드립니다. 좋은 밤 되시길 바랍니다.

  • @응응-v7g
    @응응-v7g 2 года назад +2

    스피드가 계~~속 줄어 캐릭터가 안 움직여서 식은땀만 흘렸어요 핳
    알고보니 제가 dodgeOut()함수를 Update함수 안에 넣었더라구요ㅎㅜ
    골드메탈님 영상과 블로그 너무 잘 보고 있습니다 !
    어쩜 그렇게 초보자들이 어려워하거나 궁금해 하는 부분을 딱 캐치해서 쉽게 잘 가르쳐주시나요?!?
    영상 보며 따라하다가 문제가 생겼을 때도
    다른 분들의 댓글에 세세하게 달아준 골드메탈님의 답변을 보고 너무 도움 받아서 가요 .
    이렇게 영상 올려주셔서 너무 감사합니다. 덕분에 재밌게 잘 배우고 있습니다.🥰🥰🥰🥰

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

    오~ 오늘도 유익한 강의 감사합니다!

  • @빠이현-o9y
    @빠이현-o9y 4 года назад +4

    24:55
    대신에 dodgeVec 만들필요 없이
    if (!isDodge)
    moveVec = new Vector3(hAxis, 0, vAxis);
    이렇게 해도 됩니다!

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

      스크립트 두개를 병행해서 써먹고 있었는데 이 방법을 쓰니까 간단하게 해결되네요
      지금까지 뭔 싸움을 해온건지 ㅎ...

    • @떠오르는태양-h7q
      @떠오르는태양-h7q Год назад

      이렇게하면 게임 오래해서 회피 하다보면 점점 렉 생기지 않을까요?

    • @떠오르는태양-h7q
      @떠오르는태양-h7q Год назад

      @@zxx-d3w 메모리 구조 때문에 그렇습니다. 스택 메모리에 점점 쌓이거든요.

  • @이강토-y5k
    @이강토-y5k Год назад +1

    골드메탈님 질문이 있습니다!
    (코딩에 점프키와 구르기 키를 나눴습니다! )
    1. 구르기 모션을 무시하고 연속으로 하는게 아닌 모션이 완벽하게 끝났을 때 구르기를 시키고 싶은데 어떻게 해야하나요?
    2. 구르기를 연타 할 경우 스피드가 점점 올라갑니다
    어디 잘못된 부분이 있나요?
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class Player : MonoBehaviour
    {
    public float speed;
    float hAxis;
    float vAxis;
    bool wDown;
    bool jDown;
    bool dDown;
    bool isJump;
    bool isDodge;
    Vector3 moveVec;
    Vector3 dodgeVec;
    Rigidbody rigid;
    Animator anim;
    void Awake()
    {
    rigid = GetComponent();
    anim = GetComponentInChildren();

    }
    void Update()
    {
    GetInput();
    Move();
    Turn();
    Jump();
    Dodge();
    }

    void GetInput()
    {
    hAxis = Input.GetAxisRaw("Horizontal");
    vAxis = Input.GetAxisRaw("Vertical");
    wDown = Input.GetButton("Walk");
    jDown = Input.GetButtonDown("Jump");
    dDown = Input.GetButtonDown("dodge");
    }
    void Move()
    {
    moveVec = new Vector3(hAxis, 0, vAxis).normalized;
    if (isDodge)
    moveVec = dodgeVec;
    transform.position += moveVec * speed * Time.deltaTime;
    anim.SetBool("isRun", moveVec != Vector3.zero);
    anim.SetBool("isWalk", wDown);
    }
    void Turn()
    {
    transform.LookAt(transform.position + moveVec);
    }
    void Jump()
    {
    if (jDown && !isJump)
    {
    rigid.AddForce(Vector3.up * 15, ForceMode.Impulse);
    anim.SetBool("isJump", true);
    anim.SetTrigger("doJump");
    isJump = true;
    }
    }
    void Dodge()
    {
    if (dDown )
    {
    dodgeVec = moveVec;
    speed *= 2;
    anim.SetTrigger("doDodge");
    isDodge = true;
    Invoke("DodgeOut", 0.5f);
    Debug.Log("회피!");
    }
    }
    void DodgeOut()
    {
    speed *= 0.5f;
    isDodge = false;
    }
    void OnCollisionEnter(Collision collision)
    {
    if (collision.gameObject.tag == "Floor") {
    anim.SetBool("isJump", false);
    isJump = false;
    }
    }
    }

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

      닷히 함수 안에 if 조건 !isDodge 를 추가하시면 됩니다.

  • @구파로
    @구파로 9 месяцев назад +2

    18:00 이 부분에서 벽 Box Collider에 physic material을 넣었는데도 벽뚫이 되는데 어디가 잘못된건지 감이 안잡히네요 ㅠㅠ

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

      물리적인 문제는 B45에서 모두 해결됩니다.
      일단 그대로 진행해주세요~

  • @아아아-b2f
    @아아아-b2f Год назад +1

    초반 코드 정리부분에서 같은 역할끼리 함수로 묶으셨는데 update안에있던 기능들을 밖으로 빼놔도 update로 작동을 하는 건가요? 일단 따라만들어보는 단계라서 힛갈리네요

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

      각 역할을 맡은 함수들을 만들어두고 Update에서 호출하고 있기 때문에 작동하는건 동일합니다.
      코드 상으로는 가독성 있고 이쁘게 보이므로 이런 방식으로 코드 작성하시는 것이 여러모로 좋습니다.

  • @czteamlove
    @czteamlove 4 года назад +6

    정말 재미있고 학교에서 배웠던 개념들을 사용하니까 이해가 더 잘되는거같아요!
    학교에 골메님같은 선생님이 계시면 진짜 좋을거같아요!
    강의 감사합니다!

  • @먼각
    @먼각 Год назад +1

    플레이어가 벽을 뚫고 지나가는데 어떻게 해야하죠 플레이어 스피드를 10으로 하면 벽을 못 뚫는데 11만 되도 뚫어서 어떻게 해야하는지 궁굼합니다!! 16:36 여기서 나오는 방법 대로 해봐도 그냥 뚥고 지나갑니다..

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

      물리 문제는 모두 B45에서 해결하고 있습니다. 일단은 그냥 진행해주세요

    • @먼각
      @먼각 Год назад +1

      @@goldmetal 넵

  • @서광훈-y4h
    @서광훈-y4h 4 года назад +10

    구르기! 훌륭한 회피 수단이지!

  • @맑고투명한샘물
    @맑고투명한샘물 8 месяцев назад +1

    항상 좋은 강의 잘 보고 있습니다.
    질문이 있는데 저는 평소엔 Walk를 하다가 shift를 누르면 Run을 하도록 만들었습니다. 근데 shift를 누르면 jump키가 먹히지 않습니다. 골드메탈님이 올려주시는 것도 똑같이 따라하고 있는데 얘도 walk(shift를 누른 상태)에선 점프를 못하더라고요. 어떻게 해결할 수 있을까요?
    + New Meterial은 괜찮은데 / Floor도 wall도 rigidbody를 추가하면 초전도체마냥 저항없이 뚫려서 없앴습니다.

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

      일단 Jump 함수 최 상단에 Debug.Log(jDown); 추가하시고 시프트 누른채로 스페이스바 해보세요
      만약 콘솔창에 true가 안나온다면 shift 누르지 마시고 다시 시도해보시고
      이때에 true가 나오면 키보드 자체가 동시 입력을 소화하지 못하는 거라고 생각하시면 되겠습니다

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

    최고의 강의입니다.

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

    17:40 피직스 마테리얼을 어디에 추가하신건가요? 아니면 만들기만 해도 되는건가요?
    그리고 회피하는데 스페이스를 누른후에 방향키를 눌러야만 회피가 되네요;; 게다가 제자리에서만 굴러요

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

      벽 콜라이더의 Material에 넣으시면 됩니다.
      회피는 방향키를 누른 상태에서 스페이스 바 눌러야 작동되는거니 참고하세요.

  • @와비사비룸물질보다정
    @와비사비룸물질보다정 Год назад +1

    강의가 엄청 깔끔하네여

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

    재밌어요..!

  • @hihello-k7b
    @hihello-k7b Год назад +2

    좋은 강의 감사드려요.
    점프를 했을 때 착지 모션이 안 되고 점프 애니메이션이 계속 유지됩니다. 어떻게 고쳐야 하나요?
    다른 애니메이션은 더이상 실행이 안되게 됩니다.

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

      일단 착지했을 때 애니메이터의 파라메터가 바뀌는지부터 확인해보셔야합니다.
      애니메이터 창과 게임 창을 나란히 두시고 점프착지해봐성 파라메터 변하는지 실시간으로 확인해보세요.

    • @조예솜-i4g
      @조예솜-i4g 5 месяцев назад +1

      @@goldmetal파라메터도 안 바뀌는데 방법이 없을까요?

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

      @@조예솜-i4g 바닥 오브젝트 태그를 살펴보시는 것이 좋겠씁니다.

  • @다이너_브롤_왕볼킬
    @다이너_브롤_왕볼킬 21 день назад

    7:44 고양잌ㅋㅋㅋ

  • @조정현-c2z
    @조정현-c2z Год назад +1

    감사합니다

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

    유익한 강의 잘 듣고 갑니다!!

  • @아직안늦었다
    @아직안늦었다 3 года назад

    회피를 할때 현재 방향으로 빠르게 이동하되 다른 행동이 일절 불가능하게 할때 (이동도불가 회피 이동을 따로)
    Addforce 값을 초기화 시켜 주지 않으면 다시 사용할때 그 값을 다시더하더라구요...
    c#을 유니티 공부하면서 같이하는데 왜 Add인지 알게되었습니다 내1시간...

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

    오늘도 드디어 올라왔군요ㅎㅎ

  • @아아아-b2f
    @아아아-b2f Год назад +1

    21:59부분에서 if속에 있는 조건들 중에서 !isJump 와 !isDobge는 true값인가요 false값인가요? bool타입의 기본 값이 false라고 알고있는데 !붙었으니 true값이라고 봐야 할까요?

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

      ! 는 부정의 의미입니다.
      그래서 if 문 안 로직이 실행되려면 isJump, isDodge가 false가 되어야 합니다. (아닌 것이 아니면 -> 맞다면)

  • @김명석-l7t
    @김명석-l7t 7 месяцев назад +1

    안녕하세요 골드메탈님 항상 강의 잘보고 있습니다!!
    강의 진행 중 골드메탈님의 강의에서 인풋을 New Input Manager로 변경해서 적용후 회피를 구현했는데
    회피 이후에 버튼을 떼도 회피를 시전한 방향으로 플레이어 캐릭터가 이동을 계속 하는 문제가 생겼습니다.
    코드를 한번 봐주시고 고쳐야할 부분을 알려주실 수 있을까요??
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using Unity.VisualScripting;
    using UnityEngine;
    using UnityEngine.InputSystem;
    public class Player : MonoBehaviour
    {
    Rigidbody pRigidbody;
    Animator animator;
    public float playerSpeed;
    float dodgeSpeed;
    Vector3 moveVec;
    Vector3 dodgeVec;
    bool isWalking;
    bool isJumping;
    bool isDodge;
    void Awake()
    {
    //자식 오브젝트에서 컴포넌트 가져오기
    animator = GetComponentInChildren();
    pRigidbody = GetComponentInChildren();
    }
    void FixedUpdate()
    {
    Move();
    Turn();
    //Jump();
    }
    void Move()
    {
    //무브 벡터가 0이 아니면 isRun 재생
    animator.SetBool("isRun", moveVec != Vector3.zero);
    animator.SetBool("isWalk", isWalking);
    //만약 회피중이면 방향 고정
    if (isDodge)
    moveVec = dodgeVec;
    if (isWalking)
    {
    transform.position += moveVec * playerSpeed * Time.deltaTime * 0.3f;
    }
    else
    {
    transform.position += moveVec * playerSpeed * Time.deltaTime;
    }
    }
    void Turn()
    {
    transform.LookAt(transform.position + moveVec);
    }
    void OnMove(InputValue value)
    {
    moveVec = value.Get();
    if (moveVec != null)
    moveVec = moveVec.normalized;
    }
    //걷기 버튼 누르면 true 떼면 false
    void OnWalk(InputValue value)
    {
    float walk = value.Get();
    isWalking = Convert.ToBoolean(walk);

    }
    void OnJump()
    {
    if (!isJumping && !isDodge)
    {
    pRigidbody.AddForce(Vector3.up * 15, ForceMode.Impulse);
    animator.SetBool("isJump", true);
    animator.SetTrigger("doJump");
    isJumping = true;
    }
    }
    void OnDodge()
    {
    if (!isDodge && moveVec != Vector3.zero && !isJumping)
    {
    //dodgeVec에 움직임 방향 고정
    dodgeVec = moveVec;
    playerSpeed *= 2;
    animator.SetTrigger("doDodge");
    isDodge = true;
    Invoke("DodgeOut", 0.4f);
    }
    }
    void DodgeOut()
    {
    playerSpeed /= 2;
    isDodge = false;
    }
    void OnCollisionEnter(Collision collision)
    {
    if (collision.gameObject.tag == "Floor")
    {
    isJumping = false;
    animator.SetBool("isJump", false);
    }
    }
    }

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

      OnDodge()는 PlayerInput에 의해 실행되니까 if문 조건은 !isDodge 만 걸어주시면 됩니다.
      또한 Dodge같이 방향키 + 점프키 두 개의 합성키을 Input System에서는 쉽게 구현이 가능합니다.
      Dodge Action에서 One Modifier를 추가하셔서 방향 바인딩과 점프 바인딩을 넣어보시고 활용해보시길 바랍니다.
      docs.unity3d.com/Packages/com.unity.inputsystem@1.8/manual/ActionBindings.html#applying-overrides

  • @Dev-jj8jh
    @Dev-jj8jh 4 года назад +4

    acceleration 가속
    Force 힘, 물리력
    Impulse 갑작스런 힘
    Velocitychange 순간적인 가속력

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

    행동마다 영향을 받지않게 조건을 설정하는게 쉽지만은 않네요 좀 더 익숙해져야 겠습니다

  • @muzi6051
    @muzi6051 2 года назад +2

    선생님ㅜ 벽체에 캐릭터가 계속 비비니까 벽을 뚫고 지나가버리는데.... 알려주신대로 벽에 static 체크하고 피직메테리얼까자 했는데도 그러네요ㅜ 혹시몰라 케릭터 스피드를 줄여보니 안그러긴한데.. 어떻게해야할까요?ㅜ

    • @muzi6051
      @muzi6051 2 года назад +2

      엇 해결했습니다! 혹시나 저랑 같은 현상이 있으시면, project setting에서 physics 중에 default max depenetration velocity 값을 올려주시면 됩니다~!

  • @근토끼-g3g
    @근토끼-g3g Год назад +1

    새롭게 3d공부하면서 다시보는데 정말 잘 보고 갑니다. 그런데 회피할때 대각선으로 이동중일때는 회피가 안되는데 왜그런거죠?
    우측상단으로 이동때는 회피가 작동하는데 나머지 우측하단, 좌측하단, 좌측상단에는 반응을 안합니다. 컴퓨터문제인가요?

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

      아무래도 키보드의 다중 키 입력이 지원되지 않는 기기인 것 같습니다. 한번 스펙 확인해보셔야겠네요.

    • @근토끼-g3g
      @근토끼-g3g Год назад +1

      @@goldmetal 제가 잘못한건줄 알았는데 키보드는 생각도 못했네요 감사합니다.

  • @binu1125
    @binu1125 Месяц назад +1

    다 똑같이 따라하고 속도만 조금 조정했는데 회피버튼을 누르고 회피를 연속으로 계속누르면 가속이 붙으면서 캐릭터가 너무빨라집니다..
    using System.Collections;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using UnityEngine;
    public class Player : MonoBehaviour
    {
    public float speed;
    float hAxis;
    float vAxis;
    bool wDown;
    bool jDown;
    bool isJump;
    bool isDodge;
    Vector3 moveVec;
    Vector3 dodgeVec;
    Rigidbody rigid;
    Animator anim;
    void Awake()
    {
    rigid = GetComponent();
    anim = GetComponentInChildren();
    }
    void Update()
    {
    GetInput();
    Move();
    Turn();
    Jump();
    Dodge();
    }
    void GetInput()
    {
    hAxis = Input.GetAxisRaw("Horizontal");
    vAxis = Input.GetAxisRaw("Vertical");
    wDown = Input.GetButton("Walk");
    jDown = Input.GetButtonDown("Jump");
    }
    void Move()
    {
    moveVec = new Vector3(hAxis, 0, vAxis).normalized;
    if (isDodge)
    moveVec = dodgeVec;
    transform.position += moveVec * speed * (wDown ? 0.3f : 1f) * Time.deltaTime;
    anim.SetBool("is Run", moveVec != Vector3.zero);
    anim.SetBool("is Walk", wDown);
    }
    void Turn()
    {
    transform.LookAt(transform.position + moveVec);
    }
    void Jump()
    {
    if (jDown && moveVec == Vector3.zero && !isJump && !isDodge)
    {
    rigid.AddForce(Vector3.up * 20, ForceMode.Impulse);
    anim.SetBool("isJump", true);
    anim.SetTrigger("doJump");
    isJump = true;
    }
    }
    void Dodge()
    {
    if (jDown && moveVec != Vector3.zero && !isJump)
    {
    dodgeVec = moveVec;
    speed *= 2;
    anim.SetTrigger("doDodge");
    isDodge = true;
    Invoke("DodgeOut",0.5f);
    }
    }
    void DodgeOut()
    {
    speed *= 0.5f;
    isDodge = false;
    }
    private void OnCollisionEnter(Collision collision)
    {
    if (collision.gameObject.tag == "Floor")
    {
    anim.SetBool("isJump", false);
    isJump = false;
    }
    }
    }
    어떤 부분이 문제일까요?? ㅜㅜ 애니메이터 닷지 속도는 4입니다. 중력값은 -40입니다.

    • @goldmetal
      @goldmetal  Месяц назад +1

      회피 의 if에 isDodge 에 대한 조건이 없습니다. isDodge 가 true일 땐 실행되지 않도록 조건을 추가해주세요

  • @최준영-t6q
    @최준영-t6q 3 года назад +1

    너무 도움되요!
    지금 보면서 하고 있는데도 여전히 감탄이 나오네요!!!
    감사합니다!
    제 꿈에 한발짝 더 다가간것 같아요!!!!

  • @NB-up8fs
    @NB-up8fs 3 года назад

    정말 감사합니다!

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

    Dodge애니메이션이 끝나는 시간에 CancelDodge()를 작동시키는걸 Invoke로 수동으로 시간을 알아내서 지정하는 것 말고
    애니메이션이 끝난걸 자동으로 감지해서 CancelDodge()를 하는건 불가능한가요?

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

      Animation 창에서 Animation Event를 추가하여 function에 CancelDodge를 적으면 가능합니다

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

    hAxis, vAxis, wDown, jDown 등 변수 선언하실 때
    script 제일 위에다가 float, bool 등을 보통 선언을 하시던데
    제일 위에다가 선언을 하는 거랑
    void GetInput() 안에서 float, bool 선언하는 거랑 어떤 코딩적인 스타일 차이가 있을까요?
    저는 개인적으로 public으로 선언하는 변수들 아니면 굳이 제일 위에다가 할 필요가 없는 게 더 깔끔하다고 생각했었거든요.
    골드메탈님만의 변수 선언 방식이 궁금합니다!

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

      위쪽에 선언하면 Update뿐안 아니라 FixedUpdate, LateUpdate등 다양한 함수에서 활용히 가능합니다.
      만약 그럴 필요가 없는 변수라면 말씀하신대로 Update 내에서 지역변수로 선언하는 것이 훨씬 좋습니다.

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

      @@goldmetal 아 그렇군요 감사합니다!! 완전 기초 코딩 지식인데 생각이 짧았습니다..ㅠ

    • @레인보우-j9p
      @레인보우-j9p Год назад

      @@VintagesoUltree 님은 전역하고 지역 변수의 개념이 필요해 보입니다.

  • @채팅봇-h5b
    @채팅봇-h5b 4 года назад +1

    감사합니다 ㅎㅎ

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

    영상 잘 봤습니다. 구르기에 최소거리를 넣으면 좋겠다 생각하고 있었는데 구르기 방향 고정을 하고나니 최소거리가 생겨버렸네요

  • @jhlim2503
    @jhlim2503 9 месяцев назад

    안녕하세요 골드메탈님 강의 소중하게 잘 보고있습니다!
    카메라 시점을 강의 캐릭터의 1인칭 시점으로 하고 마우스의 움직임에 따라 시점이 변하고 캐릭터가 회전, wasd로 이동하게 구현하고 싶은데 너무 막막해서 댓글 남깁니다 ㅠㅠ 어떻게 해야하나요??

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

      댓글로만 적기엔 어려워서 유니티에서 제공하는 1인칭 , 3인칭 캐릭터 컨트롤러를 사용해보시믄 것을 추천드립니다.
      assetstore.unity.com/packages/essentials/starterassets-firstperson-updates-in-new-charactercontroller-pac-196525

  • @크레이지-i2t
    @크레이지-i2t 7 месяцев назад +2

    직접 블렌더라는 앱으로 만든 캐릭터로 게임을 만들고 싶은데 영상에 나온 캐릭터처럼 움직이게 하려면 모델링 할때 캐릭터에 뼈대를 만들어주면 되는걸까요??

    • @ZKRLZ
      @ZKRLZ 7 месяцев назад +2

      리깅을 해주신 후 에니메이팅을 해서 키프레임을 만들어주신 후 export 하실때 키프레임들이랑 같이 가져오면 되는겁니다!

    • @크레이지-i2t
      @크레이지-i2t 7 месяцев назад +1

      @@ZKRLZ 아하! 답변 감사드려요!!

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

      직접 제작한 라이브 영상이 있습니다.
      ruclips.net/video/d7dyDObTpBo/видео.htmlsi=DGExWLYvOB9XCq-o

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

    안녕하세요. 질문이 생겻는데 점프 구현 부분에서 플레이어 캐릭터가 점프를 했는데 착지를 하는 애니메이션이 안나와서 혹시나 스크립트와 애니메이션 부분을 다 확인했는데 문제가 없었습니다.
    혹시 원인이 무엇인지 알 수 있을까요? ( 8:52 의 부분입니다)

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

      바닥 오브젝트의 태그가 Floor 로 설정되어 있는지 확인해보세요

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

      @@goldmetal 점프 동작은 해결했는데 이번엔 회피가 안되네요 ㅠ;;

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

      @@noble3138 Dodge 함수에 if 조건을 다 빼보고 테스트 해보세요. 잘 된다면 조건 하나씩 넣어봐서 어떤 것이 범인인지 찾아보셔야 할 것 같네요.

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

      저도 지금 똑같은 오류 나는데 어떻게 해결하셨나요?ㅠㅠ

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

    회피기 한번 시전 하고 그 이후 점프가 안되고 이동속도도 돌아오지 않습니다 Debug.Log로 확인해봤지만 그것또한 출력이 되지 않았습니다. 어떻게 해야되죠? 코드나 Invoke부분에선 자세히 확인해봤지만 오타는 전혀 없습니다. ㅠㅜ
    + 해결 되었습니다 메소드를 안쪽으로 선언했네요 ㅎ..

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

    어제부터 3d 강좌 보고 있는데 너무 좋습니다!
    생각지 못했던 회피까지 있어 너무 마음에 드네요.
    혹시 Invoke 말고 회피 애니메이션이 재생되는 동안에 더 회피를 못하게 하는 방식도 괜찮을까요?

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

      그것도 좋은 방법이겠네요.

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

    감사합니다 취미생활로 배우고 있는데 재밌네요 ㅎㅎㅎ

  • @홍이-w7n
    @홍이-w7n 2 года назад

    안녕하세요 골드메탈님.
    스스로 코딩 짜보며 연습 중에 점프 낙하 속도가 너무 마음에 안 들어서.. 프로젝트 세팅에서 중력 바꾸는 법 외에 코드로 낙하할 때 좀 더 빨리 떨어지게 하는 방법은 뭐가 좋을까요?
    void Gravity()
    {
    if (rigid.velocity.y < 0 && isjump == true)
    rigid.velocity = new Vector3(rigid.velocity.x, rigid.velocity.y * 1.5f, rigid.velocity.z);
    }
    저는 이런 식으로 함수를 만들어서 업데이트() 함수에 넣었는데, 제 예상은 낙하 할 때 -1 .. -2.. -3.. -4 이런 식이던 velocity.y가 -1.5.. -3.. -4.5.. -6 이런 식으로 변 할 줄 알았는데,
    기존 velocity.y에 1.5를 곱하고 또 곱하고 또 곱하고 이렇게 업데이트 문에서 무수히 반복하다 보니 velocity.y 가 너무 급격하게 빨라 지더라 구요.
    혹시 제 의도와 맞는 좀 더 좋은 코드가 있을까요?

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

      물리 효과는 가급적 FixedUpdate 안에 구현하시길 바랍니다.
      로직은 rigid.velocity = new Vector3(rigid.velocity.x, rigid.velocity.y + Time.fixedDeltaTime, rigid.velocity.z); 해보세요.

  • @gim-ori
    @gim-ori 2 года назад +1

    이거 보니까 삼디 모델링 애니메이션도 공부해야겠다는 생각이...-_)

  • @나니-s5e
    @나니-s5e 5 месяцев назад +1

    질문이 있는데 점프코드구간에 점프하고 바닥에 닿으면 점프가 가능한데 저는 점프하고 바닥에 닿아도 점프가 안되요 isJump = false가 문제 일까요?ㅠㅠ

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

      Invoke가 실행되지 않은 문제인 것 같습니다.
      그래서 이것 대신 코루틴으로 바꾸어 코딩하시는 걸 추천드립니다.
      m.blog.naver.com/pxkey/221296053953

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

    플레이어를 벽 구석에 비비고 나오면 계속 빙글빙글 도는 현상이 생기네요
    점프 회피 이동은 다 정상적으로 되는데 가만히 두면 끊임없이 돕니다

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

      물리 문제는 B45에서 모두 해결방법을 다루었습니다.
      일단은 그냥 진행해주시면 되겠습니다.

    • @장병건-b5j
      @장병건-b5j 3 года назад

      일단 리지드바디에서 프로즌y해주면 되긴합니다

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

    그대로 따라했는데 캐릭터를 벽 방향으로 일정속도 이상 움직일 때 (그렇게 빠른 속도는 아니지만) 캐릭터가 벽을 조금씩 뚫더니 반 정도 뚫으면 반대쪽으로 나와버립니다.
    현재는 드랍 무기 입수와 교체까지 진행한 상태이고 위 문제는 어떻게 정보를 찾아서 Character Controller로 대체해서 해결을 했는데, 왜 벽이 뚫렸는지 이해가 안됩니다.
    캐릭터, 벽 둘 다 콜라이더와 리지드바디를 가지고 있으면 원래 막혀야하는 거 아닌가요??

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

      Transform 기반 이동은 물리를 무시하기 때문에 그렇습니다.
      이 방법에 대한 해법은 B45에서 다루었으니 일단 그대로 진행해주시면 됩니다.

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

    강의 잘 봤습니다.
    다름이 아니고 막히는 부분이 있어서 문의를 드려볼려고 합니다. 회피도중 방향 전환이 안되도록 영상에 나온데로 코드를 작성했는데
    계속 회피도중에 방향이 전환되는 모션이 발생합니다. 그래서 에디터를 종료시켰다가 재실행 해보고 코드를 다시 작성해보거나 잘못된 부분을 찾아볼려고 했지만 전혀
    바뀌질 않아서 고생하고 있는데 여기서 어떻게 해야 되는건가요?
    (Player 오브젝트를 작동시키는 스크립트)
    //회피 도중 방향전달이 안되도록 벡터3 변수를 통해 설정
    private Vector3 _dodgeVec;
    ...
    private void Move()
    {
    // 어느 방향이든 동일한 수치로 갈 수 있도록 정규화(normalized) 설정
    _moveVec = new Vector3(_horizontalAxis, 0, _verticalAxis).normalized;
    //회피 중에는 움직임 벡터->회피방향 벡터로 바꾸도록 구현
    if (_isDodge)
    {
    _moveVec = _dodgeVec;
    ...
    }
    ...
    }
    ...
    private void Dodge()
    {
    // 점프키를 누르면서 현재 점프인 상태가 아닐 경우
    // 회피 명령을 수행한다.
    if (_jumpDown && _moveVec != Vector3.zero && !_isJump && !_isDodge)
    {
    //회피도중 방향 전환이 되지 않도록 회피방향 Vector3 추가
    _dodgeVec = _moveVec;
    ...
    }
    ...
    }

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

      회피시에 _isDodge = true하는지 확인해보세요.

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

      @@goldmetal 코드상으로는 Dodge() 메서드에서
      // 회피 동작시 이동속도가 2배로 증가
      _speed *= 2;
      _animation.SetTrigger("doDodge");
      _isDodge = true;
      로 되어있긴 한데 회피할 때 _isDodge=true가 되는지 확인하라는 것은 어디서 확인할 수 있는건가요?

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

      @@yeonjunjung1431 되어있네요. 아무래도 Turn 함수 호출이 Move 호출보다 빠른건지 Update에서 확인해보셔야겠습니다.

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

      @@goldmetal 다시 확인해보니 정상 작동하는 것으로 확인이 됐네요... 착지를 한 후에 방향 전환이 되는 것을 회피도중에 방향이 바뀌는 것으로 착각했네요. 도움을 주셔서 감사합니다.

  • @작곡가보빈
    @작곡가보빈 2 года назад

    영상 감사합니다❤ 혹시 캐릭터 재장전 중에, 그리고 공격 모션중에 중단하고 즉시 닷지 하고 싶을 때는 어떻게 할수가 있을까요? 혼자 머리로 수정해보고 싶은데 도저히 못하겠어요ㅠㅠ 힌트라도 주시면 해보겠습니다. 항상 감사합니다!

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

      닷지하려는 if 조건에서 해당 액션(재장전, 공격) bool을 빼시면 됩니다.

    • @작곡가보빈
      @작곡가보빈 2 года назад

      @@goldmetal 감사합니다!!! 엄청간단하네요!

  • @wiejdv6805
    @wiejdv6805 3 месяца назад +1

    03.지형 물리 편집 부분쪽 그대로 따라하는데 캐릭터가 충돌은 하지만 계속 비비면 결국 뚫리는데 어떻게 해야하나요...?

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

      B45에서 모든 물리문제를 다룹니다. 일단은 쭉 진행해주세요!

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

    당신은 신이야! ♥

  • @조예솜-i4g
    @조예솜-i4g 5 месяцев назад +1

    코드가 틀린게 없는데 회피를 한 번 하면 그 이후로 회피도 안 되고 점프도 안돼요 또 점프할때 착지 애니메이션도 적용이 안 되는데 문제가 뭘까요? 프로모트 확인 해보라는 댓이 있어서 프로모트도 확인해봤는데 빠진게 없어요ㅜㅜ

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

      아무래도 Invoke가 실행되지 않아서 각 bool 플래그가 꺼지지 않은 것 같습니다.
      Invoke 가 실행되지 않으면 코루틴을 사용해보세요.
      m.blog.naver.com/pxkey/221296053953

    • @조예솜-i4g
      @조예솜-i4g 5 месяцев назад +1

      @@goldmetal 코루틴 코드를 어떻게 사용해야 하는 건가요?
      Jump랑 dodge 밑에 작성하면 되는 건가요?

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

      @@조예솜-i4g DodgeEnd 함수를 IEnumerrator 로 바꾸어 코루틴으로 만들고 Invoke() 로 실행하던것을 StartCorutine()으로 호출하시면 됩니다. 제가 공유해드린 링크에 자세한 사용 방법이 있어요

  • @김미영-z7n
    @김미영-z7n 3 года назад +1

    Jump는 벡터의 방향을+y로 설정 한것이고 플레이어에 15만큼 힘을줘서 설정한 방향으로. 움직이게 한거니까 fixed업뎃에서 다뤄야 하지 않나요?

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

      물리효과 측면으로는 FixedUpdate도 맞으나 이번 프로젝트에서는 Jump 버튼에 의해 단발적으로 AddForce 를 실행한거라 크게 상관없습니다. (힘을 준 이후는 유니티엔진에서 FixedUpdate에서 알아서 계산)
      오히려 FixedUpdate에 점프로직을 두면 Jump 버튼입력이 안먹히는 문제가 발생할 수 있으니 참고 바랍니다.
      (Input 관련 함수 호출은 Update 권장)

  • @준수하는준수한수준의
    @준수하는준수한수준의 5 месяцев назад +1

    void OnCollisionEnter(Collision collision)
    {
    if (collision.gameObject.tag == "bug ban") {
    transgorm.position = new Vector3(-35, 1, 35);
    }
    }
    새로운 태그 만들어서 태그에 닿으면 좌표(-35, 1, 35)로 이동 시키고 싶은데 위와 같이 했는데 실행이 안되는데 어디가 문제인지 알려주세요 ㅠㅠ

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

      실행이 되는지 여부를 확인할 가장 쉬운 방법은 Debug.Log를 쓰는 겁니다.
      if (collision.gameObject.tag == "bug ban") { 바로 아래에 Debug.Log("Touch!"); 를 추가하고 테스트해보세요.
      만약 나타나지 않는다면 태그가 다르다거나 (대소문자 공백 정확해야 함), 콜라이더에 IsTrigger 체크가 되어있지 않음을 확이해야 합니다.

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

    지금 답변 해주실진 모르겠지만.. 골든메탈님 영상 참고하며 비슷하게 게임을 한번 만들어보고 있는데 구르기에 쿨타임을 넣어 볼려면 어떻게 해야할까요??
    영상보고 잘 공부하고 있습니다 ( _ _ )

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

      float coolTime; 변수 하나 생성 하고 isDodge가 false일 때 Update에서 coolTime += Time.deltaTime; 해줍니다.
      그리고 Dodge 함수에서 if조건에 coolTime > 쿨타임시간 추가해주는거죠.
      물론 구르기 하면 coolTime = 0; 으로 초기화해주셔야 합니다.

  • @건우이-k7v
    @건우이-k7v 4 года назад

    골드메탈님 그 C언어에서는 다른함수에서 값을 초기화할려면 포인터를 이용하거나 해서 주소를 수정해줘야 하는데 유니티C#에서는 그럴필요없이 그냥 GetInput(); Move(); 이런식으로 호출해도 되는건가요??

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

      네, C#은 객체지향 방식이라 그냥 호출하면 됩니다.

    • @건우이-k7v
      @건우이-k7v 4 года назад

      @@goldmetal 감사합니다 ㅎㅎ

  • @구구콘-p4r
    @구구콘-p4r 3 года назад

    안녕하세요 골드메탈님 항상 영상 잘 보고 있습니다. 혹시 Dodge 중에 방향 고정을 위해 Dodge()에 dodgeVec = moveVec, Move()에 조건문 이후 moveVec = dodge 이렇게 코딩을 하셨는데 코드가 잘 이해가 가지 않아서 그런데 설명 해주실 수 있을까요? 좋은 영상 항상 감사드립니다.

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

      닷지하는 순간의 방향벡터를 dodgeVec에 저장해둡니다. 방향키를 아무렇게 조작해도
      dodgeVec에는 영향이 없죠. 그래서 피하는 액션 동작 중에는 Move에서 moveVec 에
      방향키에 영향을 받지 않는, 그러면서 피하고 있느 방향을 가진 dodgeVec을 대입하고 있는겁니다.

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

    ㅋㅋ 저는 Inputmanager에서 Dodge라는 걸 넣어서 점프를 하는도중 회피가 가능하게 했더니 마인크래프트에 스마트무빙이 되었네요 ㅋㅋ

  • @오현준-x8w
    @오현준-x8w 3 года назад

    안녕하세요 4:00 쯤에 Forcemode로 impulse를 사용하셨는데 Force 사용은 안되는건가요?

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

      Force는 지속적으로 힘을 가하는 느낌입니다.
      점프같이 단발적으로 큰 힘을 줄 때는 Impulse 혹은 VelocityChange 사용하시는 편이 좋습니다.

    • @오현준-x8w
      @오현준-x8w 3 года назад

      @@goldmetal 감사합니당

    • @오현준-x8w
      @오현준-x8w 3 года назад

      @@goldmetal 제가 회피는 왼쪽 ctrl로 바꾸고 스페이스바는 점프만 하는걸로 바꾸었는데요. 그 이동하는 방향키를 누르면서 점프가 안되서 f (jDown && moveVec == Vector3.zero && !isJump && !isDodge && !isSwap)를 ==에서 !=로 바꾸어 사용하는데 추후에 로직을 사용하는데 문제가 될 일은 없는건가요???

    • @오현준-x8w
      @오현준-x8w 3 года назад

      @@goldmetal 귀찮으실 수도 있는데 언제나 친절한 답변 감사합니다..!!!

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

      @@오현준-x8w 네 작동만 잘되면 상관없습니다.

  • @임정민-l1h
    @임정민-l1h 4 года назад

    좋습니다 ㅎㅎ

  • @머리별
    @머리별 4 года назад

    이 강좌를 다 마치면, 배틀로얄도 만들 수 있을거같네요!
    드디어 저에게도 응용이?!

  • @민찬-w3m
    @민찬-w3m Год назад +1

    골드메탈님 회피하고 2초동안은 또 회피 못쓰게 할수있나요?

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

      회피 잠금을 위한 bool isLockDodge; 변수 추가하시고
      코루틴 하나 만든 다음에 isLockDodge = true; yield return new WaitForSeconds(2f); isLockDodge = false; 내용으로 만듭니다.
      그리고 해당 코루틴은 DodgeOut 함수에서 StartCoroutine();으로 실행합니다.
      isLockDodge 은 Dodge의 실행 if문 조건에 && isLockDodge 으로 추가하면 되구요.

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

    !isDodge , !isJump는 무엇을 의미하는거죠? 그냥 단순 bool형태 선언한 변수인가요?

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

      점프 중이 아닐 때, 회피 중이 아닐 때를 의미합니다.

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

    코드를 제가 원하는데로 이렇게 바꿨는데 나중에 문제가 생기진 않겠조?
    public class player : MonoBehaviour
    {

    float hAxis;
    float vAxis;
    public float speed;
    Vector3 Movevec;
    Vector3 Dodgevec;
    Animator anim;
    bool Walkdown;
    bool Jdown;
    bool Dodgedown;
    Rigidbody rb;
    bool isjump;
    bool isdoddge;
    public float cooldowntime;
    public float dodgecooldown;
    void Awake()
    {
    anim = GetComponentInChildren();
    rb = GetComponent ();
    }
    void Update()
    {
    GetInput();
    Move();
    Rotation();
    Jump();
    Dodge();
    cooldowntime += Time.deltaTime;
    }
    void GetInput()
    {
    hAxis = Input.GetAxisRaw("Horizontal");
    vAxis = Input.GetAxisRaw("Vertical");
    Walkdown = Input.GetButton("Walk");
    Jdown = Input.GetButton("Jump");
    Dodgedown = Input.GetButton("Dodge");
    }
    void Move()
    {
    Movevec = new Vector3(hAxis, 0, vAxis).normalized;
    if (isdoddge)
    {
    Movevec = Dodgevec;
    }
    transform.position += Movevec * speed * (Walkdown ? 0.5f : 1f) * Time.deltaTime;
    anim.SetBool("IsRun", Movevec != Vector3.zero);
    anim.SetBool("IsWalk", Walkdown);
    }
    void Rotation()
    {
    transform.LookAt(transform.position + Movevec);
    }
    void Jump()
    {
    if (Jdown&& !isjump && !isdoddge )
    {
    rb.AddForce(Vector3.up * 15 , ForceMode.Impulse);
    anim.SetBool("IsJump",true);
    anim.SetTrigger("DoJump");
    isjump = true;
    }
    }
    void Dodge()
    {
    if (Dodgedown && Movevec != Vector3.zero && !isjump && !isdoddge)
    {
    if(cooldowntime

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

      게임 플레이 도중 문제가 생기지 않으면 상관없습니다!
      스스로 코드 수정하는 것은 매우 좋은 공부법이므로 적극 추천드립니다

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

    B39 완강!!

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

    지형 물리 편집을 했는데도 여전히 플레이어가 벽을 비비면 통과됩니다. 지형 물리는 나온 그대로 따라했는데 플레이어한테 문제가 있는걸까요?

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

      물리 관련 해결 방법은 B45에서 모두 다루었습니다.
      지금은 그냥 진행하셔도 됩니다.

  • @김성진-r7s4i
    @김성진-r7s4i 4 года назад +1

    목소리가 좋아요!!

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

    골드메탈님 안녕하세요~ 너무 감사히 배우고 있습니다! 다름이 아니라 질문을 하나 드리려고 하는데요..OnCollisionEnter가 먹히질 않아서요ㅠㅠ 바닥에 닿으면 isJump=false;가 실행되고 Land 애니메이션이 나와야 하는데, 점프를 하고나서 바닥에 닿으면 점프하는 동작 그대로 바닥에 멈춰있습니다. 그래서 바닥에 닿는지 보려고 Debug.Log로 출력이 되게끔 해봤는데, Debug.Log의 메세지가 출력이 안되더라고요.. 콜라이더가 바닥에 닿아도 인식이 안되는 것 같은데 뭐가 문제일까요?ㅠㅠ

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

      OnCollisionEnter 안에서 제일 첫 줄에 Debug.Log("충돌!"); 넣고 해보세요.
      정말 유니티에 문제가 있는게 아닌 이상 이 메세지는 보일겁니다.
      그렇다면 그 다음 있는 if문 조건의 문제이니 바닥의 태그를 확인해보시는 것이 좋겠네요

  • @김주역-z7u
    @김주역-z7u 4 года назад +2

    캐릭터 졸귀 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

  • @지메짱
    @지메짱 4 года назад

    04:37 여기에서 Assets\Scripts\Player.cs(65,5): error CS0246: The type or namespace name 'vodi' could not be found (are you missing a using directive or an assembly reference?) 이런오류가뜨는데 어떻게해야돼나요?

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

      오타가 나신 것 같네요. void 입니다.

    • @지메짱
      @지메짱 4 года назад

      @@goldmetal 진짜네요 감사합니다.

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

    안녕하세요!! 영상 정말 잘보고 있습니다~ 좋아요 꾹!
    다름이 아니고 한가지 궁금한 점이 있습니다!!
    벽에다 대고 회피를 하면 벽을 뚫고 들어가는데 원인이 무엇일까요??

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

      트랜스폼 이동은 물리효과를 무시하기 때문입니다. B45에서 해결방법을 알려드리고 있으니 일단은 그냥 진행해주시면 됩니다

  • @윤대영-e4n
    @윤대영-e4n 4 года назад

    점프 키를 눌렀는데
    점프가 안ㄷㅚㅂ니다.
    public class Jump : MonoBehaviour
    {
    Rigidbody rigidbody;
    // Start is called before the first frame update
    void Start()
    {
    rigidbody = characterBody.GetComponent();
    }
    // Update is called once per frame
    void Update()
    {
    Jump();
    }
    void Jump()
    {
    if (Input.GetButtonDown("Jump"))
    {
    rigidbody.AddForce(Vector3.up * 15, ForceMode.Impulse);
    }
    }
    }
    일단 점프 코드만 따로 빼놓은 건데요.
    GetInput 따로 빼놓진 않았는데 그게 문제인건지...

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

      rigidbody.AddForce 위에 Debug.Log("점프!"); 를 놓고 실행해보세요
      그래도 안나온다면 Edit > Project Settings > Input Manager 가셔서 Jump가 없을 가능성이 높으니 추가해주시면 되겠습니다.

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

    골드메탈님 3d 에서 모델에 뒷모습은 어둡고 앞모습은 정상이에요 z축은 뭔가 어둡습니다 뒷모습도 안모습처럼돼게 하고싶어요

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

      햇빛과도 같은 Directional Light의 방향 때문입니다.
      하이어라키 상에 있는 Directional Light의 rotation X와 Y축 값을 조절해보세요

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

      @@goldmetal 해 위치상관없이다 밝게하는법은 없나요? 카트라이더 같이요

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

      @@goldmetal 카트라이더 그래픽을 만들고있는데

  • @keio6418
    @keio6418 9 месяцев назад +1

    유니티 2022년도 버전에서 제작중인데 벽을 계속 통과하더라고요. static설정과 wall에 rigidbody를 넣고 따라했는데 왜 안될까요 ㅠㅠ

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

      물리 관련 문제는 B45 영상에서 모두 해결합니다.
      그래서 일단은 그냥 진행해주셔도 되ㄱ고, 미리 보셔서 해결하셔도 됩니다

  • @Lemony-studio
    @Lemony-studio 2 года назад +1

    북마크 23:20

  • @김서준-v2e
    @김서준-v2e 3 года назад

    5:09 이쪽파트 똑같이 작성했는데 캐릭터가 바닥에 닿아있어도 isJump가 계속 true가 됩니다. 혹시 해결 방법을 알려주실 수 있으신가요?

    • @김서준-v2e
      @김서준-v2e 3 года назад

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      public class s_move : MonoBehaviour
      {
      Rigidbody rigid;
      public float speed;
      float x; float z;
      bool jump; bool isJump;
      Vector3 vec;

      void Start()
      {
      rigid=GetComponent();
      }
      void Update()
      {
      GetInput();
      Move();
      Jump();
      }
      void GetInput()
      {
      x=Input.GetAxisRaw("Horizontal");
      z=Input.GetAxisRaw("Vertical");
      jump=Input.GetButtonDown("Jump");
      }
      void Move()
      {
      vec=new Vector3(x,0,z).normalized;
      transform.position+=vec*speed*Time.deltaTime;
      }
      void Jump()
      {
      if(jump && !isJump)
      rigid.AddForce(Vector3.up*15,ForceMode.Impulse);
      isJump=true;
      }
      void OnCollisionEnter(Collision collision)
      {
      if(collision.gameObject.tag=="floor")
      isJump=false;
      }
      }

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

      바닥 오브젝트의 태그가 floor 인지 인스펙터 위쪽에서 확인해보세요.

    • @김서준-v2e
      @김서준-v2e 3 года назад

      @@goldmetal if문에 중괄호를 안붙여서 그런 거였네요. 안붙여도 오류가 안나길래 괜찮은 줄 알았는데 앞으로는 붙여야겠어요. 그래도 답변 감사합니다!!

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

      @@김서준-v2e if안의 로직이 한줄이면 중괄호 생략해도 되는데 두 줄이상이면 꼭 중괄호로 감싸주어야 합니다

  • @user-whitesheep
    @user-whitesheep 2 года назад

    안녕하세요 골드메탈님
    벽과 벽이 만나는 모서리 부분에 캐릭터를 비비다가 회피 기능을 쓰면 벽을 그대로 통과해 버립니다.
    움직이는 코드를 transform.position으로 쓰고 있는데 캐릭터가 모서리 부분에 이동이나 회피 기능 사용 시
    벽이 통과가 안되게 하는 방법을 알려주실수 있나요? Rigidbody를 이용해서 이동로직을 구현하거나 캐릭터에서 레이를 쏴서 해결해야 하나요?

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

      물리 관련 사항은 모두 B45에 정리했습니다. 일단은 그냥 진행해주셔도 됩니다.

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

    문제가 있어서 질문 드리는 데요, 회피를 한번밖에 하지 못하고 속도가 다시 줄지 않는 것으로보아 Invoke(" DodgeOut",0.4f); 가 제데로 작동하지 않는거 같은데 왜그런걸까요?
    void Jump()
    {
    if (jDown&& moveVec==Vector3.zero && !isJump )
    {
    rigid.AddForce(Vector3.up * Jumppower, ForceMode.Impulse);
    anim.SetBool("isJump", true);
    anim.SetTrigger("doJump");
    isJump = true;
    }
    }
    void Dodge()
    {
    if (jDown && moveVec != Vector3.zero && !isJump )
    {
    speed *= 2;
    anim.SetTrigger("doDodge");
    isDodge = true;
    Invoke(" DodgeOut", 0.4f); // 요부분이 제대로 작동하지 못하는거 같습니다.
    }
    }
    void DodgeOut()
    {
    speed *= 0.5f;
    isDodge = false;
    }

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

      아니 선생님 ** 방금까지 안됐는데 갑자기 잘돼요 너무 빡치는데 끼쁘네용

  • @미토콘드리아-i8p
    @미토콘드리아-i8p 2 года назад

    대각선 이동중 회피가 위+오른쪽 이동에만 가능한데 이건 키보드 문제인가요?
    8방위 위동은 문제없이 가능한데 회피만 조금 이상하네요
    추가로 void oncollisionentr함수는 왜 추가적인 호출이 없는데 동작하는지 알 수 있을까요?

    • @미토콘드리아-i8p
      @미토콘드리아-i8p 2 года назад

      jump나 update에서 함수호출을 할거라 생각했는데 그냥 작성만해도 작동하는 이유를 모르겠네요..

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

      외 오른쪽 말고 다른 방향에서 안된다면 회피 조건 if 중 하나에서 막힌 것 같네요.
      위+오른쪽은 Vector3.one 이니까 혹시 이걸 조건으로 사용했는지 확인해보세요.
      OnCollisionEnter는 플레이어와 바닥이 처음 1회 충돌하기 때문에 자동으로 발생한 것으로 보이고 있는 겁니다.

    • @미토콘드리아-i8p
      @미토콘드리아-i8p 2 года назад

      @@goldmetal 답변 감사합니다!
      회피 조건문으론 영상과 같이 vector3.zero를 사용했는데 안되는걸 보니 다른 컴터로 해봐야 겠네요.
      궁금해서 회피조건문만 vector3.one으로 바꿔서 해보았는데 zero일때랑 결과가 같네요 ㅋㅋ

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

    방향키와 점프를 눌러 피하는 Dodge가 원래 0.4초 마다 나가야 하는 코딩 상황인데 스페이스바를 빠르게 눌렀을때 속도가 점점 빨라지는 현상이 발생되었습니다 해결방법을 알수있을까요? (Invoke("DodgeOut", 0.4f);) 도 넣었습니다 VScode를 사용해서 그런건가요

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

      Dodge 함수 안에 Debug.Log("회피!"); 추가 후 테스트 해보세요
      한번에 두 개 이상 메세지가 나오면 중복 호출로 인한 속도 증가입니다.
      그래서 isDodge 를 사용한 if로 막는 부분이 있으니 참고 바랍니다.

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

      @@goldmetal void Dodge()
      {
      if (jDown && moveVec != Vector3.zero && !isJump) {
      dodgeVec = moveVec;
      speed *= 2;
      anim.SetTrigger("doDodge");
      isDodge = true;
      Invoke("DodgeOut", 0.4f);
      Debug.Log("회피!");
      }
      }
      처럼 Debug.Log를 넣었음에도 유니티 Console창에 아무것도 뜨지 않습니다

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

      @@wonilS2 Dodge() 함수가 Update에 호출되고 있는지 확인이 필요하겠네요

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

      @@goldmetal void Update()
      {
      GetInput();
      Move();
      Turn();
      Jump();
      Dodge();
      }
      Updata에 호출 되고 있는 거 맞죠?

  • @노오-l6j
    @노오-l6j 4 года назад

    가끔식 구르기가 속도가 빨라지고 다 끝난 후에 모션이 작동되는 버그가 있는데 혹시 이건 제 컴퓨터가 좀 느려서 그런것 인가요? 연속으로 구르는 것은 되는데 처음 구르기 할때 이현상이 자주 일어나요 그래서 한방향으로 구르다 구르기 방향을 바꾸면 처음으로 인식하는지 끊기네요 ㅠㅠ

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

      애니메이터 창과 게임 창을 나란히 두시고 게임플레이해보세요
      애니메이터의 상태흐름이 어떻게 되는지 바로 파악할 수 있습니다.
      순간적으로 2번이상 회피를 해버리면 그럴 수 있으니
      회피 중에 다시 회피는 못하도록 조건을 추가하는 것도 좋습니다.

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

    Assets\scripts\player.cs(68,28): error CS0246: The type or namespace name 'Collistion' could not be found (are you missing a using directive or an assembly reference?)
    라고 컴파일 에러가 뜨면서 테스트를 실행할 수 없습니다.어떻게 해결해야 하나요?

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

      오타 문제입니다. Collision 이니 중간에 t 는 빼주세요

  • @SUNSAL_KIM
    @SUNSAL_KIM 11 месяцев назад +1

    닷지는 어떻게 사용하는건가요...?
    코드도 같고 모든 키를 다 눌러봤는데도 안되요..

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

      방향키를 누른 상태로 점프를 하면 실행됩니다.
      회피가 안된다면 Dodge의 if문 조건이 잘못된 것이므로 잘 확인해보시길 바랍니다.

  • @김요한-c7e
    @김요한-c7e 6 месяцев назад +1

    혹시 어떤 키보드 키가 회피 하는 키일까요?

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

      Edit > Project Settings >Input Manager > Axes에서 Dodge쪽의 Positive를 확인하시면 됩니다. 영산에서도 키 추가하는 방법에 대해 다루고 있으니 참고 바랍니다

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

    안녕하세요 골드메탈님 강좌를 시청하면서 따라하고 있는 도중 가만히 있을 때 점프는 되는데 움직이면서 스페이스를 누르면 회피가 되야하는데 안 되더라구요 점프까지는 되었는데 회피기동이 안되는 이유는 무엇인가요??
    void Jump()
    {
    if(jDown && moveVec == Vector3.zero && !isJump && !isDodge) {
    rigid.AddForce(Vector3.up * 15, ForceMode.Impulse);
    anim.SetBool("isJump", true);
    anim.SetTrigger("doJump");
    isJump = true;
    }
    }
    void Dodge()
    {
    if (jDown && moveVec != Vector3.zero && !isJump && !isDodge) {
    speed *= 2;
    anim.SetTrigger("doDodge");
    isDodge = true;
    Invoke("Dodgeout", 0.5f);
    }
    }
    void Dodgeout()
    {
    speed *= 0.5f;
    isDodge = false;
    }
    void OnCollisionEnter(Collision collision)
    {
    if(collision.gameObject.tag == "Floor") {
    anim.SetBool("isJump", false);
    isJump = false;
    }
    }
    }

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

      따로 오류는 나지 않습니다!

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

      Update 함수 내에서 Dodge() 호출도 되고 있는지 확인해주세요.

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

      @@goldmetal 헐 정말 간단하게 해결이 되었습니다 감사합니다 강좌 보고 끝까지 따라 해보겠습니다!

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

    수고하십니다
    플레이어 점프~착지가 달 표면처럼 천천히 작동하는 걸 고쳐보고 싶은데 어디를 조절해야 하나요
    AddForce나 질량 조절로는 한계가 보이네요

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

      Edit > Project Settings > Physics 에서 중력값을 늘리시면 됩니다.
      단 중력이 늘어난 만큼 AddForce 힘도 크게 주셔야 해요

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

      @@goldmetal 감사합니다

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

    골든메탈님 알려주신 벽 마찰방지 및 플레이어 Rigidbody의 collision Detection (Continuous)설정까지 했는데 방향키를 계속 누르거나 Dodge 기능을 사용시 벽을 쉽게 뚫어버리더라구요 이럴때, 어떻게 해야할까요 ㅠㅠ

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

      물리 관련 문제는 B45에서 모두 다루었습니다.
      일단은 그냥 진행해주시면 되겠습니다.

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

      @@goldmetal 너무너무 감사합니다 !!

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

    애니메이션 부분만 자세하게 다뤄주시는 영상이 있으신가요?? 저번부터 애니메이션 코드부분에서 이해를 못하고 있어요

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

      여기 한번 참고해보시면 좋을 것 같네요.
      wergia.tistory.com/212

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

      @@goldmetal 감사합니다! 많은 도움이 됐어요!

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

    안녕하세요 골드메탈님 제가 벽에 비비면 계속 벽을 뚫는데 이건 왜 이런 걸까요..ㅠㅠㅠ 벽에 끼다가 결국은 통과가 되요..

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

      B45에서 모든 물리 문제를 해결할 수 있습니다.
      일단은 그냥 진행해주세요~

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

      @@goldmetal 감사합니다아!

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

    13분 쯤에서 스페이스바를 누르면 점프 모션이 안나오고 다음과 같은 문장이 뜨는데 왜 그러는 걸까요?
    Parameter 'doJump' does not exist.
    UnityEngine.Animator:SetTrigger (string)
    Player:Jump () (at Assets/scripts/Player.cs:63)
    Player:Update () (at Assets/scripts/Player.cs:32)
    아무리 훓어봐도 뭐가 잘못됬는지 모르겠습니다. ㅠㅠ
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class Player : MonoBehaviour
    {
    public float speed;
    float hAcis;
    float vAcis;
    bool wDown;
    bool jDown;
    bool isJump;
    Vector3 moveVec;
    Rigidbody rigid;
    Animator anim;
    void Awake()
    {
    rigid = GetComponent();
    anim = GetComponentInChildren();
    }
    void Update()
    {
    GetInput();
    Move();
    Turn();
    Jump();
    }
    void GetInput()
    {
    hAcis = Input.GetAxisRaw("Horizontal");
    vAcis = Input.GetAxisRaw("Vertical");
    wDown = Input.GetButton("Walk");
    jDown = Input.GetButtonDown("Jump");
    }
    void Move()
    {
    moveVec = new Vector3(hAcis, 0, vAcis).normalized;
    transform.position += moveVec * speed * (wDown ? 0.3f : 1f) * Time.deltaTime;
    anim.SetBool("isRun", moveVec != Vector3.zero);
    anim.SetBool("isWalk", wDown);
    }
    void Turn()
    {
    transform.LookAt(transform.position + moveVec);
    }
    void Jump()
    {
    if (jDown && !isJump){
    rigid.AddForce(Vector3.up * 10, ForceMode.Impulse);
    anim.SetBool("isJump", true);
    anim.SetTrigger("doJump");
    isJump = true;
    }
    }
    void OnCollisionEnter(Collision collision)
    {
    if(collision.gameObject.tag == "Floor"){
    anim.SetBool("isJump", false);
    isJump = false;
    }
    }
    }

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

      플레이어 애니메이터에 Trigger 파라메터인 doJump 를 추가하지 않으셔서 그렇습니다.
      추가한 히우에도 꼭 Jump 상태로 넘어가는 Transition의 Condition으로 등록해주세요

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

    Dodge 를 실행할때 MoveSpeed 를 고정수치로 변환하고 Dodge의 실행이 끝났을때 기존수치로 변환하고싶은데
    게임 아이템 등으로 MoveSpeed의 값이 변환될 수 있게 만들 생각이라 일반 상수로 DodgeOut 코드를 건들 수 없을때
    어떻게 건들면 좋을까요

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

      전역변수로 float dodgeSpeed; 추가해서 미리 회피속도 저장해두고
      Dodge() 에서 speed = dodgeSpeed; 로 바꾸어주시면 됩니다.

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

    안녕하세요 영상 정말 잘보고있습니다 혹시 제가 회피구동이 실행한후 제자리에서 계속 회피 모션하고있는데 어떤게 문제일까요..?

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

      회피를 끝내는 DodgeOut이 실행되지 않아서 그렇습니다.
      Invoke("DodgeOut"); 이 있는데도 그렇다면 코루틴으로 바꿔보시는게 좋겠습니다.
      mentum.tistory.com/489

  • @u_-iv2yv
    @u_-iv2yv 2 года назад

    점프에 15 넣고 했더니.. 세상에나 우주까지 뛰네요.. 이걸 1.01f를 넣어도 굉장히 높게 뛰네요.. 비율은 16:9 안드로이드 가로 모드로 따라하고 있습니다.

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

      리지드바디에서 Gravity Scale이나 Mass를 늘려보시는 것이 좋겠네요

    • @qusgkdus2157
      @qusgkdus2157 2 года назад +2

      그거 GetButton으로 하니까 저도 그러더라구요.. 혹시 GetButtonDown이 아니라 GetButton으로 하신건 아닌가요??

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

      getbuttondown이아닌 getbutton으로하시면 눌려져있는 동안에 계속 점프가 실행되기때문에 15만큼 수백번 점프한 힘이 한번에 나왔을수도있습니다 getbuttondown 하시면 한번눌릴때 15만큼 한번만 실행이됩니다.

  • @게임하는오리-u1e
    @게임하는오리-u1e Год назад

    골드메탈님
    회피로 벽이 통과가 되요.

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

      B45에서 해결방법 모두 나옵니다. 일단은 그대로 진행해주세요!

  • @동네개님-m1q
    @동네개님-m1q 9 месяцев назад +1

    캐릭터가 벽을 뚫어 버리는데 이건 어떻게 해야할까요?

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

      B45 영상에서 모든 물리 문제 해결 방법을 알려드립니다.
      미리 보시거나 그대로 진행하셔도 됩니다.
      ruclips.net/video/dynN70kyD9A/видео.htmlsi=NR_SVwkmx0PiGD3W