탑다운 2D RPG - 퀘스트 시스템 구현하기 [유니티 기초 강좌 B24]

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ม.ค. 2025

ความคิดเห็น • 264

  • @user-ma11
    @user-ma11 6 หลายเดือนก่อน +1

    확실히 긴 영상으로 차근차근 설명해주시니 이번 강의와 바로 전 강의는 내용이 쉬운 수준은 아니지만 이해가 매우 잘되네요 잘 봤습니다 감사합니다

  • @떠오르는태양-h7q
    @떠오르는태양-h7q ปีที่แล้ว +2

    와 영상 재생되는걸 제 머리가 못따라가네요 ㅋㅋ 일단 한번 쭉보고 곰곰히 이해해가며 다시 보고 그다음엔 어떤식으로 쓰이고 왜 이렇게 쓰였는지 이해하며 외워보겠습니다. 이런건 유료강의로 봐도 전혀 안아까운 초퀄리티 강의입니다. 직접 짜신 로직인진 잘 모르겠지만 진짜 천재이신거같아요 -0- 특히 10나머지값 빼준부분..절로 감탄나오네요. 처음에 왜 1번 2번 순서대로 안하고 갑자기 천번대로 엔피시 넘버를 정하나 싶더니 이런 이유들이 있네요.

  • @윤유상-b9m
    @윤유상-b9m ปีที่แล้ว +1

    나머지 빼서 예외처리하는 부분 보고 소름이 돋았습니다. 좋은 강의 감사드립니다!

  • @판도라7422
    @판도라7422 ปีที่แล้ว +1

    최근에 유니티와 C#을 제대로 공부하며 골드메탈님의 게임개발 따라하기들을 다시 정주행하고 있는데 정말 알찬 강의임을 이제서야 알게 됐네요 ㄷㄷ...
    딕셔너리 자료구조, 예외 처리, 오버라이딩 개념을 얕다면 얕고 깊다면 깊게 배우는 시간이었습니다. 좋은 강의 항상 고맙습니다!

  • @reasure3
    @reasure3 4 ปีที่แล้ว +7

    확실히 난이도가 있네요. 게임 개발할때 계획부터 세우는게 왜 중요한지 느꼈습니다. 무작정 개발해버리면 ID가 꼬일 수 있겠네요.

  • @푸른매실-k2k
    @푸른매실-k2k ปีที่แล้ว +2

    이번 강의 정말 유익했습니다. 제가 한 달반 동안 유니티 독학을 하려고 인터넷을 사방팔방 찾아봐서, 그나마 유니티 공식 홈페이지가 기초과정이 있긴 하더라구요, 그런데 들어도 영어인데다가 번역본을 봐도 너무 엉성하고 예전거라 호환이 안되는 문제도 있었습니다. 그리고 무엇보다도 골드메탈님의 강의처럼 다방면에서 질좋고 많은 영상을 무료로 들을 수 없었죠. 사실 지난 1달반동안 배운것보다 여기 골드메탈 채널에서 보름동안 배운게 훨씬 더 가치있고 많았습니다.
    이런 좋은 강의들을 무료로 들을 수 있고, 거기에 업데이트까지 꾸준히 해주시니 정말 대단히 감사하다는 말씀올립니다.

    • @goldmetal
      @goldmetal  ปีที่แล้ว +1

      아이고 좋은 글 정말 감사합니다. 앞으로도 리뉴얼 강좌를 통해 최적의 강좌를 제공해드리도록 노력하겠습니다🤗

    • @푸른매실-k2k
      @푸른매실-k2k ปีที่แล้ว

      @@goldmetal 감사합니다 메탈님, 아 그리고 제가 독학으로 시작하다보니 유니티 공부순서를 잘 모르겠는데요. 유니티 기초강좌 재생목록을 모두 듣고 나서, 채널안의 어떤 재생목록들을 듣는게 좋을까요?(사실 취업하는게 목적입니다)

    • @goldmetal
      @goldmetal  ปีที่แล้ว

      @@푸른매실-k2k 기초 강좌를 다 하셨다면 제 채널에서는 배우실 것이 없습니다. 개인적으로 간단한 프로젝트를 직접 기획하셔서 게임 하나 만들어보시는 것을 추천드립니다.

    • @푸른매실-k2k
      @푸른매실-k2k ปีที่แล้ว +1

      @@goldmetal 그렇군요, 상세한 답변 감사합니다. 덕분에 어떻게 방향을 잡아야할지 확신이 섰습니다 😀

  • @muhadojun
    @muhadojun 2 ปีที่แล้ว +1

    메탈님 ~
    Coin에서 ID 5000부여해줬고 안보이게 했다가.. 실행하면 퀘스트 진행 후 나타나는것 까지 되는데.. Coin앞에서 스페이스바를 클릭하면 대화창 나오는 것과 코인 사라짐이 안되네요. 영상을 여러번 봤는데.. 퀘스트에 따라 나타났다 switch문에서 사라지는게 나오는데.. 관련 설정/코드를 어디서 확인하면 되나요? ~ 박스와 책상은 안내창이 나옵니다. ㅠㅠㅠ
    21:00 ~ 28:00 사이에 Coin 셋팅하는게 나오는데.. switch문 내용만 나오고 영상끝까지.. Coin 먹을때 기능에 대한 부분이 안나오는거 같아요.. .제가 해당 부분을 못 찾는 건지 궁금하네요.

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      24:13 에 case 20: 에 비활성화 로직을 작성했습니다.
      동전을 먹는다 라기보단 대화하는 형식으로 대화하면서 talkIndex가 20이 되었기 때문에 실행되는 것이지요.

    • @muhadojun
      @muhadojun 2 ปีที่แล้ว +2

      @@goldmetal 앗.. 이유를 찾았습니다. ~ 박스, 책상 처럼... Coin의 Layer를 Object로 설정하지 않아서 대화창이 나오지 않았네요 ~ 항상 친절한 설명 너무너무 감사합니다. ^^

    • @샤샤샤-e9c
      @샤샤샤-e9c ปีที่แล้ว +1

      @@muhadojun 와 저도 이 문제로 계속 틀린 코드 없나 많이 고생했었는데 감사합니다!! ㅠㅠㅠ 드디어 진도 나갈수있겠다 ㅠㅠㅠㅠ

  • @솔무한
    @솔무한 2 ปีที่แล้ว +1

    골드메탈님 강의 너무 보석입니다! 다른 프로젝트 기다리고 있습니다! 항상 건강하세요~!

  • @Hannah2re
    @Hannah2re 2 หลายเดือนก่อน +1

    안녕하세요 골드메탈님! 영상 잘 보았습니다. 궁금한 점이 하나 있는데, 만약 퀘스트의 개수가 10개가 넘어가면 어떻게 해야 하나요? 일단 퀘스트의 인덱스가 10씩 늘어나니 npc들의 아이디를 천 대로 설정했는데, 재귀함수 부분에서 오류가 발생하더라구요. 어떻게 수정할 수 있을까요?

    • @Hannah2re
      @Hannah2re 2 หลายเดือนก่อน +1

      해결했습니다! %100 대신 %1000을 하니까 되더라구요ㅎㅎ! 처음 만들 땐 별 생각 없었는데 스스로 시도하니까 나누는 게 어떤 의미인지 알게 된 거 같아요:)

  • @Jack-to7ur
    @Jack-to7ur ปีที่แล้ว +1

    오늘도 좋은 강의 잘 보고 배우고 갑니다.
    이번 내용도 혼자서 하라고 하면 몇시간은 죽쒀야했을 것 같은데 덕분에 빠르게 배워서 적용시킬 수 있었습니다, 감사합니다.
    다만 머릿속에 저번 내용이 아직 완전히 자리잡지 않는 상태에서 이번 내용도 완전히 제 지식으로 만드려면 시간이 좀 더 필요하겠네요.

  • @user-v5g-v8h
    @user-v5g-v8h 14 วันที่ผ่านมา +2

    혹시나 동전 아무리 스페이스바 눌러도 암것도진행이안된다면 Coin Layer를 Object로 바꾸시면댑니다!

    • @김백수-i2x
      @김백수-i2x 11 วันที่ผ่านมา

      저 원래 안되다가 Object로 바꾸면 왜 되는거죠 ㅠㅠ?

    • @user-v5g-v8h
      @user-v5g-v8h 11 วันที่ผ่านมา

      @@김백수-i2x 골드메탈님 영상보면 알수있듯이 RayCastHit 에 Layer Mask 가 Object로 설정해서 그래요
      제 기준은
      void FixedUpdate()
      {

      Vector2 moveVec = isHorizontalMove ? new Vector2(h, 0) : new Vector2(0, v);
      rigid.linearVelocity = moveVec * speed;
      //Ray
      Debug.DrawRay(rigid.position, dirVec * 0.7f, Color.green);
      RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, dirVec, 0.7f, LayerMask.GetMask("Object"));

    • @user-v5g-v8h
      @user-v5g-v8h 11 วันที่ผ่านมา

      Player Action 스크립트가면 확인가능합니다~
      void FixedUpdate()
      {
      Vector2 moveVec = isHorizontalMove ? new Vector2(h, 0) : new Vector2(0, v);
      rigid.linearVelocity = moveVec * speed;
      //Ray
      Debug.DrawRay(rigid.position, dirVec * 0.7f, Color.green);
      RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, dirVec, 0.7f, LayerMask.GetMask("Object"));

  • @Sparronix
    @Sparronix 4 ปีที่แล้ว +3

    오버로드에 대한 개념은 책에서 봤는데, 실제로 사용 사례를 보니 이해가 빠르네요.
    좋은 강의 감사합니다.

  • @그럼날아봐
    @그럼날아봐 5 ปีที่แล้ว +2

    요즘 생방을 못들어가네요 ㅠㅠ 유튜브에 좋은 강의 올려주셔서 정말 감사합니다!!

  • @UniCoti
    @UniCoti 2 ปีที่แล้ว

    20:00 부분에서 영상처럼 "이 호수의 전설을 들으러 온거야?"
    부분 에서 스페이스를 누르면 다음 퀘스트로 넘어가는게 아니라,
    대화창이 꺼진다음 다시 대화를 걸었을때 다음 퀘스트로 넘어가지면
    뭘 수정해야되나요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      19:16의 32번째 줄 이후로 talkData를 얻지 못해서 대화가 종료된걸로 처리되었네요.
      id + questTalkIndex 에 해당하는 대화 데이터가 Dictionary에 담겨있는지 한번 확인해보세요.
      33번째 빈공간에 Debug.Log(id + questTalkIndex); 로 대화 아이디를 직접 콘솔창으로 확인하는 방법을 추천드려요

    • @UniCoti
      @UniCoti 2 ปีที่แล้ว

      @@goldmetal 감사합니다

    • @UniCoti
      @UniCoti 2 ปีที่แล้ว +1

      @@goldmetal 알고보니 그냥 대사를 안쓴거였네요 귀찮게 해드려서 죄송합니다

  • @eloe2003
    @eloe2003 3 ปีที่แล้ว +1

    오늘도 강의 잘 듣고 갑니당
    재귀함수.. 배울 때 이걸 언제 쓰겠어~ 했는데 여러군데에 쓰이는군요ㅎ.

  • @cherry_tteokbokki
    @cherry_tteokbokki 4 ปีที่แล้ว

    여기까지 왔다가 앞부분 까먹어서 처음부터 다시 하고왔어요ㅎㅎㅎㅎㅎ
    그런데 28:46 에서처럼 .을 찍어도 저런 목록이 뜨지 않는데 왜 그러는지 알 수 있을까요...🤔?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      해당 변수 타입은 Dictionary입니다.
      이 글자가 색상이 검은색이 아닌 다른 색으로 바뀌어 있는지 (클래스로 인식) 확인해보시고
      만약 그렇지 않다면 클립 스튜디오를 종료하고 유니티 내부에서 스크립트를 더블 클릭해서 실행해보세요.
      그래도 안된다면 Edit > Preference > External Editor에서 비주얼 스튜디오가 연결되어 있는지 확인해보시면 되겠습니다.

    • @cherry_tteokbokki
      @cherry_tteokbokki 4 ปีที่แล้ว +1

      External Tools 에서 스튜디오 연결이 안되어있어서 그랬나봐요. 하니깐 바로되네옇ㅎㅎ 감사합니다ㅎ

  • @Gromit8181
    @Gromit8181 4 ปีที่แล้ว +2

    이번 화도 잘 보았습니다. 와 이번화 좀 따라가기 힘들었네요. 일단 완성은 했는데 앞으로 한 일주일 정도는 로직 곱씹어서 이해하는데 써야될듯 싶습니다. 이제 머리가 안따라주나 싶기도 하고 생각해보면 원래 나쁜거 같기도 하고 ㅎㅎㅎ 좋은 강좌 항상 감사합니다

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +2

      이해가 잘 안되시는 내용을 덧글로 달아주시면 답변 드리겠습니다. 화이팅!

    • @Gromit8181
      @Gromit8181 4 ปีที่แล้ว +4

      @@goldmetal 많은 분들이 질문 올려주시기 때문에 골메님 일일히 답변하는것도 보통일이 아닐것 같아서 되도록이면 자제하고 있습니다만 또 제가 물어보고 싶었던 점을 다른분이 질문으로 올려주셔서 참고가 되는 경우도 있어서 제 질문이 나름 다른분들에게도 영양가 있겠다 싶을때 가끔 여쭤보아도 되겠..지요?. 일단은 이 좋은 콘텐츠를 무료로 본다는거 자체만으로도 참..감사합니다.(--)(__)

  • @wolfisbest3400
    @wolfisbest3400 3 ปีที่แล้ว +2

    퀘스트 시스템 진짜 진짜 어렵네요..ㅠ 그래도 이런 시스템을 구현했다는 게 넘 뿌듯하고 또 재미있어서 좋았어요~!

  • @MakeOurDream
    @MakeOurDream 2 ปีที่แล้ว +1

    RPG 구현하고 싶어서, 퀘스트 관련 예제 찾으려고 검색했는데, 눈에보여서 바로 시청하겠습니다 ㅎㅎ 어떤 게임기능이든 가장 첨으로 골메님꺼 있으면 보게되는거같아요 :)

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      봐주셔서 감사합니다!

  • @uber1336
    @uber1336 8 หลายเดือนก่อน +1

    질문 하나 있습니다.
    모니터를 WQHD를 써서 그런가 괴리감이 좀 큰데, 해상도를 바꾸는 족족이 글자들이 잘립니다.
    일일히 다 수정하는 것 말고는 답이 없을까요?

    • @goldmetal
      @goldmetal  8 หลายเดือนก่อน

      대화 텍스트의 RectTransform 앵커를 Alt + Shift로 우측 하단의 파란색 최대화면을 선택해주세요
      그리고 X, Y 축 여백을 알맞게 넣어주셔서 영역을 지정해주시면 됩니다.

    • @uber1336
      @uber1336 8 หลายเดือนก่อน +1

      @@goldmetal 내일 한 번 해보겠습니다. 감사합니다!

    • @uber1336
      @uber1336 8 หลายเดือนก่อน +1

      @@goldmetal 이 방법밖에는 없군요...... 해결했습니다. 감사합니다!

  • @maybe_so-0618
    @maybe_so-0618 2 ปีที่แล้ว +1

    안녕하세요 골드메탈님 강의 너무 잘 보고 있습니다.
    강의를 보던 도중 구현 하고 싶은 기능이 있어 댓글을 씁니다.
    혹시 대화중에 선택지를 구현해서 그에 따라 다음 질문이 달라지게 하려면 어떻게 해야할까요?
    많이 고민 해봤지만 아무리 생각해도 떠올릴수 없어 이렇게 여쭤봅니다.😭

    • @maybe_so-0618
      @maybe_so-0618 2 ปีที่แล้ว

      talkData.Add(1000, new string[] { "대화1.:0", nextTalk });
      이런 식으로 다음 대화가 달라지는건 선택지에 따라 스트링인 nextTalk의 값을 바꿔주는걸 생각해봤지만...대화 중간에 선택지를 어떻게 넣을지.......아니면 이 방법 말고 다른 방법도 있을까요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว +1

      NPC에 현재 상태 (호감도, 선택지에 따른결과 값) ID를 저장하는 변수를 추가로 두셔야 겠습니다.
      대화 넘버링도 카테고리 + QUEST ID + NPC ID + TALK ID 순인데 NPC ID + NPC STATE ID + TALK ID
      이렇게 상태 ID를 중간에 넣는게 좋겠습니다.

    • @maybe_so-0618
      @maybe_so-0618 2 ปีที่แล้ว

      @@goldmetal 답변 감사합니다!!!
      하지만.......대화 하는 중간에 선택지ui 를 띄우는 건 어떻게 해야 할까요?ㅠㅠ 따로 인덱스 값을 만들어서 스페이스를 누르면 감소되고 전부 감소되면 선택지ui 를 띄우는 식으로 만들어야 할까요?ㅠㅠ

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว +1

      @@maybe_so-0618 선택지 데이터를 저장할 Dictionary 하나 추가로 만들어야 합니다. int에는 TalkID가 들어가고 string에는 선택지들이 들어간 문자열배열이 들어가면 되겠습니다.
      대화 할 때마다 해당 딕셔너리에서 hasKey() 함수로 TalkID를 넘겨서 데이터가 있으면 선택지를 보여주는 방식이 좋겠네요.
      선택지 개수는 선택지데이터가 배열이니 length를 파악해서 그만큼 보여주면 되겠습니다.

    • @maybe_so-0618
      @maybe_so-0618 2 ปีที่แล้ว

      @@goldmetal 감사합니다!

  • @권점심-z9n
    @권점심-z9n 4 ปีที่แล้ว

    강의 잘 보고 있습니다. 그런데 이 강의가 난이도가 어려워서 그런지 막히는 부분이 좀 생기네요.
    강의 26:37 부근에서 동전을 획득하면 Quest Action Index가 1 증가해서 동전이 사라져야 하는데 값이 증가하지 않네요. 이 문제를 어떻게 해결해야 할까요?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +1

      동전의 NpcId를 설정하셨는지 인스펙터 창에서 확인해보세요

    • @권점심-z9n
      @권점심-z9n 4 ปีที่แล้ว

      @@goldmetal 확인해보니 NpcId는 이미 설정한 상태여서 오늘 다시 코드랑 강좌를 대조하면서 보다보니 동전을 찾는 퀘스트의 npcId 값이 동전의 npcId 값과 달라서 이런 일이 생겼군요. 오래전 영상인데 이렇게 빠르게 답변 달아주셔서 정말 감사합니다. 업로드된지 시간이 좀 지나면 답글을 기대하기 힘든데 골드메탈님의 친절함에 감탄하고 갑니다

  • @benatakr
    @benatakr 2 ปีที่แล้ว +1

    좋은정보 감사합니다 오류를 이틀 째 잡고있는데...꼭 혼자 힘으로 풀어보겠습니다 아프이로도 열심히 챙겨보겠습니다!

  • @조승엽-h5p
    @조승엽-h5p 2 ปีที่แล้ว

    4:46 questId를 선언만 해놓은 상태고 questList에 int가 questId라고 따로 쓴거 같지 않은데 어떻게 설정된거에요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      questId는 기본 값이 0 이고 이후 NextQuest() 함수 호출이 되면 10씩 더해집니다.

  • @KirnMango
    @KirnMango 2 ปีที่แล้ว +1

    Questmanager 스크립트에서 pubulic void CheckQuest(int id)
    {
    if(id == questList[questId].npcId[questActionIndex])
    questActionIndex++;
    }
    라썼을때 gamemanagered 에서 대화를 끝낼때 썼던 questManager.CheckQuest(); 여기부분에서 필요한 정식 매개변수 'id'에 해당하는 제공된 인수가 없다합니다 소괄호안에 뭘 넣어야 하는 건가요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      원래 매개변수 id를 활용해야 하는데 전역변수 questId를 새로 만들어서 사용하고 있기 때문에 int id는 없애주셔도 됩니다.

    • @KirnMango
      @KirnMango 2 ปีที่แล้ว

      if(id == questList[questId].npcId[questActionIndex]) 위에(int id)를 ()만들고 나면 id에서 'id'이름이 현제 컨텍스트에 없다 뜨는데 questId 로 바꿔주면 되는건가요?
      그리고 questActionIndex가 올라가야 하는데 안올라가요ㅠㅠ
      if(talkData == null)
      {
      isAction = false;
      talkIndex = 0;
      questManager.CheckQuest();
      return;
      }
      여기랑
      public void CheckQuest()
      {
      if(questId == questList[questId].npcId[questActionIndex])
      questActionIndex++;
      }
      여기는 무슨 문제가 있는 건가요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      @@KirnMango 죄송합니다. 다시 확인해보니 int id는 사용하고 있네요. 39:13 그냥 호출시에는 오버로드를 활용하니 참고 바랍니다.
      실제로 id를 넣는 부번은 게임매니저 81번줄부터입니다.
      //End Talk
      if(talkData == null) {
      isAction = false;
      talkIndex = 0;
      questText.text = questManager.CheckQuest(id);
      return;
      }
      상대방ObjData의 id입니다.

    • @KirnMango
      @KirnMango 2 ปีที่แล้ว +1

      @@goldmetal 오오 해결됐어요. 질문 답하는 거 귀찮으실 텐데 답해주셔서 감사합니다.

  • @bearvladi-i2b
    @bearvladi-i2b 3 ปีที่แล้ว +1

    정말 드럽게(?) 어렵네요... 그치만 강좌가 재미있어서 끝까지 따라할 수 있었던 것 같아요 너무 감사합니다 ㅎㅎㅎ

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      화이팅입니다!

  • @홍메뚜기
    @홍메뚜기 5 ปีที่แล้ว +3

    골드메탈님 강의 잘보았습니다! 급격하게 어려워졌네요 ㅠㅠ 그래도 재밌어요 정말 감사합니다

  • @포지-b7b
    @포지-b7b 5 ปีที่แล้ว

    골드메탈님 안녕하세요! 강의 잘 보다가 질문이 있어 댓글 남깁니다 ㅠㅠ 맨 마지막에 추가한 메서드 CheckQuest()가 gameManager클래스의 void start()에서는 NullReferenceException 라고 뜨며 퀘스트이름이 나오지 않고 그 외의 다른 메서드에서는 작동합니다. 다른 경우로 CheckQuest메서드의 내용을 단순히 string형으로 디버그로그 작성하였을 때나 "0"값을 리턴할땐 void start에서 작동합니다. ㅠㅠㅠㅠ 순서상의 문제인지 무엇이 문제일까요?..

    • @goldmetal
      @goldmetal  5 ปีที่แล้ว

      호출 직전에 현재 진행 중인 퀘스트 ID에 대응하는 Dictionary 아이템이 들어있는지 확인해보세요.
      .containsKey() 함수를 사용하시면 알 수 있습니다.
      그것도 아니라면 인스펙터 창에서 public 변수가 비어있는지도 확인이 필요하겠네요.

  • @Gray99chz
    @Gray99chz 2 ปีที่แล้ว +1

    안녕하세요 처음3d 재생목록부터 쭉 보고있는 시청자입니다 항상감사합니다 :)
    다름이아니라... 퀘스트를 구현하고 npc 대화는 차례대로 안하면 안열리게끔 하는것을 성공했는데
    오브젝트가 대화창이 안열려서 확인해보니까 npc랑 대화를 할때마다 오브젝트의 id도 10씩 줄어드는걸발견했습니다...
    몇번돌려봐도 모르겠어서.. 혹시 어느부분을 확인하는게 좋을지 알 수있을까요?

    • @Gray99chz
      @Gray99chz 2 ปีที่แล้ว +1

      아닛. 영상뒤편에있다니...ㅠㅠㅠㅠㅠㅠㅠㅠ 2ㄷ틀동안 찾고있었네요

  • @샤샤샤-e9c
    @샤샤샤-e9c ปีที่แล้ว

    골드메탈님 좋은 영상 늘 감사합니다 그런데 궁금한 점이 있어 질문드립니다!
    public int GetQuestTalkIndex(int id)
    {
    return questId + questActionIndex;
    }
    게임 매니저에서 이 함수에게 id를 주면 어떻게 GetQuestTalkIndex함수가 id에 해당하는 값을 반환하는지 궁금합니다
    npc Id값과 토크데이터의 int[]값과 같아서 그런걸까요?

    • @goldmetal
      @goldmetal  ปีที่แล้ว +1

      아 저것은 잘못된 매개변수입니다 사실 int id 매개변수는 없어도 됩니다.

  • @소무리
    @소무리 2 ปีที่แล้ว +1

    골드메탈님 잘 보고 배우고 있습니다 근데 궁금한게 생겨서 이렇게 댓글 달아요 스크립트에서 pubulic void CheckQuest(int id) 이런거 뒤에 (int id) 이 괄호에 들어가는건 어떨때 쓰는건가요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      실제로 id를 넣는 부번은 게임매니저 81번줄부터입니다.
      //End Talk
      if(talkData == null) {
      isAction = false;
      talkIndex = 0;
      questText.text = questManager.CheckQuest(id);
      return;
      }
      상대방 ObjData의 id입니다.

    • @소무리
      @소무리 2 ปีที่แล้ว +1

      @@goldmetal 감사합니다

  • @꿈꾸는모험가
    @꿈꾸는모험가 4 ปีที่แล้ว

    이번 강의는 어려운만큼 골드메탈님의 내공과 노하우를 엿볼수 있는 장이었습니다.
    본래 진하게 베어든 액기스는 처음이 너무 강렬한지라 주춤하게 되지만 천천히 곱씹다보면 그 진수를 알게 되지요.
    여러번 시행하며 고찰해야겠어요~ 고급진 강의 정말 감사합니다 ^^

  • @czteamlove
    @czteamlove 4 ปีที่แล้ว

    좀 어려웠지만 그래도 너무너무 재미있어요 ㅎㅎ! 다른강의는 지루하던데 골메님 강의는 재미도 있고 모르는 부분도 친절히 알려주시고 너무 너무 감사합니다:)

  • @루나_A
    @루나_A 3 ปีที่แล้ว +1

    안녕하세요 ㅎㅎ. 골드메탈님의 유익한 강의보면서 유니티를 공부하고 있는 사람입니다.
    코드를 강의대로 다 완성하고 나서 의문점이 생겨서 질문드립니다.
    GetQuestTalkIndex(int id)를 보면 리턴값이 questid + questActionIndex로 npc의 id를 받아왔지만 쓰이는 곳 없이 리턴값을 출력하더라구요.
    이 id는 어떤용도로 쓰이는건가요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      NPC ID가 아닌 진행 중인 퀘스트의 대사ID 라고 보시면됩니다.
      8:36 Talk() 함수에서 다음 대사의 인덱스를 얻기 위해 GetQuestTalkIndex를 사용하고 있으니 확인해보세요.

    • @루나_A
      @루나_A 3 ปีที่แล้ว

      @@goldmetal 답변 감사합니다!
      제가 궁금한건 13:04 를 보시면 함수가
      public int GetQuestTalkIndex(int id){
      return questId + questActionIndex;
      }
      인데 여기서 int id를 매개변수로 받아왔지만
      questId나 questActionIndex는 id를 참조해서 가져오는게 아니더라구요.
      그래서 이 id는 어떤 용도로 쓰이는지 궁금해서 질문했습니다.

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      @@루나_A 그러네요. 함수에 문제가 좀 있습니다. 이미 퀘스트매니저에는 현재 ID를 가지고 있으므로 매개변수를 굳이 추가할 필요가 없습니다. BE3는 사전개발을 하지 않고 다이렉트로 진행한 강좌라 이런 부족한 부분이 있네요. 매개변수는 없어도 됩니다. 제보 감사드립니다.

    • @루나_A
      @루나_A 3 ปีที่แล้ว

      @@goldmetal 그래도 대단하십니다. 다이렉트로 제작하시면서 id를 이용해 나머지연산으로 퀘스트 대화 찾아가는거 노하우도 감명깊게 봤습니다.
      항상 감사합니다. 새해 복 많이 받으세요!

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      @@루나_A 다음엔 XML 혹은 JSON 파일을 이용한 내용으로 다뤄보겠습니다. 감사합니다.

  • @samukju
    @samukju 3 ปีที่แล้ว

    메탈형님 npc와의 대화창을 키를 입력하지 않아도 1~2초정도 후에 닫히게 하고싶으면
    if (isNpc)
    {
    talkText.text = talkData.Split(':')[0];
    portraitImg.sprite = talkManager.GetPortrait(id, int.Parse(talkData.Split(':')[1]));
    portraitImg.color = new Color(1, 1, 1, 1);
    }
    이 부분에서 어떤 타이머 함수를 추가해야 할까요??

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      타이머 함수는 따로 없지만 코루틴의 return WaitforSeconds() 사용하면 가능합니다.
      대신 지금 사용하고 있는 함수를 코루틴 형태로 바꾸어주셔야 해요.
      사용방법은 아래 링크로 공유해드리겠습니다.
      m.blog.naver.com/PostView.nhn?blogId=pxkey&logNo=221296053953&proxyReferer=https:%2F%2Fwww.google.com%2F

  • @고양이손-q2u
    @고양이손-q2u 5 ปีที่แล้ว

    25:50에 동전 활성화를 위해 ControlObject(); 의 위치를 바꾸고나서 실행을 해보면 루도와의 대화이후 코인은 활성화되는데 캐릭터가 특정좌표로 날아가서 그곳에서 고정되어 버립니다...띠용..

    • @goldmetal
      @goldmetal  5 ปีที่แล้ว +1

      플레이어 위치를 바꾸는 로직이 따로 있는건지 확인이 필요하겠네요.
      아니면 움직임 로직에 Debug.log()로 강제로 돌리는지 확인해봐도 되구요

  • @_1_149
    @_1_149 3 ปีที่แล้ว

    강의 감사합니다. 이전강의에서 txt파일을 통한 이차원배열로 대화를 읽어왔더니 퀘스트쪽에서 꼬여버렸네요.. 강의를 보면서 별도의 게임을 제작중인데 스케일이 꽤 클거 같아서 대화데이터를 파일을 통해 관리하고자 했습니다. 그 과정에서 찾은게 txt파일을 불러와 이차원 배열로 대화 데이터를 받아오는 로직인데, 딕셔너리로 받아올 수 있는 방법은 생각이 나지 않더군요.. 그대로 다음단계로 넘어가니 ID에 퀘스트 번호를 더하는 부분에서 턱 막혀버렸습니다. 그냥 스크립트에 텍스트를 집어넣는 방식으로 돌아가야 할까요?

    • @_1_149
      @_1_149 3 ปีที่แล้ว +1

      데이터를 처음부터 입력하는 것이 아니라 배열을 미리 크게 선언해두고 데이터를 채우는 걸로 어느정도는 해결 되네요. 약간 데이터 낭비가 있을거 같은 느낌이지만...

  • @jaymoon8579
    @jaymoon8579 4 ปีที่แล้ว

    골드메탈님, 좋은 자료 공유해주셔서 감사합니다. 덕분에 열심히 공부하고 있습니다. 하나 여쭤볼게 있는데 루도의 동전 퀘스트에서 루도와 대화를 나누고 나면 동전이 Scene창에서는 나타나는데 Game창에서는 보이지 않습니다. 동전을 마주보고 스페이스 치면 동전을 찾았다는 메시지도 뜨는데 왜 유독 Game창에서만 모습이 안보이는 걸까요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      SpriteRenderer의 Order Layer 문제입니다.
      이 값이 같으면 보일수도 있고 안보일수도 있는 문제가 생기는데
      동전의 OrderLayer를 올려주시면 해결됩니다.

  • @Bananamango-q1r
    @Bananamango-q1r ปีที่แล้ว

    골드메탈님! 강좌 끝까지 잘 따라하고 오류도 없는데요, 마지막에 퀘스트 이름 콘솔창에 보이게 하는 부분에서 골드메탈님 경우에는 루도의 동전찾아주기가 한번만 뜨는데 저는 NPC1 한테 말 한번 더 걸고나면 콘솔창에 루도의 동전 찾아주기가 또 뜨고 박스 건드려도 또 뜨고 책상건드려도 또 뜨고 동전먹으면 또 뜨고 그러는데 왜 그런걸까요? 마찬가지로 루도의 동전 찾아주기 퀘스트로 넘어가기전에 책상이랑 박스 건드리면 마을사람들과 대화하기가 콘솔창에 말 걸때마다 계속 뜹니다 ㅜㅜ 마지막에 동전 먹고 루도한테 가면 퀘스트 올 클리어! 는 한번만 잘 뜹니다. 강좌 넘 감사하게 잘 보고있습니다!! 항상 감사합니다!!

    • @goldmetal
      @goldmetal  ปีที่แล้ว +1

      동전 먹으면 퀘스트토크 인덱스가 하나 올라가고 루도의 다음 대사가 나와야하는데 인덱스가 안올라간 모양입니다.
      동전 먹고 퀘스트토크인덱스 숫자 확인해보세요.

  • @최기영-z1s
    @최기영-z1s 3 ปีที่แล้ว

    언제나 좋은 영상 감사합니다 골드메탈님!
    제가 동전 퀘스트 스크립트를 입력하고 하였는데 게임창에서는 동전이 안보입니다 ㅜㅜ..
    다른 댓글보면서, 디버그 확인해보니 퀘스트는 정상적으로 진행되고 동전의 레이어도 올려봤는데 게임창에서는 보이질 않는데 혹시 뭐가 문제인지 알 수 있을까요??

    • @최기영-z1s
      @최기영-z1s 3 ปีที่แล้ว +1

      앗 포지션이 -793으로 되있었는데, 그거때매 안보이는거였네요 ㅎㅎ ..!! 다른건 혼자 잘되고 왜 코인만 만드니까 -790이 됐는지 참 .. 괜히 알림뜨게해드렸네요

  • @이승헌-w8b
    @이승헌-w8b ปีที่แล้ว +1

    혹시 게임 진행하다가 Scene이 바뀌게 되면 Quest ID와 Quest Action Index가 처음값으로 초기화 되게 되는데 Scene이 바뀌더라도 이 숫자들을 유지하는 방법은 없을까요,,,?ㅠㅠ

    • @goldmetal
      @goldmetal  ปีที่แล้ว

      여러가지 방법이 있지만 싱글톤 방식의 파괴되지 않는 Quest 오브젝트 하나 만들어서 변수를 저장하시고 가져오시면 됩니다.
      glikmakesworld.tistory.com/2

    • @이승헌-w8b
      @이승헌-w8b ปีที่แล้ว +1

      @@goldmetal 감사합니다!!

  • @오유진-z3m
    @오유진-z3m 3 ปีที่แล้ว

    선생님 좋은 강좌 감사합니다! 조언 한가지 부탁드리고 싶습니다. 게임에 들어갔을 때 그 display옆에있는 스케일을 0.73x로 했을 때는 잘 맞았는데, 이후에 scale을 1x로 조정해서 플레이해보니 대화창이 화면 내에 안보이고 그보다 밑에 보이더라구요. 어떻게 해결하면 좋을까요...? (이 대화창이 카메라를 기준으로 아래 늘리기가 되어있는 게 아니라 제가 구성한 맵을 기준으로 아래 늘리기 되어있는 것 같습니다 ㅠㅠ)

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      게임 장면은 x1 기준으로 만드셔야 합니다.
      x1 하신 다음에 UI 배치를 다시 잡아주시고, 맵을 좀 더 넓게 보고 싶으시다면 픽셀 퍼펙트 카메라에 해상도를 늘려주세요.

  • @이지혁-g6x3w
    @이지혁-g6x3w 3 ปีที่แล้ว

    안녕하세요 골드메탈님 도중에 오류가 생겨서 질문을 합니다.
    게임 시작시 퀘스트의 이름이 뜨는 부분에서 NullReferenceException이 나오면서 QeustManager에 CheckQuest()부분에 문제가 있다고 합니다.
    Inspector창의 설정을 다시 해도 문제가 풀리지 않고,
    CheckQuest()에
    if(QuestList.ContainsKey(QuestId))
    {
    Debug.Log("존재");
    }
    else
    {
    Debug.Log("존재X");
    }
    와 같은 식으로하면 Console창에는 Debug가 나오지도 않습니다.
    게임 진행 도중에 발생하는 퀘스트 이름표시는 잘만 나오는데, 게임 시작시에만 이러한 오류가 뜨는걸 해결해보려다 할만한 방법들이 막혀서 질문을 드립니다.

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      if문 앞에 Debug.Log(QuestList); 추가해서 테스트 해보시고
      Null 이라면 Awake 부분에서 초기화부분이 빠진거니 4:22 추가해주시면 됩니다.

    • @이지혁-g6x3w
      @이지혁-g6x3w 3 ปีที่แล้ว

      @@goldmetal 감사합니다! 초기화는 되어있어서 보다가 void Start()를 void Awake로 바꾸니 정상적으로 작동이 되네요.

  • @Ric-jq7yn
    @Ric-jq7yn 2 ปีที่แล้ว

    강의 정말 감사합니다!
    질문이 하나있는데요, 퀘스트에서 메인퀘스트와 서브퀘스트를 만드려하는데 메인퀘스트와 서브퀘스트를 동시에 돌리게 하려면 코드를 어떻게 만들어야하나요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว +1

      더 복잡해지면 다른 방법으로 하시는 것을 추천드립니다.
      이런 경우에는 XML 데이터로 계층구조로 데이터를 만들어두고
      유니티에서 코드로 해석해서 불러오는 방식을 사용합니다.
      wergia.tistory.com/53

  • @duswns1312
    @duswns1312 4 ปีที่แล้ว +1

    메탈님께서 토크데이터에 예를들어 10+ 1000를 불러오면 1010에맞는 대사가 출력되는데 혹시 이부분에서 이야기처럼 주고받는 대화로 만들때에는 어떻게 응용하면 좋을까요? 번호를 일일히 다 지정해주는게좋을까요?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +1

      대화 내용이 무조건 한번에 다 나온다는 확정 하에
      대화 데이터를 말씀하신대로 핑퐁방식으로 넣으면 되겠습니다. (주인공,NPC,주인공,NPC..)
      하지만 가끔씩 주인공 독백이나 무언가를 설명하는 NPC의 경우 여러 번 대화를 이어가는 경우가 많으니 이렇게 ID 형식으로 처리를 한거랍니다.

    • @maybe_so-0618
      @maybe_so-0618 2 ปีที่แล้ว

      대화 데이터를 핑퐁방식으로 넣는걸 어떻게 구현하는 건가요? 코드가 감이 잡히질 않네요... 혹시 예시를 알려주실수 있으신가요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว +1

      @@maybe_so-0618 9:38 처럼 이 강좌에서는 ID가 올라가면서 NPC만 말하고 있는데 NPC 대사 -> 플레이어 대사 -> NPC 대사.. 방식으로 데이터를 작성하면 좋다라는 이야기였습니다. 따로 준비하실 코드는 없습니다.

    • @maybe_so-0618
      @maybe_so-0618 2 ปีที่แล้ว

      @@goldmetal 헉 요즘 바쁘실텐데 감사합니다. 죄송하지만 하나만 더 여쭤봐도 괜찮을까요? 혹시 NPC 끼리 대화를 나누는 대사가 나올때 말하는 NPC에 맞는 초상화로 바꾸려면 어떻게 해야할까요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      @@maybe_so-0618 내용 뒤에 넣고 있는 :표정 수정버전 :1001
      관련 영상은 아래 링크로 확인해주세요.
      th-cam.com/video/qJjfYvEYKiE/w-d-xo.html

  • @루-u2c
    @루-u2c 2 ปีที่แล้ว +1

    Assets\scripts\QuestManager.cs(20,31): error CS1729: 'QuestData' does not contain a constructor that takes 2 arguments
    다 작성한 거 같은데 어디에서 실수를 했는지 모르겠어요ㅜㅜ

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      QuestData는 퀘스트이름의 문자열과 대화ID 배열 두개를 받습니다.
      해당 문제는 생성자 함수에 매개변수가 2개가 필요한데 모자르다는 이야기이니 잘 확인해보세요.
      매개변수 사이에는 쉼표로 구분해주셔야 합니다.

    • @루-u2c
      @루-u2c 2 ปีที่แล้ว +1

      감사합니다!! 해결했어요!

  • @intimeart8384
    @intimeart8384 3 ปีที่แล้ว

    골메님! 퀘스트 대화편에서 대화가 끝까지 가고
    IsAction이 체크 활성화되면서 대화창에서 안나가집니다. 오류 내용 보니까 인덱스 최대치는 2라서 대화창이 2개만 허용되는데 3개까지 넘어가고 talkIndex = 0;으로 초기화를 못 시켜주는 거 같습니다. 어떻게 해야할 까요

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      29:33 처럼 index가 퀘스트대화의 Length와 같을 때 null로 반환하는지 확인이 필요하겠네요.
      간단하게 if문 바로 위에 Debug.Log("퀘스트 [" + id + "] " + talkIndex + " / " + talkData[id].Length); 로 콘솔에서 확인해보는게 좋겠습니다.

  • @김용준-f7e
    @김용준-f7e 2 ปีที่แล้ว

    골메님 영상 너무 잘 보고있습니다! 혹시 NPC와 대화 후 허공에 대고 스페이스바를 눌러도 대화가 되는 경우는 어떤 문제일까요 ㅠㅠ

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว +1

      레이캐스트에서 아무것도 잡히지 않을 때는 ScanObject를 비워야하는데 그게 안되어 있나봅니다.
      th-cam.com/video/bZVa6C6vRBQ/w-d-xo.html

  • @asdf-v8g
    @asdf-v8g 3 ปีที่แล้ว

    일단 따라하긴 했는데 머리속에 들어온 게 없어서 큰일이네요 ㅠㅠ
    계속 붙잡고 있는 것보단 다음 강좌 보면서 나중에 익히는 게 좋을까요?
    숫자의 자릿수를 이용해서 구현하는 건 알겠는데 함수가 이리저리 왔다갔다 하는 게 많다 보니 머리가 하얘졌어요 ㅋㅋ큐ㅠㅠ

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      작은 예제 게임을 많이 다루어보시면 점차 익숙해지실겁니다.

  • @TeamSpoilers
    @TeamSpoilers 4 ปีที่แล้ว +2

    이번 강좌는 확실히 난이도가 조금 있었던것 같습니다. 이해하는데 3일이나 걸렸네요.. 특히나 재귀함수 로직에서 힘들었습니다. 예외처리가 없다면 호출 구조상 무한 반복 되는 함수이다 보니 초보인 저에게 구현은 아직 꺼려지는데요. 현업에서도 많이 쓰이는 로직인지 궁금하네요.
    언제나 좋은 강의 감사드리고 열심히 공부하여 언젠가 현업에서 선생님을 한번 만나보고 싶습니다.

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      게임 프로그래밍에서는 반복적인 AI (인공지능)을 가진 몬스터라던가
      있어서 구현할 때 재귀함수를 사용하여 패턴을 구현하는 경우가 있습니다.
      이 외에도 로그라이크 같은 맵을 만들 때도 재귀함수가 사용될 수 있답니다.

  • @윤정길-b6d
    @윤정길-b6d 4 ปีที่แล้ว

    헥헥....속도가 갑자기 빨라진거 같네요 ㅎㅎ 근데 정말로 RPG게임 퀘스트를 만들때 지금처럼 숫자로 키를 만들고 조합해서 많이 하나요? 숫자로하니까 너무 햇갈리네요~

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +2

      퀘스트와 대화목록을 관리하는 방법중 극히 일부분일 뿐입니다.
      다른 방식으로 관리하셔도 되는데
      그 중에서도 XML, JSON 파일로 관리하는 방식이 많이 사용됩니다.
      wergia.tistory.com/53

  • @Kangkkkg
    @Kangkkkg ปีที่แล้ว

    동전에 Box Collider 2D를 포함 시켰는데, Player가 동전 위로 올라갑니다.
    유니티를 껐다가 켜도 그런데 왜 그럴까요?..😅
    Player와 Coin 레이어는 같은 숫자로 설정 해뒀어요.

    • @goldmetal
      @goldmetal  ปีที่แล้ว +1

      동전의 콜라이더에 IsTrigger체크해주셔야 합니다

    • @Kangkkkg
      @Kangkkkg ปีที่แล้ว

      @@goldmetal 체크를 했는데도 올라가요 !

    • @user-xu2bg3dp4v
      @user-xu2bg3dp4v ปีที่แล้ว

      혹시 해결하셨나요? 저도 같은 상황이어서요.. 해결하셨다면 알려주실수있나요?

  • @와비사비룸물질보다정
    @와비사비룸물질보다정 ปีที่แล้ว +1

    감사합니다 좋은 강의였습니다.
    그런데 퀘스트시스템이 뭔가 유지보수하기 난해하고 절차지향적인 느낌이라 살짝 아쉽네요
    뭐 아직 뒷강의는 안들어서 더 어떻게 될지는 몰라서 쓰는 댓글이라 죄송합니다
    유니티는 왕초보지만, 그래도 지적만하고 개선사항을 말 안하면 별로인 것 같아서
    감히 나이브한 개선점을 써보자면
    TalkManager가 하는일이 좀 너무 큰 것 같아서
    talkData 딕셔너리쪽을 따로 스크립트로 빼고
    일반대화 클래스, 퀘스트 대화 클래스를 새로 생성해서
    일반대화 객체가 talkData class를 참조해서 뭐 어떻게 하고, 퀘스트 대화 객체도 talkData class를 참조해서 뭐 어떻게 하고...
    talkmanager는 대화 객체만 관리하는 느낌으로 가면 좀더 직관적이고 유지보수하기 용이해 보입니다
    뭐 QuestManager도 비슷하게 개선이 가능할 것 같습니다
    그리고 지금 진행중인 questId 를 기반으로 대화가 진행 되는 것도 수정이 필요해보이는데
    이거는 개선하려면 좀더 방대한 시스템이 추가로 필요해 보여서 뭐 어쩔 수 없어 보입니다
    아무튼 강의 감사합니다

  • @rokai9337
    @rokai9337 3 ปีที่แล้ว

    좋은 강의 너무 감사합니다. 혹시 여러 퀘스트를 동시에 진행을 하기 위해선 어떤 방식으로 하는게 좋을까요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      구조 변경이 필요하겠네요. NPC가 퀘스트ID를 가지고 있고
      플레이어는 진행중인 퀘스트ID와 진행도를 Dictionary 형식으로 가지고 있으면 어떨까 싶습니다. 그래서 처음 NPC를 만나면 NPC에 접근하여 퀘스트 ID를 알아내어 Dictionary에 Add(QuestID, 0) 저장하고 퀘스트 진행에 활용하는것이지요

  • @이영차-z6o
    @이영차-z6o 3 ปีที่แล้ว

    2가지 궁굼한것이 있습니다 1. Player을 막 움직이다 보면 눈이 짝짝이가 되거나 둘다 작아졌다 돌아왔다 그러던데 뭐때문에 이럴까요? 2. tilemap 콜라이더는 스프라이트 에디터에서만 사이즈 조정이 가능한건가요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      픽셀 퍼펙트 카메라가 적용되지 않아서 그렇습니다.
      개발 중일 때는 자동으로 비활성화되니 픽셀퍼펙트 카메라의 Run In Editor 누르시면 됩니다.
      타일맵 콜라이더는 타일이 있는곳에는 타일크기만큼 생기는 거니 스프라이트와는 상관없습니다.
      타일 크기는 타일맵을 가진 부모 오브젝트의 그리드 컴포넌트에서 조절 가능합니다.

    • @이영차-z6o
      @이영차-z6o 3 ปีที่แล้ว

      @@goldmetal 감사합니다~

  • @dfdfdfeaaqyhvvsdveg
    @dfdfdfeaaqyhvvsdveg 4 ปีที่แล้ว

    강의 잘보고있는데요 중간에 한가지 문제 때문에 진행이 안되는데요 ㅠㅠ 다름이 아니라 questId가 10에서 20으로 올라가지가 않는것땜에 그럽니다 루도한테 말걸고 동전줍는 이벤트가 발생해야되는데 계속 IndexOutOfRangeException: Index was outside the bounds of the array. 이 에러가 뜨고 그말은 CheckQuest 함수의 if (questActionIndex == questList[questId].npcID.Length) 요 구문이 정상적으로 실행이 되지 않는다는 건데 왜그런지 모르겠네요 ㅠㅠ

    • @dfdfdfeaaqyhvvsdveg
      @dfdfdfeaaqyhvvsdveg 4 ปีที่แล้ว +1

      아 해결했습니다 루도의 대화내용 길이가 4개라서 총 4였는데 이걸 3아래로하니 정상적으로 작동이되네요....

    • @dfdfdfeaaqyhvvsdveg
      @dfdfdfeaaqyhvvsdveg 4 ปีที่แล้ว +1

      왜 그런지 알았습니다 :다음 초상화를 안넣어서 그런거엿네요 ㅠㅠ 에구구

  • @김원중-d6j
    @김원중-d6j 8 หลายเดือนก่อน +1

    is trigger를 체크하면 플레이어가 오브젝트위로 걸어다니네요.. 혹시뭐 다른 설정같은게 있나요..?

    • @goldmetal
      @goldmetal  8 หลายเดือนก่อน

      IsTrigger는 물리 충돌을 하지 않고 영역 충돌로만 콜라이더를 활용해 사용하는 속성입니다.
      물리 충돌이 필요하다면 IsTrigger 체크해제 해주세요

    • @김원중-d6j
      @김원중-d6j 8 หลายเดือนก่อน

      @@goldmetal 저의경우 영상에서처럼 동전에 is trigger를 체크하면 동전위를 걸어다니고 대화창도 뜨지를 않습니다..

    • @goldmetal
      @goldmetal  8 หลายเดือนก่อน

      @@김원중-d6j 원래 isTrigger 체크하면 물리충돌 안됩니다. 물리충돌하시려면 IsTrigger 체크 해재하셔야 해요
      글고 감지가 안된다면 Rigidbody2D넣으시고 Type을 Kinematic으로 설정해주세요

  • @숙회지
    @숙회지 3 ปีที่แล้ว +1

    강의 보면서 홀로 깨닫는 이 쾌감이란... 직접 오류를 풀어보며 이해하는 이 카타르시즘이란!

  • @Seojihoon_90
    @Seojihoon_90 4 ปีที่แล้ว +1

    전 강의에서 진행했던 poratraitData 루도 초상화를 4, 5 ,6,7로 딕셔너리 저장 해놨던걸 깜빡하고..
    talkData에 넣을때 :1 :2 로 집어넣어 Dictionary Key 오류나는걸 한참 해맸네요

  • @Husk-u3l
    @Husk-u3l 4 ปีที่แล้ว

    처음 10분까지 진행을 했는데 KeyNotFoundException 오류가 나오네요...
    퀘스트용 NPC는 말이 잘 걸어지는데 다른 NPC의 경우 상호작용을 하면 위와 같은 오류가 나옵니다.
    밑에 댓글중 같은 오류가 있길래 NPC의 id를 수정해봐도 같은 오류가 계속 나오네요... 혹시 해결 방법이 없을까요?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +1

      Input Manager에 액션키를 등록하지 않아서 그렇습니다. edit > projext settings > input가셔서 액션버큰을 추가해주세요

    • @Husk-u3l
      @Husk-u3l 4 ปีที่แล้ว

      @@goldmetal 다음거 땡겨서 하고 있었는데 답글 주셔서 갑사합니다 :)
      이미 키는 왼쪽 컨트롤키로 할당을 해서 퀘스트용 NPC로 지정한 NPC들은 말 거는게 잘 되고 있습니다!
      하지만 위에 말한 오류가 나오면서 퀘스용이 아닌 NPC들에게 말을 걸면 멈춰버립니다.
      다른 분들은 id 지정을 해서 돌아왔다고 하는데 저는 id값을 다시 수정해도 계속 오류가 나오게 되네요...
      이럴땐 어떤 조치를 취해줘야 할까요?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว +1

      @@Husk-u3l 데이터를 부를 때 쓰는 id가 talkData 딕셔너리에 있어아하는데 없어서 그렇습니다. TalkManager에 해당 id데이터를 만들어서 넣었는지 확인해보세요

    • @Husk-u3l
      @Husk-u3l 4 ปีที่แล้ว

      @@goldmetal talkData.Add 를 통해서 추가를 해도 그대로 요류가 나옵니다.
      일단 퀘스트용으로 잘 되던 NPC도 아이디를 바꾸면 안되는걸 보니 지적해주신 오류가 맞는것 같은데 지금 제 능력으로 해결을 못할 것 같네요.
      일단 이번 강의 더 진행 해보고 오류 한번 고쳐보겠습니다!
      주말인데도 답글 빠르게 달아주셔서 감사합니다!

    • @Husk-u3l
      @Husk-u3l 4 ปีที่แล้ว +1

      @@goldmetal 혹시나 제가 영상 중간까지 봤기에 혹시? 해서 talkData.Add 에 퀘스트 아이디를 + 해주니 잘 실행이 되는군요.
      영상을 끝까지 보지 않았던게 제 오류인듯 합니다... ㅠㅠ

  • @춤추는노래
    @춤추는노래 5 ปีที่แล้ว

    퀘스트나 오브젝트 NPC를 제이슨으로 바꿔보고 싶은데, 어떻게 해야할지 모르겠어요. ObjData,QuestData를 어디를 건들여야할지 모르겠습니다. 알려주실수있나요.

    • @goldmetal
      @goldmetal  5 ปีที่แล้ว

      쉽게 구조체화 시켜주는 LitJson 추천드릴께요. 사용법은 아래 링크로..
      m.blog.naver.com/PostView.nhn?blogId=pxkey&logNo=221302537216&proxyReferer=https%3A%2F%2Fwww.google.com%2F

  • @ingter
    @ingter 4 ปีที่แล้ว

    으어...갑자기 어찌구file name and class name match 라고 뜨면서 모든 스크립트가 오류가 납니다...스크립트를 지웠다 다시 넣으려해도 아까랑 똑같은 문구가 나오면서 안넣어지네요오...어떻게 해야하죠오...옛날에도 이런적이 있었는데 막막하네요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      ㅐ스크립트 중에서 클래스와 이름이 다른 것이 있는 것 같네요.
      한번씩 열어보시면서 파일이름과 클래스 이름이 같은지 확인하세요.

  • @TBKJMT
    @TBKJMT 3 ปีที่แล้ว

    언젠가부터 스크립트에 추가할때 드래그해도 인식을 못해가지고 일일이 목록에서 불러오느라 좀 불편해졌는데 요거는 어떻게 해야하나요? ㅠ

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      한번 유니티에서 모두 저장하시고, 유니티 껏다 재시작해보시는 것이 좋겠네요.

  • @25.may_1
    @25.may_1 3 ปีที่แล้ว

    안녕하세요 강좌 잘 보고있습니다.
    특정 npc Id를 스캔하면 오브젝트가 true가 되도록 하고싶은데 코드를 어떻게 추가해야 할까요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      th-cam.com/video/qJjfYvEYKiE/w-d-xo.html
      플레이어 Action() 함수의 Enter Action 부분Talk함수 호출 앞에 if문 추가해서 작성하시면 됩니다.

  • @김재형-y9g
    @김재형-y9g 4 ปีที่แล้ว +1

    존경합니다

  • @tga4586
    @tga4586 ปีที่แล้ว +1

    기존 코드 -> XML 관리로 변경해봤습니다 덕분에 실력이 무럭무럭자랍니당
    public Dictionary LoadXML(string _fileName)
    {
    int key;
    string questname;
    questList = new Dictionary();
    TextAsset Lines = (TextAsset)Resources.Load(_fileName);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(Lines.text);
    XmlNodeList all_nodes = xmlDoc.SelectNodes("QuestRoot/quest");
    foreach (XmlNode node in all_nodes)
    {
    key = int.Parse(node.SelectSingleNode("id").InnerText);
    questname = node.SelectSingleNode("QuestName").InnerText;
    List NpcId = new List();
    for (int i = 0; i < node.SelectNodes("NpcId").Count; i++)
    {
    NpcId.Add(int.Parse(node.SelectNodes("NpcId").Item(i).InnerText));
    }
    questList.Add(key, new QuestData(questname, NpcId.ToArray()));
    }
    return questList;
    }

  • @DeletedUser02082
    @DeletedUser02082 3 ปีที่แล้ว

    골드메탈님 챕터 3에서 동전이 활성화 까지는 되는데 액션 키를 눌러서 먹으려 해도 안먹어져요 어떻게 해야하나요?
    동전 초기화도 했고 스크립트도 잘쓴것 같은데 ''

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      동전에 콜라이더가 있는지, 태그는 설정되어 있는지 확인해보세요

    • @DeletedUser02082
      @DeletedUser02082 3 ปีที่แล้ว

      @@goldmetal 감사합니다 어떻게 해서 해결 됐네요 항상 감사합니다!

  • @김용진-y4y
    @김용진-y4y 5 ปีที่แล้ว +1

    npc id가 긴이유가 이거였군요
    잘보고갑니다

  • @양파-w3t
    @양파-w3t ปีที่แล้ว +1

    3d로 개발할때도 비슷하게 하면 될까요?

    • @goldmetal
      @goldmetal  ปีที่แล้ว

      물리쪽 로직은 Y축을 Z축으로 바꾸시면 충분히 가능합니다.

  • @lalala2041
    @lalala2041 3 ปีที่แล้ว

    퀘스트를 완료하면 간단한 영상(비디오플레이어)이 나오게 하고 싶은데 혹시 어떤 소스를 추가해야 하나요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +2

      VideoPlayer 컴포넌트 사용하시면 됩니다.
      UI에서 재생하는 로직 공유해드릴께요.
      calvinjmkim.tistory.com/46

    • @lalala2041
      @lalala2041 3 ปีที่แล้ว

      @@goldmetal 정말 감사합니다ㅜㅜ

  • @Great_Yi_Soon_Sin
    @Great_Yi_Soon_Sin 4 ปีที่แล้ว +1

    대화를 따로 엑셀같은데서만 편집해서 불러오게만 하게끔 구현하는 그런것 한번 해주시면 좋겠어요 ㅜㅜ 나만의 워크플로우를 만든다고 깔짝거리는데 끝이 없는 것 같아요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      해당강좌는 기초라서 스크립트 내에서 해결한 점 양해부탁드립니다.

  • @rpue.5445
    @rpue.5445 4 ปีที่แล้ว +1

    퀘스트를 동시에 여러 개 진행시킬 수 있게 하려면 어떻게 해야되나요?

  • @설화-q6p
    @설화-q6p 3 ปีที่แล้ว

    어쩔때 manager을 만들고 스크립트를 새로 만드는지 잘 모르겠습니다. ㅠㅠ(스크립트를 나누는 기준이 있나요 ?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      보통 게임 진행에 대한 포괄적인 로직을 가집니다.
      장르마다 다르지만 이런 RPG 경우 퀘스트 진행, UI 창 관리, 데이터 저장,불러오기 정도가 될 수 있겠군요.
      플레이어 스크립트로 넣기에 좀 어색하다 싶은 구성요소는 게임매니저에 넣으시면 되겠습니다.

    • @설화-q6p
      @설화-q6p 3 ปีที่แล้ว

      @@goldmetal 코드를 공부할때 혼자 구현하기가 힘들어요..다른 사람걸 보고 비슷하게 치거나 참고 하고 치는건 가능한데 혼자 처음부터 코드 치지는 못하겠어요 ㅠ.ㅠ 어떻게 공부해야될까요

    • @설화-q6p
      @설화-q6p 3 ปีที่แล้ว

      @@goldmetal 그리구 1번째 npc와 대화하면 끝나는데 2번째 npc 와 대화하면 대화창이 꺼지지 않고 IndexOutOfRangeException: Index was outside the bounds of the array.
      GameManager.Talk (System.Int32 id, System.Boolean isNpc) (at Assets/Scripts/GameManager.cs:43)
      GameManager.Action (UnityEngine.GameObject scanObj) (at Assets/Scripts/GameManager.cs:21)
      PlayerController.Update () (at Assets/Scripts/PlayerController.cs:71)라는 오류가 발생합니다ㅠ

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      @@설화-q6p 게임매니저 43번줄 에 사용된 배열변수는 길이가 하나인데 억지로 두번째를 보려해서 발생하는 문제입니다. 혹시 talkData.Split() 과 관련있는거라면 대사 데이터 넣으실 때 콜론 : 과 초상화 ID를 적지 않으셔서 그런 것 같네요.

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      @@설화-q6p 예제 몇개를 따라하시다 보시면 내가 생각한 기능 하나를 만들려면 어떤 컴포넌트를 데려와야 하는지 점점 감이 잡히기 시작합니다. 대햑교에서도 첫 프로그래밍 학습할 때 여러가지 프로그램만들기 과제를 많이 내주곤 하는게 바로 이런 이유때문입니다. 아직은 힘드시겠지만 좀 더 간단한 예제라도 몇 번 더 따라해보시는 것을 추천드립니다. 최근에 BE6 물리퍼즐 강좌도 있으니 참고해주세요.

  • @SummerWhisper
    @SummerWhisper 2 ปีที่แล้ว +1

    로직이 꽤나 많아서 중간중간 주석안넣으면 길을 잃기 쉽상이네요 ㅋㅋ

  • @ryuwoo1630
    @ryuwoo1630 4 ปีที่แล้ว +3

    중간에 기타 Object한테 말걸었을 때 에러 생기는거, 퀘스트 끝났을때 에러 생기는거... 제가 코드 잘못 따라해서 생긴건줄 알고 한참동안 디버깅했네요 ㅋㅋㅋㅋㅋ 그래도 여러번 느끼지만 에러가 생겨야지 공부가 확실히 되는 것 같습니다. 에러 없이 지나간 것은 기억에도 잘안남고 복습하기도 귀찮은데 에러 잡느라 이리저리 코드 분석하는게 더 도음 되는 것같네요 ㅋㅋ 항상 영상 잘 보고 있습니다. 언제 최근 영상까지 갈지 모르겠지만 틈틈히 공부하는 중이라서 언젠가는 최근 영상까지 다 공부하고 직접 게임 개발까지 하고싶네요 ㅎㅎㅎ

  • @romanticTFT
    @romanticTFT 5 ปีที่แล้ว

    안녕하세요. 영상 잘 보고있습니다.
    좀전까지 잘되다가 visual studio just-in-time debugger 라는 문구가 나오면서 유니티 자체가 꺼져버리는데요
    다시 잘 실행되도록 도와주세요..

    • @goldmetal
      @goldmetal  5 ปีที่แล้ว +1

      justy-in-time debugger를 비활성화 하는 방법이 있습니다.
      docs.microsoft.com/ko-kr/visualstudio/debugger/debug-using-the-just-in-time-debugger?view=vs-2019#BKMK_Enabling
      일단 이렇게해서 비활성화 해보시고 혹시 유니티 콘솔창에서 스크립트 오류가 나고 있다면 빨간줄 쳐진 곳을 확인하시고 고쳐주세요.
      그 다음 실행해보시면 좋을 것 같네요.

    • @romanticTFT
      @romanticTFT 5 ปีที่แล้ว

      @@goldmetal 일단 빠른 답변 감사합니다.
      just in time debugger 문구는 이제 안나옵니다^^
      하지만 게임 테스트 작동후 이동은 문제가 없는데 NPC또는 Object 상호작용시
      "Unity Editor의 작동이 중지되었습니다."라는 문구가 뜨네요..
      스크립트 오류는 없고 unity , virsual studio 재설치 해봤지만 여전히 같은증상이네요ㅠㅠ
      피드백 감사합니다^^

  • @Clock-x4l
    @Clock-x4l 2 ปีที่แล้ว

    14:38 여자애 가기전에 남자애 먼저갈 때의 문제점이 해결이 안됐어요 ㅠㅠ

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      대화를 걸 때 유니티 아래 쪽에 에러 메세지가 뜨는지 확인해보세요. 있다면 대화 데이터 부족으로 인한 뭌제인지 talkid 뭌제인지 확인이 필요합니다.

  • @키위-g7t
    @키위-g7t 2 ปีที่แล้ว +1

    재밌습니다. 조금 느리긴 해도 끝까지 볼겁니다. 무료로 볼 수 있어서 감사합니다.!!

  • @이찬영-v6s
    @이찬영-v6s 4 ปีที่แล้ว

    이런건 어떻게 해야하나요? 이미 끝난 강좌인데 죄송합니다
    IndexOutOfRangeException: Index was outside the bounds of the array.
    GameManager.Talk (System.Int32 id, System.Boolean isNpc) (at Assets/script/GameManager.cs:43)
    GameManager.Action (UnityEngine.GameObject scanObj) (at Assets/script/GameManager.cs:22)
    playeraction.Update () (at Assets/script/playeraction.cs:72)

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      배열 사이즈를 넘어가서 호출하는 부분이 있는 모양입니다.
      43번째 줄에서 배열에 사용한 index값 확인하시고
      index가 배열 크기를 넘지 않도록 해주세요.
      이 내용은 유니티 디버그 D5에서 다루었습니다.
      th-cam.com/video/DivBcrERJ4M/w-d-xo.html

    • @이찬영-v6s
      @이찬영-v6s 4 ปีที่แล้ว

      안녕하세요ㅎ 늦은 밤 죄송하지만 캐릭터가 퀘스트를 받고 또다시 Npc를 클릭하면 KeyNotFoundException이라는 오류가 뜨네요.... 이런 건 어떻게 해결하나요?
      그리고 이상하게 Element()에 Coin이 안 너지네요ㅠㅠ
      아 그리고 새해 복 많이 받으세요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      @@이찬영-v6s talkData 딕셔너리에 저장되지 않는 Key를 사용하셔서 그렇습니다. 대화할때 들어가는 key값이 데이터 넣을 때 있는지 확인해보세요.

    • @이찬영-v6s
      @이찬영-v6s 4 ปีที่แล้ว

      @@goldmetal 그러면 코인이 Quest Object의 Element 0에 왜 들어가지 않을까요?

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      @@이찬영-v6s 선언할 때 타입이 GameObject[] 인지 확인해보세요

  • @flower8833
    @flower8833 2 ปีที่แล้ว

    혹시 3d에서도 똑같이 하면 구현이 될까요?

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      3D는 타일맵이 따로 없습니다. 움직임도 평면이동은 X, Z축이므로 이 점 참고하셔서 이동벡터를 만들어주시면 됩니다.

  • @JaeRo1339
    @JaeRo1339 ปีที่แล้ว

    왜 동전이 대체 먹어지짖도 않고 디버그로그에도 안찍힐까요.. 뭐가문제지? 분명 콜라이더 설정햇고 해당퀘스트실행되면 잘 튀어나오는데덩니ㅏ론어ㅏㅣㅗ러ㅏㅣㅇㄴ모러ㅏㅣㄴ오러ㅏㅣㄴㅇ모리

    • @goldmetal
      @goldmetal  ปีที่แล้ว

      대화창이 나온다면 Talk함수를 실행되고 있단 이야기고 퀘스트 함수가 실행되고 있지 않은 것 같네요. 일단 퀘스크 함수 컨트롤오브젝트 함수 안에 Debug.Log해보고 안나온다면 함수를 호출했는지 확인해보셔야할 것 같습니다.

  • @건밴
    @건밴 5 ปีที่แล้ว

    루도퀘스트로 넘어가지고 대화까지는되는데 코인이 안먹어 지네여...ㅠㅠ 왜이런지 아시나여?

    • @goldmetal
      @goldmetal  5 ปีที่แล้ว +1

      코인 태그를 오브젝트로 걸어두셨나요 확인해보아요

    • @건밴
      @건밴 5 ปีที่แล้ว

      @@goldmetal 오! 고쳐졌네요.
      항상모르는부분가르쳐주셔서감사합니다.

  • @머리별
    @머리별 4 ปีที่แล้ว +2

    골메님 타임라인에 28:20 예외처리 넣어주세요!

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      엇 누락된 부분이 있었군요. 정말 감사합니다! 😋

  • @damo07
    @damo07 4 ปีที่แล้ว +1

    Npc A와 대화가 끝나는 순간 이 오류가 떴어요
    NullReferenceException: Object reference not set to an instance of an object
    QuestManager.CheckQuest (System.Int32 id) (at Assets/C#/QuestManager.cs:30)
    GameManager.Talk (System.Int32 id, System.Boolean isNpc) (at Assets/C#/GameManager.cs:49)
    GameManager.Act (UnityEngine.GameObject scanObj) (at Assets/C#/GameManager.cs:25)
    PlayerAct.Update () (at Assets/C#/PlayerAct.cs:97)
    가 나와서 더블클릭을 해봤었는데 if (id == questList[questId].npcId[questActIndex])
    에 문제가 있다고 뜨네요 ㅠㅠ
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    public class QuestManager : MonoBehaviour
    {
    public int questId;
    public int questActIndex;
    Dictionary questList;
    private void Awake()
    {
    questList = new Dictionary();
    SetData();
    }

    void SetData()
    {
    questList.Add(10, new QuestData("마을 사람과 대화하기", new int[] { 1000, 2000 }));
    questList.Add(20, new QuestData("루도의 동전 찾아주기", new int[] { 5000, 2000 }));
    }
    public int GetQuestTalkIndex(int id)
    {
    return questId + questActIndex;
    }
    public string CheckQuest(int id)
    {
    if (id == questList[questId].npcId[questActIndex])
    {
    questActIndex++;
    }
    if (questActIndex == questList[questId].npcId.Length)
    {
    NextQuest();
    }
    return questList[questId].questName;
    }
    void NextQuest()
    {
    questId += 10;
    questActIndex = 0;
    }
    }
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    public class GameManager : MonoBehaviour
    {
    public Text talkText;
    public QuestManager questManager;
    public TalkManager talkManager;
    public GameObject scanObject;
    //UI
    public bool isActing;
    public int talkIndex;
    public GameObject talkPanel;
    public Image portraitImg;
    public void Act(GameObject scanObj)
    {
    isActing = true;
    scanObject = scanObj;
    ObjectData objectData = scanObject.GetComponent();
    Talk(objectData.id, objectData.isNpc);
    talkPanel.SetActive(isActing);
    }
    void Talk(int id, bool isNpc)
    {
    int questTalkIndex = questManager.GetQuestTalkIndex(id);
    //대화 데이타 설정
    string talkData = talkManager.GetTalk(id + questTalkIndex, talkIndex);
    //대화 끝
    if (talkData == null)
    {
    isActing = false;
    talkIndex = 0;
    Debug.Log(questManager.CheckQuest(id));
    return;
    }
    // 대화 진행
    if (isNpc)
    {
    talkText.text = talkData.Split(':')[0];
    portraitImg.sprite = talkManager.GetPortrait(id, int.Parse(talkData.Split(':')[1]));
    portraitImg.color = new Color(1, 1, 1, 1);
    }
    else
    {
    portraitImg.color = new Color(1, 1, 1, 0);
    talkText.text = talkData;
    }
    isActing = true;
    talkIndex++;
    }
    }

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      if문 직전에 Debug.Log("대화 : " + questId + " " + questActIndex); 로 인덱스 확인하시고
      실제로 데이터를 그렇게 넣어두었는지 대화 Add 쪽 살펴보시는게 좋겠습니다.

    • @damo07
      @damo07 4 ปีที่แล้ว

      @@goldmetal 한번 해봤더니 대화 : 10 0 이렇게 나왔어요
      questList.Add(10, new QuestData("마을 사람과 대화하기", new int[] { 1000, 2000 }));
      보면 10이라고 넣었긴한데...흠...너무 어렵네요 흐에엥ㅠ
      정확하게 에러가 뜨는 순간이
      오른쪽에 있는 루도가 알려줄꺼야 라고 하고 액션키를 누르는 순간 널 리퍼런스가 뜨면서 대화창이 닫히지가 않네욤
      제가 Debug.log로 한번ㄴ 더 테스트를 해봤는데
      questList[questId].npcId[questActIndex] 문제가 맞는 것 같아요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      @@damo07 파라메터를 점검해봐야겠네요. Debug.Log(id); 도 해보세요.

    • @damo07
      @damo07 4 ปีที่แล้ว

      @@goldmetal
      NPC A라 대화 해봤을 때
      퀘스트 ID는10 퀘스트 액트 인덱스는0 아이디는 1000 NPC ID는 라네요
      디버그 로그로 이렇게 해봤어요
      제가 또 QuestData에 가서
      public QuestData(string name, int[] npc)
      {
      name = questName;
      npc = npcId;
      Debug.Log(npcId);
      }
      해봤는데 나오는 값이 null이더라구요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      @@damo07 생성자 부분이 이상한데요. QuestData의 프로퍼티는 questName 과 npcId일텐데 파라메터에다가 프로퍼티 값을 넣고 있네요.

  • @kseohee01
    @kseohee01 5 ปีที่แล้ว

    (책갈피) 21:56

  • @Unknown_Korean
    @Unknown_Korean ปีที่แล้ว +1

    19:08
    Debug.Log(questManager.CheckQuest(id)); // 이거 함수 호출하고 콘솔창에 디버그도 남길 수 있구나... 지식이 늘었습니다.
    이번 강의 너무 어렵고 복잡하네요. 퀘스트 없는 액션게임을 만들어야 할 것 같네요 ㄷㄷ

  • @damo07
    @damo07 4 ปีที่แล้ว

    퀘스트 대화를 만들고 NPC말고 일반 물체에게 대화를 걸었더니 오류가 생겼습니다.
    //퀘스트 대화
    talkData.Add(10 + 1000, new string[] { "어서와.:0", "이 마을에는 놀라운 전설이 있다는데,:1",
    "오른쪽 호수 쪽의 루도가 알려줄꺼야.:0" });
    talkData.Add(10 + 2000, new string[] {"여어.:1", "이 호수의 전설을 들으러 온거야?:0", "그럼 일 좀 하나 해주면 좋을텐데..:1", "내 집 근처에 떨어진" +
    "동전을 주어줬으면해:0" });
    이렇게 만들었더니 이런 오류가 뜨네요..ㅠㅠ
    KeyNotFoundException: The given key was not present in the dictionary.
    System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at :0)
    TalkManager.GetTalk (System.Int32 id, System.Int32 talkindex) (at Assets/C#/TalkManager.cs:55)
    GameManager.Talk (System.Int32 id, System.Boolean isNpc) (at Assets/C#/GameManager.cs:44)
    GameManager.Action (UnityEngine.GameObject scanOBJ) (at Assets/C#/GameManager.cs:31)
    Player.Update () (at Assets/C#/Player.cs:100)
    이렇게 되네요 저번 영상 댓글에 있는데로 봐도 문제 해결이 안됩니덩..ㅠㅠ

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      데이터 넣는게 문제가 아니라 불러올때 talkData에 해당 Id가 없어서 나는 에러입니다.
      NPC ID잘 설정했는지 인스펙터 창에서 확인해보세요

    • @damo07
      @damo07 4 ปีที่แล้ว

      @@goldmetal 아하...넵 감사합니다!

  • @raoksajsmo2959
    @raoksajsmo2959 4 ปีที่แล้ว

    영상 맨 끝 부분 로직을 보기좋게 바꿀때 바꾸면 밑에 GetPortrait밑 Portrait 들이 TalkManager 형식은 동일한 매개 변수 형식을 가진 GetPortrait 멤버를 미리 정의합니다. 와 메서드 간의 호출이 모호합니다 라는 여러 이유로 오류가 발생하는데 이유가 뭘까요

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      변수 talkManager 가 아닌 클래스 TalkManager를 쓰셨는지 확인해보세요.
      클래스에서 바로 함수를 호출하는건 static 함수만 가능합니다.

    • @raoksajsmo2959
      @raoksajsmo2959 4 ปีที่แล้ว

      @@goldmetal 이렇게 쓴게 소문자 talkManager 아닌가요 th-cam.com/video/7KLJM-DBkPg/w-d-xo.html

    • @goldmetal
      @goldmetal  4 ปีที่แล้ว

      TalkManager에 GetPortrait 함수가 2개 선언되어있는지 확인해봐야겠군요.

    • @raoksajsmo2959
      @raoksajsmo2959 4 ปีที่แล้ว

      @@goldmetal 고쳤습니다~

  • @user-gp7tt2yr5f
    @user-gp7tt2yr5f 4 ปีที่แล้ว

    루도와 대화를 마쳤는데도 동전이 나타나질 않는데 어떻게 하죠

  • @djydytsanstvbj
    @djydytsanstvbj 2 ปีที่แล้ว

    16:16

  • @구독계-x3n
    @구독계-x3n ปีที่แล้ว

    안녕하세요, 영상 보면서 천천히 따라하고 있습니다.
    다름이 아니고
    (10 + 1000, new string[]
    {"안녕하세요","오늘은 날씨가 좋네요"}
    (11+ 1000, new string[]
    {"아직 안가셨어요?"}
    (20 + 1000, new string[]
    {"그렇다면 부탁이 있어요", "간단한거에요", "제게 다시 한번 말 걸어주세요"}
    (21 + 1000, new string[]
    {"동전 좀 줏어와주세요"}
    (30 + 1000, new string[]
    {"와 감사해요"}
    이런 식의 대화가 있다고치면 QuestManager의
    if (id == questList[questId].npcId[questActionIndex])
    questActionIndex++;
    이 부분으로 1의 단위 숫자를 올려줘서 11 + 1000번 대화를 불러와주는 걸로 알고 있습니다.
    그러나 일의자리 숫자는 무시하고, 십의 자리 숫자만 올라가버리네요
    그래서 10번 다음에 11번이 아니라 20번, 그 다음엔 30번이 나옵니다
    해결 할 수 있는 방법이 있을까요??

    • @goldmetal
      @goldmetal  ปีที่แล้ว

      GetTalk할 때 해당 아이디하고 talkIndex 까지 더해주고 있는지 확인해보셔야겠습니다.
      퀘스크 아이디 + 엔피씨아이디 + 토크인덱스

  • @TBKJMT
    @TBKJMT 3 ปีที่แล้ว

    와 진짜 힘들었따...ㅠㅠ

  • @user-np6gw2fi8v
    @user-np6gw2fi8v 3 ปีที่แล้ว +1

    골드메탈님 강의 잘 듣고 있습니다! 다만 딱 한 가지 아쉬운 점이 있는데, 강의를 보는 동안 지금 뭘 구현하려고 하는 건지 잘 몰라서 그냥 생각없이 따라하게 된다는 점이에요. 그러다보니 흐름이 잘 안 잡히고.. 강의 시작 전에 "이러이러한 것들을 구현할 거다"라는 걸 그림이든 글로든 간단하게라도 표현해주시면 그 목차대로 혼자 시도해보고 그 다음에 골메님 강의 따라하면 훨씬 머리에 쏙쏙 박힐 것 같단 생각이 들어요. 지금 강의도 충분히 큰 도움이 되고 있어서 감지덕지하지만 혹~시라도 조금이라도 참고해주시면 무한 감사드릴 것 같아용!

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว +1

      의견 감사합니다. 사실 BE5 쿼터뷰 액션 예제부터는 말씀하신대로
      강의 완성 영상을 미리 보여주고 시작하고 있습니다. 감사합니다. 😉

  • @R5dongja
    @R5dongja 2 ปีที่แล้ว +1

    에러가 왜 나는지는 알겠는데 왜 해결된지는 모르겠습니다
    그냥 만지다 보니 해결되었습니다
    오히려 찜찜합니다...

  • @eun8184
    @eun8184 2 ปีที่แล้ว

    19:33

  • @짹짹-r2q
    @짹짹-r2q 3 ปีที่แล้ว

    5:04

  • @R5dongja
    @R5dongja 2 ปีที่แล้ว +1

    자꾸 동전 주워달라고 하니까 징징이와 집게사장님이 생각남 ㅋㅋㅋㅋ

  • @궁금증-g9v
    @궁금증-g9v 2 ปีที่แล้ว

    진짜 너무 어렵다 퀘스트는....

    • @goldmetal
      @goldmetal  2 ปีที่แล้ว

      리뉴얼 때는 조금 더 간편하게 할 수 있도록 개선해보겠습니다. :)

  • @lemonbot7755
    @lemonbot7755 3 ปีที่แล้ว

    골드메탈이 왜
    Gold메탈인지 알수 있는 영상

  • @solless7474
    @solless7474 3 ปีที่แล้ว

    퀘스트 토크에 10~11 , 20 의 의미를 모르겠네요..

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      퀘스트 하나 진행에 붙어있는 대화ID들 이라고 보시면 됩니다.
      퀘스트 진행하는데 여러가지 대화가 오갈 수 있기 때문이죠

    • @solless7474
      @solless7474 3 ปีที่แล้ว

      @@goldmetal 10단위당 10 11 두가지 사물만 가능한건가요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      @@solless7474 퀘스트Id가 10 이라고 하면 10 ~19 가지 대화 ID로 사용가능한거고 다음 퀘스트ID를 20으로 잡을 수 있다는거죠. 이건 어디까지나 예시이므로 개발자 나름대로 기준을 세우시면 됩니다.

    • @solless7474
      @solless7474 3 ปีที่แล้ว

      @@goldmetal 예를 들어 10 + A 10 + B 는 순서상관 없는 대화인거고 12 13 14 올라갈 때마다 11 대화를 해야 12 대화를 할 수 있는건가요?

    • @goldmetal
      @goldmetal  3 ปีที่แล้ว

      @@solless7474 이 강좌를 예로들면 그런 셈입니다. 대화ID 선정은 꼭 이렇게 하는게 정답은 아니니 참고 바랍니다.