탑다운 2D RPG - 서브메뉴와 저장기능 만들기 [유니티 기초 강좌 B26]

  Рет қаралды 51,283

Goldmetal

Goldmetal

Күн бұрын

Пікірлер: 254
@김주역-w4h
@김주역-w4h 4 жыл бұрын
저장기능이 제일 어려울것같았고 제일 걱정했던 파트였는데 의외로 간단해서 놀랐습니다.너무 감사합니다 ㅜㅜ
@exyon63
@exyon63 3 жыл бұрын
아직 햇갈리는 내용이 많은 초보지만 어느정도는 이해하기 쉬운 설명이 너무 좋네요ㅎㅎ
@eloe2003
@eloe2003 3 жыл бұрын
오늘강의도 잘 듣고갑니다!
@시청-d8q
@시청-d8q 5 жыл бұрын
정말 감사해요 친근한 골드님!!
@집-p8t
@집-p8t 5 жыл бұрын
이형님 너무열일하시는데. ㅆㅅㅌㅊ;;;
@모딕-c5b
@모딕-c5b 10 ай бұрын
골드메탈님 요즘에도 항상 잘 보고 있습니다! 새해복 많이 받으시고 언제나 저희 곁에서 영상 만들어주세요! 질문이 하나 있습니다! 제가 2D게임을 만들고 있는데, 스테이지 선택하는 창에서 스테이지에 들어가는 시스템을 구현하려고 합니다! 유저가 게임을 나갔다 들어와도 스테이지가 어디까지 해금됐는지에 대한 내용이 저장되려면 어떻게 해야 하는지 여쭈어보고 싶습니다! 사실 playerfers를 사용해 여러방법으로 코드를 짜보고 있는데 잘 안됩니다...😂 읽어주셔서 감사합니다!
@goldmetal
@goldmetal 10 ай бұрын
순수하게 playerPref 사용하려면 int 형태의 스테이지 개수대로 변수를 만들어야하는 불편함이 있습니다. 에셋을 사용하지 않는다는 전제하에 비주얼 스크립팅의 Save 변수를 사용하면 리스트 bool로 저장도 가능하니 참고 바랍니다.
@모딕-c5b
@모딕-c5b 10 ай бұрын
@@goldmetal 감사합니다 ㅠㅠ 골드메탈님 덕분에 실마리가 보이는 것 같습니다!
@fhzh123
@fhzh123 5 жыл бұрын
늘 감사합니다!
@henneykim1106
@henneykim1106 4 жыл бұрын
8:35 처음 알았네 ㅠㅠ
@그럼날아봐
@그럼날아봐 5 жыл бұрын
완전 좋아요 감사합니다 골메님!!!
@윤정길-b6d
@윤정길-b6d 4 жыл бұрын
꼭 적용해봐야겟네요~ ㅎㅎ잘보고 갑니다~
@FedoraCat-n3t
@FedoraCat-n3t 5 жыл бұрын
헤헷 빨리왔당 좋아요 누르고 나중에 볼게여^^7
@와비사비룸물질보다정
@와비사비룸물질보다정 Жыл бұрын
강의 감사합니다 혹시 간단하고 더 좋은 저장기능은 없는지 궁금합니다 영상에 나온 방식은 만약 게임이 비대하고 커지고 복잡해졌을 경우 모든 경우의 수 에 대해서 저장 및 로드 함수에 일일이 하드코딩하고 그리고 게임의 컨텐츠가 업데이트될 때마다 저장 로드에 또 일일이 수정을 해줘야하는걸 상상하니 끔찍하네여
@goldmetal
@goldmetal Жыл бұрын
Json 이나 Xml에 대화데이터를 구조적으로 저장하는 방식을 가장 많이 사용합니다. 유니티 XML 로 구글 검색해보시면 많이 나올겁니다.
@mocozzi
@mocozzi 4 жыл бұрын
잘 배웠습니다 ~~^*^
@samgul7444
@samgul7444 Жыл бұрын
UI의 Event system이 존재하지 않으면 onClick 이벤트가 실행 안되는 이슈 있습니다. UI 항목에 있으니 Hierarchy에 추가하면 잘 되네요.
@안녕차차-s4j
@안녕차차-s4j 3 жыл бұрын
덕분에 원하는게 되었네요 감사합니당
@유민-w8q7k
@유민-w8q7k 5 жыл бұрын
넘 좋아용!!
@Gyokujin
@Gyokujin 4 жыл бұрын
세이브 기능 계속 막히다가 오늘 기상하자마자 세이브 구간만 다시 하니 코드 잘못 입력했던 것을 알고 드디어 해결했네요 ㅠㅠ (Player에서 대소문자 잘못 입력해서 계속 저장이 안 되었더라고요)
@1313-e3o
@1313-e3o 11 ай бұрын
골드메탈님! 게임 도중 세이브를 하고 종료했다가 다시 시작했을때, 플레이어의 위치는 저장했던 위치가 맞는데 퀘스트 진행 상황은 저장이 안되어있습니다. 레지스트리를 보면 분명 퀘스트아이디와 퀘스트액션인덱스가 저장되어있는데...원인이 뭘까요?ㅠㅠ
@goldmetal
@goldmetal 11 ай бұрын
24:31 부븐을 확인해보세요. 데이터를 넘겨주고 이후에 ControlObject() 함수 호출해주셔야 합니다.
@1313-e3o
@1313-e3o 11 ай бұрын
@@goldmetal 감사합니다!
@shk3593
@shk3593 2 жыл бұрын
정말 도움이 많은 되는 강의 감사드립니다. 질문이 있습니다. GameSave에서 세가지 자료형이 아닌 인덱스 안의 스테이지를 불러오거나 저장하려면 어떤 방법을 써야하는지 궁금합니다. 감사합니다.
@goldmetal
@goldmetal 2 жыл бұрын
int CurrentStage 같이 기본 자료형으로 데이터를 저장하고 다시 불러올 때 이 데이터를 사용해서 오브젝트를 활성화 하는 방법으로 가시면 됩니다. 좀 더 복잡한 구조를 저장하시려면 JSON 파일 저장법을 보시면 좋겠습니다. lefthanddeveloper.tistory.com/15
@shk3593
@shk3593 2 жыл бұрын
@@goldmetal 네 일단 int CurrentStage 형식을 활용해서 해결해 보겠습니다. 링크해주신 페이지도 즐겨찾기 해놓았습니다. 감사합니다!
@Bananamango-q1r
@Bananamango-q1r Жыл бұрын
골드메탈님 너무나도 좋은강좌 늘 재밌고 이해 잘 되게 설명해주셔서 무한 감사드립니다!! 저같은 초보에게 정말 단비 같은 존재이십니다ㅠㅠ 한가지 질문이 있는데요..! 메뉴세트 창 떠있을땐 움직임 없도록 Time.timeScale = 0; 으로 해주고 다시 esc버튼 눌렀을땐 Time.timeScale = 1;을 넣어줘서 다시 움직일 수 있게 해줬는데요, 문제는 메뉴세트창을 esc로 버튼을 눌러 내려가게했을때는 캐릭터가 다시 잘 움직이는데 계속하기 버튼을 클릭해서 재개하면 캐릭터가 그 자리에 고정돼서 상하좌우 방향만 바꾸고 움직이질 않는데 왜 그런걸까요? void Update() { //Sub Menu if (Input.GetButtonDown("Cancel")) { if (menuSet.activeSelf) { menuSet.SetActive(false); Time.timeScale = 1; } else { menuSet.SetActive(true); Time.timeScale = 0; } } } 이렇게 썼습니다..!
@goldmetal
@goldmetal Жыл бұрын
계속하기 버튼의 OnClick에 연결된 함수 내에서도 TimeScale = 1하는 로직 추가해주세요
@Bananamango-q1r
@Bananamango-q1r Жыл бұрын
@@goldmetal 더헉 근데 계속하기 버튼은 인스펙터에서 OnClick에 +버튼 눌러서 추가하고 따로 스크립트에 뭐 안쓰지 않았나용..? 연결된 함수라는게 어느부분에 로직을 추가하면 될까요?
@goldmetal
@goldmetal Жыл бұрын
@@Bananamango-q1r 강좌에서는 TimeScale을 조정하지 않았으므로 단순히 SetActive만 연결했습니다. TimeScale = 1을 해주는 함수를 게임매니저에서 새롭게 만드셔서 연결하시면 됩니다.
@Bananamango-q1r
@Bananamango-q1r Жыл бұрын
@@goldmetal 그렇게 해보겠습니다!! 감사합니다!!
@Kowalski-fu3yg
@Kowalski-fu3yg 2 жыл бұрын
정말 너무 잘 배워갑니다! 씬에서 씬으로넘어갈때도 데이터를 넘겨줘야할때 이런 세이브-로드방식으로 넘겨주는건가요? + 세이브데이터를 날리고싶으면 해당 게임레지스트리폴더를 지우면 되나요? 궁금합니다!
@goldmetal
@goldmetal 2 жыл бұрын
장면끼리는 static변수나 싱글톤으로 계속 유지하는 방식을 사용할 수 있습니다. 데이터 초기화는 Edit 메뉴 맨 아래에 Clear PlayerPref가 있으니 참고하세요
@Kowalski-fu3yg
@Kowalski-fu3yg 2 жыл бұрын
@@goldmetal 오오 감사합니다!
@김동규-x6n
@김동규-x6n 4 жыл бұрын
골드메탈님 이름 짓는게 편집된것 같은데 이름 만드는것을 설명해주실 수 있나요??
@goldmetal
@goldmetal 4 жыл бұрын
1. 대화 Text 위에 이름Text 오브젝트 추가 2. 액션키 누를 때, ScanObject에도 이름정보 포함 3. isNpc 경우 이름Text.text = ScanObject.name; 하여 이름을 표기.
@user-el2dt7jq2l
@user-el2dt7jq2l 5 жыл бұрын
와우 오늘도 엄청나군요
@czteamlove
@czteamlove 3 жыл бұрын
이름 뜨게하는법이 편집되어서 한참을 헤맸는데 이것조차도 골메님이 하신방법과 똑같은지는 모르겠습니다 ㅠㅠ 1. Talk Set에 이름이 NpcName인 Text생성 2. GameManager의 if(isNpc) 부분에 npcNameText.text = scanObject.name; 3.GameManager에 생성한 오브젝트 넣어주기 이러면 NPC A, NPC B라고는 잘 뜨는데 각 NPC에 이름을 지정해서 뜨게하는 법을 모르겠습니다 ㅠㅠ.. ObjData에 새로운 데이터를 넣으면 될까 싶은데 그 방법을 모르겠습니다 ㅠ.. +답을 찾은거 같습니다...!!!!! 1.TalkSet에 이름Text만들기 2.ObjData에 이름정보생성 3.isNPC에 npcNameText.text = scanObject.GetComponent().이름정보; 추가 이거인거같습니다 여러분!!
@user-np6gw2fi8v
@user-np6gw2fi8v 3 жыл бұрын
안 그래도 이거 찾으려고 영상 뒤지고 있었는데 댓글이 있었네요! 저도 해보니까 npc_a 이런 식으로 떴는데 isNpc에서 NpcName.text = scanObject.name 이라고 하면 구조체에서 지정한 이름이 아닌 오브젝트의 이름이 뜨더라구요. 그래서 1. ObjData에서 public string npc_name; 추가해준다음에 2. 해당 npc inspector에서 npc 이름을 루나, 루도로 지정해주고 3. GameManager의 isNpc 부분에서 npc_name.text = scanObject.GetComponentInChildren().npc_name; 하면 NPC_A로 안뜨고 루나, 루도로 잘 뜨네요. npc 아닌 사물은 이름 상자 안 뜨고 npc한테만 이름 상자 뜨는 코드도 추가해야 될 거 같아요 간단하게 setActive()로 조정하거나 npc_name.color = new Color (1, 1, 1, 0) 이런 식으로 컬러 알파값 조정해서 쓸 수 있을 거 같아요
@euihyunkim1789
@euihyunkim1789 2 жыл бұрын
@@user-np6gw2fi8v SetActive(true/false) 명령어는 gameObject대상으로만 되더라구요 ㅠ.. 검색해보니 text 대상으로는 text.enabled = true/false; 명령어를 사용하시면 됩니다-! 보면서 따라할 때는 뭐든 만들 수 있을 줄 알았는데.. 막상 혼자 해보려니 이름 하나 넣는 것도 힘드네요 ㅠ
@merope7910
@merope7910 4 жыл бұрын
감사합니다 잘봤어요
@uber1336
@uber1336 5 ай бұрын
저는 빌드하고 실행하면 configuration창이 안뜨는데, 어떻게 해야할까요? 버전은 2022 lts입니다.
@goldmetal
@goldmetal 5 ай бұрын
2019 Lts부터 삭제되었습니다. (거의 사용하지 않는다는 이유) 때문에 해상도나 키 입력 설정은 이제 인게임에서 구현하셔야합니다
@Alice-mj9hl
@Alice-mj9hl 2 жыл бұрын
안녕하세요! 영상 잘보고있습니다. 배우는도중에 궁금한게 있어서 댓글남겨봅니다~. 제가지금 유니티에서 메인화면위에 미니게임화면이 올라가있는상황인데, 버튼클릭시 미니게임화면만 사라지게하고싶은데 어떤함수를 써야할지모르겠네요.. disappear함수로 이래저래 시험해보고있는데 안됩니다 ㅠㅠ 조언좀 얻을수있을까요!
@goldmetal
@goldmetal 2 жыл бұрын
오브젝트로 구성되어 있다면 GameObject 의 SetActive 를 사용하시면 됩니다. Bool 값이라서 OnClick에 바로 사용가능합니다.
@배문성-w4m
@배문성-w4m 3 жыл бұрын
잘 배우고 갑니다. 만약에 메뉴가 활성화된 상태에서 모든 오브젝트들의 움직임 활동을 멈추게 하려면 어떻게 하면 되나요? 그리고 방금 상태에서 저장을 하면 플레이어가 다른 씬에 위치한 상태인데도 불러오기 하면 다른 씬에 위치해도 가능한가요?
@goldmetal
@goldmetal 3 жыл бұрын
간단하게는 Time.TimeScale = 0; 으로 시간을 멈춰버리는 방법이 있습니다. 저장은 PlayerPref에서 이루어지므로 장면 상관없이 데이터를 불러올 수 있습니다.
@배문성-w4m
@배문성-w4m 3 жыл бұрын
@@goldmetal 감사합니다.
@jagan0821
@jagan0821 4 жыл бұрын
늦게 전과를해서 졸업작품을 시기에 안맞게 빨리 만들어야 하는데 골드메탈님이 제작하신 영상이 저에게 정말 많은 도움이 되고있습니다! ㅜㅜ 정말 감사합니다. + 질문좀할게요! pause와 resume 기능을 만들고 싶어서 Time.timescale 를 넣어 Esc를 누를때마다 일시정지기능을 넣었는데 Esc끼리는 정지,해제가 잘 작동하는데 Resume 버튼을 클릭하면 timescale이 1로 되서 다시 게임재개가 되야하는데 저는 timescale이 0에서 꿈쩍안하고 서브메뉴창만 사라지고 게임은 멈춘상태 그대로네요 ㅜ 다시 esc 누르면 게임은 다시 움직이고 서브메뉴창은 뜨고 반대로 실행되요
@goldmetal
@goldmetal 4 жыл бұрын
로직에 문제가 있는게 아닐까 싶습니다. 직접 구현해본바로는 정상적으로 버튼이 작동하네요. Resume 클릭하면 호출된 함수에서 바로 Time.timeScale = 1; 로 해보세요.
@jagan0821
@jagan0821 4 жыл бұрын
@@goldmetal 전역변수로 flag를 만들어 false 일때 scale = 0 true일때 1로 했었다가 똑바로 작동이 안되서 골드메탈님 말씀대로 변수없이 그냥 함수에 넣으니 잘 작동되네요. 감사합니다
@진하다-g7m
@진하다-g7m 3 жыл бұрын
항상 최애 채널로 유니티 공부하고 있습니다! ㅎㅎ 혹시 ui로 만든 이미지 위에 주인공 캐릭터 올리고싶은데 자꾸 이미지에 가려져서 안보이는데 어떻게 해야될까요...?ㅠㅠ
@goldmetal
@goldmetal 3 жыл бұрын
UI와 월드가 그려지는 좌표계가 다릅니다. 특히 UI는 Canvas 라는 곳에서 그려지기 때문에 캐릭터를 올리려면 마찬가지로 캔버스에 올려야 합니다. UI에서 Image 를 생성 후 Sprite 항목에 캐릭터 스프라이트를 연결해주세요
@진하다-g7m
@진하다-g7m 3 жыл бұрын
감사합니다. 이미지에 똑같이 스크립트랑 다올리고 주인공캐릭터 만들어주면 되겠네요!!! 퇴근하고 집가서 해봐야겠네요 ㅎㅎㅎㅎㅎ
@토이-q2i
@토이-q2i 4 жыл бұрын
좋은 영상 감사합니다!.영상을 보면서 궁금한 점이 생겨서 답 해주시면 감사하겠습니다! 1.그럼 자동저장은 GameSave()함수를 FixedUpdate에 돌리는건가요? 2.만약 자동저장을 만들때 if (!PlayerPrefs.HasKey("PlayerX")) return;이 세팅은 어떤 방법으로 해결해야하나요?
@goldmetal
@goldmetal 4 жыл бұрын
1. Update()에 합니다. FixedUpdate()에는 물리효과에 관련된 로직만 넣는게 좋습니다. 2. 한번이라도 저장되면 실행되지 않는 로직이라 신경쓰시지 않아도 됩니다. 보통 게임 처음 시작하기 하면 초기값을 미리 PlayerPrefs에 다 저장시키고 본 게임으로 들어갑니다. 본 게임에서는 코루틴으로 몇 분 단위 혹은 체크포인트와의 충돌이벤트로 저장하시면 되겠습니다.
@칙칙스-r5c
@칙칙스-r5c 4 жыл бұрын
@@goldmetal update함수에 저장하면 과부하문제는 없나요???
@goldmetal
@goldmetal 4 жыл бұрын
@@칙칙스-r5c 사실 Update()에 하려면 조건을 추가하던가 해서 매번 저장되는걸 방지해야합니다. 제일 좋은 방법은 코루틴을 사용해서 5분, 10분 단위로 저장하는 방법입니다.
@칙칙스-r5c
@칙칙스-r5c 4 жыл бұрын
@@goldmetal 친절한 답변 감사드립니다!
@xxdp
@xxdp 5 ай бұрын
골드메탈님 질문이 있습니다 갑자기 사물을 스캔할 때 NullReferenceException: Object reference not set to an instance of an object 와 같은 오류가 뜨는데 뭐가 문제일까요? 찾아보니 특정 오브젝트를 찾으려 하는데 코드에 그것이 없을 때 저런 오류가 뜬다는데 뭐가 잘못되었는지 모르겠습니다
@xxdp
@xxdp 5 ай бұрын
오잉 갑자기 해결됐습니다
@xxdp
@xxdp 5 ай бұрын
또 뜨네요 뭐지 ..
@xxdp
@xxdp 5 ай бұрын
콘솔창에서 오류 난 거 더블클릭해서 들어가니 //Scan Object if(Input.GetButtonDown("Jump") && scanObject != null) manager.Action(scanObject); 가 나오는데 뭐가 잘못된건지 모르겠네여
@xxdp
@xxdp 5 ай бұрын
아 캔버스에 Talk Set을 열어놓으니까 해결됐습니다
@xxdp
@xxdp 5 ай бұрын
근데 왜 열어두면 널 레퍼런스가 안뜨는지 이유를 모르겠습니다 Talk Set이 Set Active가 아니라 isShow 애니메이션과 관련이 있어서 그런가요?
@옹옹-e8j
@옹옹-e8j Жыл бұрын
안녕하세요 이번에 유니티를 처음 접한 사람입니다! 영상 따라하면서 만드는도중 서브메뉴창에서 esc 키를 눌렀을때 서브메뉴창이 떠야하는데 안뜹니다 ㅠ! 유니티 버전이 2022.2.13이에요.. 영상대로 코드도 맞게 작성하고 project setting 에서 input manager 에 Cancel 과 escape 도 잘 들어갔어요 근데 esc 키 루느면 서브메뉴창이 안떠요.. 최근 버전은 또 따로 설정을 해야되거나 그런건 아니죠??!
@goldmetal
@goldmetal Жыл бұрын
일단 if문 안에 Debug.Log("ESC 누름"); 추가하고 실행해봐서 로그가 뜨는지 확인이 필요할 것 같아요!
@옹옹-e8j
@옹옹-e8j Жыл бұрын
@@goldmetal 잘 실행돼요!! 감사합니당!
@김진우-n3g9x
@김진우-n3g9x Жыл бұрын
PlayerPrefs에는 bool이 따로 없는데 bool값은 자동으로 저장이 되어서 그런 것인가요? 아니면 PlayerPrefs.SetInt("Keyword", System.Convert.ToInt16(value)); 이런 식으로 bool값을 int값으로 변형시켜서 저장하는 식으로 따로 신경을 써줘야하는 건가요?! 맵에 있는 게임 오브젝트들의 활성, 비활성 상태를 저장하고 싶어서 그런데 오브젝트 별로 playerprefs로 0과 1 int 값을 저장해서 Setactive() 안에 저장하고 불러온 값을 넣어주는게 나을까요?
@goldmetal
@goldmetal Жыл бұрын
Bool 형태로 저장할 수 없으므로 말씀하신대로 0과 1로 저장하고 불러와서 Bool 값으로 변환하셔서 사용하시면 됩니다.
@김진우-n3g9x
@김진우-n3g9x Жыл бұрын
@@goldmetal 감사합니당 ㅎㅎ
@멸치가지국
@멸치가지국 3 жыл бұрын
골드메탈님, 강의 정말 잘 보고있습니다! 다만, 한가지 이해가 덜된 부분이 있는데, ControlObject()를 GameSave()에도 따로 더 추가하는 이유는 무엇인가요?
@goldmetal
@goldmetal 3 жыл бұрын
정확히는 GameLoad() 입니다. 게임 불러온 이후 이미 진행중인 퀘스트에 따라 퀘스트 오브젝트를 활성화 하기 위해 호출하는거랍니다.
@김재현-v3f
@김재현-v3f 3 жыл бұрын
2d 플랫포머 강좌에서 만든 스테이지인덱스를 저장하려면 어떻게 해야하나요? 스테이지 인덱스를 저장하고 void Start() { Stage[0].SetActive(false); Stage[stageIndex].SetActive(true); } 시작할 때 이렇게 하면 스테이지 저장구현이 될까요?
@goldmetal
@goldmetal 3 жыл бұрын
네 가능하겠네요. 이 앞에 stageIndex = PlayerPrefs.GetInt("Stage"); 로 불러오기 로직도 있어야겠습니다.
@JW-bm3xr
@JW-bm3xr 2 жыл бұрын
영상보고 게임제작하다가 질문이 있습니다... 세이브 로드 함수 만들어서 버튼에 함수 추가하고 실행 했을때 로그로 확인하고 레지스트리에서도 확인한 결과 저장 및 불러오는 값에 이상은 없습니다. 제가 메인씬에서 게임씬으로 넘어갈때 데이터를 불러오고 게임씬에서 메인씬으로 나올때 저장하는 방식인데 값에는 이상이 없지만 실제 게임씬에 들어가는 값들은 로드함수에서 받아온 값이 안들어가는것 같습니다.
@goldmetal
@goldmetal 2 жыл бұрын
로드 함수에 Debug.Log 를 배치해서 데이터 로드 직후 값을 확인해보시는 것이 좋겠습니다. 그리고 게임 장면으으로 넘어가면 게임이 바로실행하지 말고 데이터 로드와 적용이 끝나고 시작되도록 구현하시는 것을 추천드립니다.
@solless7474
@solless7474 3 жыл бұрын
골메님처럼 바로바로 완성형으로 게임 테스트해보는 건 어떻게 하는건가요?
@goldmetal
@goldmetal 3 жыл бұрын
강좌에서 하는 테스트는 모두 에디터 내의 재생버튼으로 해보는것입니다. 이 재생버튼 누르기 전에는 작성한 코드를 꼭 저장하셔야 반영이 되니 참고바랍니다.
@진행중지금까지
@진행중지금까지 4 жыл бұрын
Quest Manager 인스펙터창의 10으로 설정됬던 QuestId가 게임 시작시 0으로 초기화됩니다. Game Manager에 player을 넣자 위 현상이 발생했습니다
@goldmetal
@goldmetal 4 жыл бұрын
PlayerPrefs 를 사용한 세이브 로드 기능 구현되어있나요? 저장된 값이 0이라서 로드될 때마다 0으로 셋팅될 수 있으니 확인해보세요
@해우로
@해우로 4 жыл бұрын
골드메탈님 영상 항상 잘보고 있습니다. 영상에 나온대로 잘 따라하면서 문제를 해결해 나가는데 도저히 모르겠어서 질문을 드립니다.. 1. 저장을 하고 종료한뒤 로드가 되는 과정은 잘 되는데 퀘스트가 저장이 잘 안되는거 같습니다. (예를 들어 코인에 상호작용하여 코인이 사라진뒤 저장하고 종료하면 코인과 상호작용하기 전으로 돌아가 코인이 다시 나타납니다.) 이런 경우는 PlayerPrefs에서 오류가 난 것인가요? 2. 새롭게 빌드를 하는데도 저장된 채로 빌드가 되어버립니다.(예를 들어 이전 게임에서 퀘스트를 다 클리어하고 다시 새롭게 다른 게임으로 빌드하면 다 클리어된채로 시작됩니다.) 이런 경우에는 레지스트리를 일일이 지워가며 해야하나요?
@goldmetal
@goldmetal 4 жыл бұрын
1. 동전은 CheckQuest에 의해 컨트롤됩니다. 데이터를 불러온 뒤 위 함수를 실행하는지 확인해보세요 2. 게임을 새로 시작할 때 모든 PlayerPrefs 데이터 값을 기본값으로 저장하시면 됩니다. 보통 메인 메뉴에서 새로 게임 시작하기가 이런 기능을 가지고 있어요
@해우로
@해우로 4 жыл бұрын
@@goldmetal 친절한 답변 감사합니다 ㅠㅠ
@Dannykim722
@Dannykim722 4 ай бұрын
questID 랑 questActionIndex 가 저장 혹은 로딩이 안되는 문제가 저도 일어나요... 어떻게 해결하셨나요?
@이정수-l8y4t
@이정수-l8y4t 2 жыл бұрын
CheckQuest를 넣으면 NotImplementedException: The method or operation is not implemented. GameManager.Start () (at Assets/TopDown 2D RPG BE3/ReadMe/Scripts/GameManager.cs:23) 라는 말이 뜨면서 안되고 public Text nametext를 추가 하셨는데 게임매니저에 어떤걸 넣어야 하는지 모르겠네요
@goldmetal
@goldmetal 2 жыл бұрын
게임매니저의 인스펙터에서 QuestManager 넣으셨는지 확인하시고 nameText는 대화창의 NPC 이름을 보여주는 텍스트를 넣으시면 됩니다. 이건 강좌에서 편집된 내용이라 직접 텍스트 하나 생성해서 배치해주세요.
@Rooker08
@Rooker08 2 жыл бұрын
같은 방식으로 3d게임에 서브메뉴 만들수있나요?
@goldmetal
@goldmetal 2 жыл бұрын
네 UI 는 Canvas에서 생성되는거니 월드가 어떻든 상관없습니다.
@김대환-k6x
@김대환-k6x 4 жыл бұрын
안녕하십니까 혹시 안드로이드에서도 이 저장기능이 실행되는지궁금합니다. 항상 감사합니다!!
@goldmetal
@goldmetal 4 жыл бұрын
저장됩니다. 저장위치는 공식 문헌에 기재되어 있습니다. On Android data is stored (persisted) on the device. The data is saved in SharedPreferences.
@UniCoti
@UniCoti Жыл бұрын
if(Input.GetButtonDown("Cancel")) { if(menuSet.activeSelf) { menuSet.SetActive(false); } else { menuSet.SetActive(true); } 를 if(Input.GetKeyDown(KeyCode.Escape)) { menuSet.SetActive(!menuSet.activeSelf); } 로 바꾸는건 어떤가요? 기능상 문제가 없을까요?
@goldmetal
@goldmetal Жыл бұрын
가능합니다! 좋은 개선안이네요~
@nova2510
@nova2510 3 жыл бұрын
전 왜 잘 만든 것 같은데 계속하기, 저장하기, 종료하기 버튼들이 클릭이 안될까요? ㅠㅠ ESC로 서브메뉴창 끄고 다시 나타나게 하는 건 잘 작동됩니다!
@goldmetal
@goldmetal 3 жыл бұрын
종료하기 버튼 선택하시고 인스펙터 창에서 OnClick 이벤트에 함수 연결하셨는지 확인해보세요
@nova2510
@nova2510 3 жыл бұрын
@@goldmetal 연결했는데도 안되는 건 왜 그럴까요..?
@nova2510
@nova2510 3 жыл бұрын
아 이유 찾았습니다..감사합니다!
@신상화-c2p
@신상화-c2p 5 ай бұрын
저장 버튼을 눌러도 창이 꺼지지 않습니다 ㅠㅠ 그러다보니 저장 기능도 활성화가 되지 않는거 같아요 신경써서 살펴봐야 할 부분이 어디일까요 ㅠㅠ 에러 메세지도 안 떠서 계속 강의 영상을 다시 보고 있어요~
@goldmetal
@goldmetal 5 ай бұрын
일단 저장 버튼 선택 후에 인스펙터에서 OnClick 이벤트에 함수 연결하셨는지부터 확인하셔야 할 것 같습니다
@신상화-c2p
@신상화-c2p 4 ай бұрын
@@goldmetal 게임매니저 스크립트랑 세이브 ui에 인스펙터 연결했더니 해결되었어요~ 감사해요~~
@usm3434
@usm3434 2 жыл бұрын
이렇게 질 좋은 강의를 무료로 들을 수 있다는 것에 정말 감사드립니다. 질문이 있는데, 제가 Time.timescale를 이용해서 게임 일시정지/해제 기능을 만들었습니다. 그런데 캐릭터가 상호작용이 가능한 오브젝트 바로 앞에 위치해있는 상태에서 게임 일시정지를 하고 스페이스바를 눌렀더니 일시정지가 풀리더군요.. 게임 일시정지 여부를 판단하는 변수 isPause를 GameManager 스크립트에서 따로 만들고 esc키를 눌렀을 때 조건에 맞게 bool 값을 설정을 하고 PlayerAction 스크립트에서 if(Input.GetButtonDown("Jump") && scanedObject != null)에서 Input 앞에 !gameManager.isPause 라는 조건까지 넣었는데도 이런 현상이 계속되는데 어떻게 하는 것이 좋을까요?
@goldmetal
@goldmetal 2 жыл бұрын
UI는 기본적으로 한번 작동하면 Select 상태로 되기 때문에 스페이스바, 엔터를 누르면 다시 작동하게 됩니다. 이것을 방지하시려면 버튼의 Navigation을 None으로 해주세요.
@usm3434
@usm3434 2 жыл бұрын
@@goldmetal 감사합니다!
@user_Cho_Yoonjae
@user_Cho_Yoonjae 4 жыл бұрын
게임을 만들고 있는데 게임 스테이지가 끝날때 여기서의 서브메뉴처럼 창을 띄워서 다음 스테이지로 가는것을 만드려고 하는데 게임 스테이지가 끝나는것을 확인하는게 플레이어랑 깃발이랑 다았을때 끝나는걸로하는데 창을 띄우는것은 GameManager에서 해서 스크립트가 다른데 창을 띄우는 방법이 있을까요?
@goldmetal
@goldmetal 4 жыл бұрын
플레이어에게 gameManager public 변수를 선언하여 매니저를 할당해둡니다. 그럼 호출할 수 있으니 깃발 충돌 이벤트 부분에 UI창을 띄우는 매니저 함수를 호출하면 됩니으.
@권율-g2d
@권율-g2d 3 жыл бұрын
마우스 잠금에서 esc를 눌러서 설정창을 띄우면서 마우스잠금을 풀고 다시 esc를 눌러서 설정창을 닫고 마우스 잠금을 하는건 어떻게 하는건가요?ㅠㅠ CursorLockMode.Locked로 잠구고 CursorLockMode.None으로 풀고싶은데 어떻게 응용하는지 모르겠어요…!
@goldmetal
@goldmetal 3 жыл бұрын
여기를 참고해보시는 것이 좋겠습니다. ncube-studio.tistory.com/entry/%EB%A7%88%EC%9A%B0%EC%8A%A4-%EC%BB%A4%EC%84%9C-%EC%9E%A0%EA%B7%B8%EA%B8%B0%EC%99%80-%ED%92%80%EA%B8%B0-%EC%88%A8%EA%B8%B0%EA%B8%B0%EC%99%80-%EB%B3%B4%EC%9D%B4%EA%B8%B0-How-to-Hide-and-Lock-the-Mouse-Cursor-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B2%8C%EC%9E%84-%EA%B0%9C%EB%B0%9C-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BCUnity-C-Script
@youseungjang2029
@youseungjang2029 3 жыл бұрын
혹시 GameManager 에서 GameLoad(); 적은 상태로는 유니티 상에서 실행하려고 하면 KeyNotFoundException 오류 뜨는데 로드 테스트 위해선 꼭 빌드해서 테스트 해야 하나요?? 해당 오류로 유니티 상에선 실행하면 아무 조작도 안되는데, 빌드해서는 다 정상적으로 구동 되는 것 같습니다
@goldmetal
@goldmetal 3 жыл бұрын
PlayerPrefs의 저장값이 없어서 나타는 에러이며, 그냥 두면 위험합니다. if(!PlayerPrefs.HasKey(키이름)) 을 사용하여 키가 없으면 초기값을 저장하도록 로직을 추가하면 안전하니 참고 바랍니다.
@youseungjang2029
@youseungjang2029 3 жыл бұрын
@@goldmetal 예전 영상인데도 빠르게 답변 달아주셔서 감사합니다!!
@jwj8659
@jwj8659 3 жыл бұрын
퀘스트 진행 도중 저장 시에는 코인의 Active 여부가 저장 안되네요. 코인의 Active를 관여하는건 QuestId랑 QuestActionIndex인데, 각각 10, 2 상태에서 코인을 Active하고 20,1 상태에서 다시 Deactive 하는데.. 20,0 상태에서 저장을 하게 되면 다시 로드했을 때는 그대로 20,0 이므로 코인이 Deactive 된 디폴트 값으로 로드가 되네요. .activeSelf 함수로 Object 활성이 됐는지를 확인하고 그 여부까지 저장하면 좋겠는데.. playerprefs로는 저장이 안되네요 ㅋㅋ
@goldmetal
@goldmetal 3 жыл бұрын
활성화 비활성화를 QuestId + QuestActionIndex 두 변수를 if문 조건으로 활용하면 어떨까하네요. 10 + 2 = 12, 20 + 1 = 21 이니까 12와 21 사이일때는 활성화 되어 있는거죠.
@Husk-u3l
@Husk-u3l 4 жыл бұрын
이번강좌 잘 따라오다가 저장하기에서 오류가 나오네요. UnassignedReferenceException 이라고 하고 오류에 해당되는 코드가 player.transform.position = new Vector3(x, y, 0); 랑 Start에서 게임 로드하는 함수에서 오류가 나오네요. 원래 player 위치를 -1로 잡아뒀다가 다시 0으로 조정한 뒤 위 코드를 적용해도 같은 오류가 나오게 됩니다. 이런경우 어떻게 하면 될까요? ㅠ
@Husk-u3l
@Husk-u3l 4 жыл бұрын
아 이건 제가 로드 if문에 ! 를 빼먹었네요. 오류 수정했습니다!
@Iligwanji
@Iligwanji 4 жыл бұрын
골드메탈님 안녕하세요~ 메뉴 만드는 법 따라하는 중인데, 제가 만들고 있던 스크립트에 아래와 같이 추가했습니다. void Update() { if (CompareTag("GameManager")) Update_GM(); }
@goldmetal
@goldmetal 4 жыл бұрын
public GameObject menuSet;
@Iligwanji
@Iligwanji 4 жыл бұрын
@@goldmetal 답변 감사합니다. 콘솔창 문제도 없고, 스크립트도 저장하고 확인한 건데도 그러네요.. 아예 스크립트를 하나 더 만들어서 해야 하는 걸까요?
@Iligwanji
@Iligwanji 4 жыл бұрын
메탈님 해결했습니다! 스크립트 맨 아래 생기는 줄만 알았는데 중간에 숨어 있었더라고요.. 항상 친절한 답변 감사합니다!
@Iligwanji
@Iligwanji 4 жыл бұрын
@@goldmetal 메탈님 혹시 게임 내에서 저작권 표시를 하고 싶은데 이 메뉴 방식을 통해 저작권 버튼을 만들어 누르면 안에 출처를 확인할 수 있게 만드는 방법이 있을까요?
@goldmetal
@goldmetal 4 жыл бұрын
@@Iligwanji 메뉴 띄우는 것처럼 버튼을 누를때 창을 하나 더 띄우시면 됩니다. 창을 내려야하니 닫기 버튼도 포함되야겠지요
@김사월-p6v
@김사월-p6v 3 жыл бұрын
골메님 언제 한번 영상에서 본 거 같은데 어디서 봤는지 기억이 안나서 질문드립니다 . Rendering at an odd-numbered resolution(홀수*짝수)pixel perfect camera may not work properly in this situation 이거 어떻게 해결해야 하죠?ㅠ 처음에 할때 오류가 자꾸떠서 standalone(1024X768)으로 맞추고 진행했는데 오늘 빌드 하고 실행했더니 화면이 그냥 엄청 확대 되서 글자도 판넬 중앙에서 나오고 퀘스트 창도 맵밖에서 뜬 것 같은데 화면에 안 나오더라구요 더블클릭 했을때 해상도 설정하는 창은 어캐 뛰우나요??
@goldmetal
@goldmetal 3 жыл бұрын
해상도 설정하는 Config 창은 2019버전부터 사라졌습니다. 유니티 에디터에서 Game 창을 조절해서 홀수 해상도를 짝수로 맞추시면 에러는 사라질겁니다.
@TBKJMT
@TBKJMT 3 жыл бұрын
npc 이름 띄우는건 objectdata 스크립트에서 string으로 관리하면 될까요?
@goldmetal
@goldmetal 3 жыл бұрын
ObjData 스크립트에서 public name이라는 변수 추가해서 이름을 저장해둔 다음 대화할 때 이 변수를 참고해서 이름 텍스트에 넣어주시면 되겠씁니다.
@백종현-p6l
@백종현-p6l 3 жыл бұрын
PlayerPrefs을 이용해서 저장하기 버튼을 누르면 그 상황의 Scene값을 저장하고, 종료하고 들어가면 그 Scene값을 가져와서 SceneManager.LoadScene(stage);을 하도록 하였는데, Scene값이 0일때는 잘되는데, 1부터는 이상하게 화면이 움직이지를 않습니다. 궁금한 점은 1. PlayerPrefs을 사용해 씬로드하는게 안되는건가요? 2. 안되는거라면 어떻게 씬저장 -로드를 해야하나요?
@goldmetal
@goldmetal 3 жыл бұрын
File > Build Setting 가셔서 Scene 목록에 장면을 모두 포함시켰는지 확인해보세요.
@백종현-p6l
@백종현-p6l 3 жыл бұрын
@@goldmetal 네 다했는데 씬1로 넘어가기만하면 화면이 멈춰버리더라고요
@백종현-p6l
@백종현-p6l 3 жыл бұрын
이게 화면은 넘어가는데 넘어가서 키가 먹통이 되어버립니다
@goldmetal
@goldmetal 3 жыл бұрын
@@백종현-p6l 키 입력 부분에 Debug.Log()놓아서 메세지 잘 나오는지 확인해보세요. 오브젝트에 스크립트가 없다던가 스펠링이 틀려서 안되는건지 확인이 필요합니다
@alkali2990
@alkali2990 3 жыл бұрын
혹시 빌드했을 때 사물들을 조사할 때 뜨는 대화창은 잘 나오는데 NPC와 대화할 때 나오는 대화창만 나타나지 않는 것은 원인이 월까요??ㅠㅠ 타이핑 소리는 나오는데 대화창하고 초상화가 안 나오고 타이핑 소리가 나오는 중에도 캐릭터가 움직여집니다.. 에디터에서 실행할때는 문제가 없는데 빌드하고 나서 실행할때만 이러는데 왜 이러는 걸까요..ㅠ 강좌 항상 감사하게 잘 보고 있습니다!!
@alkali2990
@alkali2990 3 жыл бұрын
보니까 대화창만 안 나오는 게 아니라 아예 대화자체가 진행이 안 되네요.. 모든 대화의 타이핑 소리가 다 같게 나오네요; 퀘스트 내용도 전혀 변하질 않고.. 왜 빌드만 하면 이럴까요..ㅠㅠ
@alkali2990
@alkali2990 3 жыл бұрын
음 좀 더 정확히 말해보자면 빌드 후에만 일부 오브젝트에서 NullreferenceException이 발생하네요. 지금 계속 구글링해보는 중인데 어렵네요...
@goldmetal
@goldmetal 3 жыл бұрын
에디터에서만 레이캐스팅이 인식되는건가요? 무리적 문제일 수 있으니 감지가 필요한 오브젝트들에게 리지드바디2D 추가하시고 static으로 설정해주세요
@alkali2990
@alkali2990 3 жыл бұрын
@@goldmetal 레이캐스팅은 인식이 되는거같은데 타이핑 소리만 나오고 초상화, 대화창은 뜨지 않으면서 NullreferenceException: Object reference not set to an instance of an object가 뜹니다.. logviewer라는게 있길래 그걸로 빌드후 로그 확인해봤어요.구글링해보니 코드의 실행 순서 관련해서 이야기가 나오던데 이거랑 관련이 있을까요..?
@goldmetal
@goldmetal 3 жыл бұрын
@@alkali2990 Null인 대상이 scanObj인지 Talk Panel인지 정확히 확인해봐야겠군요. 액션 취했을때 Debug.Log(scanObj);으로 확인해보시고 TalkPanel 변수에도 대화창 오브젝트가 잘 들어가 있는지 확인해보는게 좋겠습니다.
@미래-p5u
@미래-p5u 4 жыл бұрын
2d 쯔꾸르게임 만드는데 침대나 탁자 이런거 , 가구는 유니티에서 구할수잇나요? 무료로 다운받을수잇으면 좋겟는뎅ㅠ 꼭 유니티에서 아니어도 외부에서 다운받고 유니티에서 옮겨서 사용가능할까요.? 된다면 방법좀 알려주시면 감사하겠습니다 ㅠㅠ
@goldmetal
@goldmetal 4 жыл бұрын
찾아보니 탑다운 RPG에 맞는 무료에셋은 없네요. 외부에서 받더라도 라이센스라던가 제작자의 저작권관리에 따라 사용 불가일 수 있습니다. 다운로드가 되는 상황이라면 포함된 라이센스 파일이나 홈페이지에서 사용가능하다고 언급되어있는지 확인해보세요.,
@미래-p5u
@미래-p5u 4 жыл бұрын
@@goldmetal 그러면 혹시 방을 만드는 어플(xp같은..)을 따로 설치해서 유니티와 연동이 가능할까요?
@goldmetal
@goldmetal 4 жыл бұрын
@@미래-p5u 그 어플에서 만든 방을 PNG 이미지 파일로 내보낼 수 있다면 가능하겠습니다
@dragonlegend8756
@dragonlegend8756 4 жыл бұрын
저장이 되긴한다만 다시 실행하면 플레이어가 플레이어가 보이지 않습니다. 그리고 동전 또한 그런데 동전은 진행하면서 수정하면 되는건가요?
@goldmetal
@goldmetal 4 жыл бұрын
하이어라키(계층구조)에서 플레이어 더블클릭하여 어딧는지 확인해보세요. 동전은 퀘스트 진행 데이터에 의해 생겨나야 합니다. 이 내용은 24분에서 다루었습니다. kzbin.info/www/bejne/o4rNhomjrNhlfJI
@dragonlegend8756
@dragonlegend8756 4 жыл бұрын
@@goldmetal 앗 z축 때문에 배경이 플레이어를 가리고 있었던거네요 감사합니다 ㅎㅎ
@wolfisbest3400
@wolfisbest3400 3 жыл бұрын
골메님 게임 빌드하고 실행할 때 저는 그 화질 그래픽 퀄리티 선택하는 창이 안나오고 바로 게임 실행되는데 어떻게 해결할 수 있을까요..?
@goldmetal
@goldmetal 3 жыл бұрын
Config Dialog 창은 2018까지만 나오는 옛 버전 유산입니다. 지금은 삭제된 기능이라 옵션을 게임 내에서 따로 구현하셔야 해요
@wolfisbest3400
@wolfisbest3400 3 жыл бұрын
@@goldmetal ㅇㅎ 따로 구현해야되군요!!
@임호-f2j
@임호-f2j 3 жыл бұрын
유니티에선npc와 상자와 같은 오브젝트들이 보였는데 빌드만 하면 안보이는건 어떻게 해야할까요. 그 자리에서 모습만 안보여서 말걸면 대화창이 나타납니다.
@goldmetal
@goldmetal 3 жыл бұрын
스프라이트 렌더러의 Order in Layer 때문입니다. 바닥보다 높게 설정해주시면 됩니다.
@intimeart8384
@intimeart8384 3 жыл бұрын
게임 계속하기 버튼이 플레이를 누르고 esc누르면 안뜨네요... 디버깅으로 코드 자체에는 문제가 없음을 확인했고, 게임 매니저에 할당도 했는데.. 또 신기하게 마우스로 클릭하면 되네요
@intimeart8384
@intimeart8384 3 жыл бұрын
해결했습니다. 이벤트시스템에 게임매니저를 넣으니까 되었습니다. 원래 게임매니저를 이벤트시스템에 항상 넣어야만 하나요??
@goldmetal
@goldmetal 3 жыл бұрын
아뇨 하이어라키 상 배치와는 관련이 없습니다. 우연히 된 걸 수도 있으니 하이어라키에서 다시 분리하고 테스트해보세요
@KSJang-eq1us
@KSJang-eq1us 5 жыл бұрын
잘되다가 저장기능에서 막혔네요...스크립트 똑같이 썼는데도 동전이 나타나질 않네요. 게다가 키 오류있는거 고치는 스크립트도 그대로 했는데 계속 키 오류가 떠요. KeyNotFoundException: The given key was not present in the dictionary. System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at :0) QuestManager.CheckQuest () (at Assets/Scripts/QuestManager.cs:55) GameManager.Start () (at Assets/Scripts/GameManager.cs:25) 보니까 (at :0) 부분이 골메님 영상에 나오는 부분과 완전 다른 숫자인것 같은데 대체 어디서부터 잘못됬는지 모르겠네요 ㅠㅠ
@goldmetal
@goldmetal 5 жыл бұрын
보여주신 부분은 참조된 메모리 주소입니다. 크게 신경쓰시지 않아도 되구요. GameManager에서의 CheckQuest()호출이 QuestManager의 GenerateData()보다 먼저 실행되면 안됩니다. 그래서 Start()에서 CheckQuest()를 호출했는데 확인해보시구. GenerateData()에서도 Key가 생성되는지 확인이 필요하겠네요.
@KSJang-eq1us
@KSJang-eq1us 5 жыл бұрын
@@goldmetal 이게 GameManager의 start고요 void Start() { GameLoad(); questText.text = questManager.CheckQuest(); } 이게 QuestManager의 GenerateData인데 void Awake() { questList = new Dictionary(); GenerateData(); } void GenerateData() { questList.Add(10, new QuestData("마을 사람들과 대화하기" , new int[] { 1000, 2000})); questList.Add(20, new QuestData("태양의 증표 찾기" , new int[] { 5000, 2000})); questList.Add(30, new QuestData("태양만세 성공!" , new int[] { 0 })); 어디서부터 손을 봐야할지 난감하네요... CheckQuest호출을 GenerateData보다 먼저 실행되지 않게 하려면 뭘 손봐야할까요?
@raoksajsmo2959
@raoksajsmo2959 4 жыл бұрын
10:40초까지 하였는데 Esc키를 누를시 반응하는 속도가 너무빨라 메뉴창이 꺼졌다 켜졌다를 계속 반복하는데 이건 어떻게 할까요 + GameManager Unspector창 Player칸에 player을 넣고 했는데 KeyNotFoundExeption: The given key was not present in the dectionary. System.Collections .Generic.Dictionary 2[Tkey, Tvalue].get_item 이라는 오류에 걸리네요 그 후 대사창들이 내려가지 않습니다.
@goldmetal
@goldmetal 4 жыл бұрын
1. GetButtonDown으로 하셨는지 확인해보세요. 2.대사 ID가 Dicionary TalkData에 있는 ID인지 확인해보세요.
@raoksajsmo2959
@raoksajsmo2959 4 жыл бұрын
@@goldmetal 1번은 고쳤는데 2번을 모르겠네요. ID라는게 어디 쓰여있는건가요? ("QustId") 라는게 맞다면 저건 어디서 썻던건가요
@goldmetal
@goldmetal 4 жыл бұрын
@@raoksajsmo2959 B24에서 다루었습니다. kzbin.info/www/bejne/iKjRlYqbl92Vo9E
@raoksajsmo2959
@raoksajsmo2959 4 жыл бұрын
@@goldmetal QustId는 잠깐 두고 현재 Quest Manager의 인스펙터 창에서 Quest Id를 확인했는데 시작하면 인스펙터창에서 10으로 설정되있는 Quest Id가 0으로 초기화되면서 게임이 시작되네요 게임 시작후 10으로 변경시 정상적으로 됩니다. 이건 무슨 오류가 있는건가요
@이지현-e1n7l
@이지현-e1n7l 4 жыл бұрын
게임을 빌드 후 실행해서 퀘스트를 조금 진행한뒤 저장하기를 누르고 Regedit에서 확인하면 playerx, playery, questid, questactionid전부 잘 들어가있는데 게임을 재실행하면 저장하고 끈 시점이 로드가 안되고 초기화면이 로드됩니다ㅠㅠ 코드는 여러번 확인해봤는데 똑같이 작성한것 같습니다! 왜그런걸까요ㅠㅠ
@goldmetal
@goldmetal 4 жыл бұрын
24:22 GameLoad() 함수에 Debug.Log("Game Loading.."); 한번 적으셔서 게임 시작 시 데이터를 불러오는지 확인해보세요
@이지현-e1n7l
@이지현-e1n7l 4 жыл бұрын
@@goldmetal Debug.Log 적고 저장하고 재시작해봤더니 콘솔창에 정상적으로 Game Loding...이 출력되긴합니다만, 아래에 KeyNotFound 오류가 같이 출력되네요ㅠㅠ PlayerPrefs.HasKey로 if조건문 달아놨는데도 뜨는 이유가 무엇일까요?
@goldmetal
@goldmetal 4 жыл бұрын
@@이지현-e1n7l 해당 Key이름으로 저장된 데이터를 찾을 수 없을 때 나오는 에러입니다. 데이터 저장할 때 사용한 Key이름 대소문자 같은지 확인해보세요
@이지현-e1n7l
@이지현-e1n7l 4 жыл бұрын
@@goldmetal 헐... 눈이 빠지게 코드 쳐다본 결과 questid를 저장할때 SetInt를 적어야하는것을 Float로 적어놨다는것을 발견했어요ㅋㅋㅋ 항상 감사합니다!!☺
@Al_KOR
@Al_KOR 4 жыл бұрын
버튼 4개를 만들었는데, 4개중에 하나만 버튼 상단 1/3 부분?만 클릭이 안되는데 뭐가 문제일까요ㅜㅜ
@goldmetal
@goldmetal 4 жыл бұрын
위에 다른 무언가 UI가 가려져있다면 클릭이 되지 않습니다. 투명한 Image 컴포넌트라던가 Text가 있다면 치우셔야 할거에요.
@네임-g6n
@네임-g6n 4 жыл бұрын
혹시 저장,로드예시 String 한 번만 해 주실 수 있으신가요,,?ㅠㅠ
@goldmetal
@goldmetal 4 жыл бұрын
PlayerPrefs 를사용하는 저장방법이라면 SetString, GetString을 사용하시면 됩니다. docs.unity3d.com/kr/530/ScriptReference/PlayerPrefs.html
@네임-g6n
@네임-g6n 4 жыл бұрын
@@goldmetal PlayerPrefs.SetString("RBpointA", RBpoint.text); PlayerPrefs.SetFloat("sliderA",slider.value); 이렇게 했을 때 슬라이더 벨류값은 잘 저장되고 불러와지는데 RBpoint값은 불러와지지 않습니다ㅠㅠㅠ 왜이럴까요ㅠㅠ
@goldmetal
@goldmetal 4 жыл бұрын
@@네임-g6n 일단 불러왔을 때 에러가 나오지 않으면 변수저장은 된 겁니다. 저장 당시에 RBpoint.text가 빈값인지 Debug.Log()로 확인해보세요.
@네임-g6n
@네임-g6n 4 жыл бұрын
@@goldmetal Debug.Log로 확인 해봤는데, 빈 값이 아닌데도 (세이브와 로드 둘 다 Debug.Log(RBpoint.text);를 했을 떄 저장한 값이 나왔습니다) 콘솔창에는 나오는데 실제 게임 화면에는 나오지 않습니다,,,,,,
@goldmetal
@goldmetal 4 жыл бұрын
@@네임-g6n 혹시 SetString 구문 이후 PlayerPrefs.Save();까지 하셨는지 확인해주세요.
@Al_KOR
@Al_KOR 4 жыл бұрын
메뉴가 떴을 때, 실행중인 게임 화면이 멈췄으면 좋겠어서 Time.timeScale을 썼는데 멈추질 않는데 혹시 다른 방법이 있을까요?
@goldmetal
@goldmetal 4 жыл бұрын
Time.timeScale = 0; 으로 해주시면 됩니다.
@Al_KOR
@Al_KOR 4 жыл бұрын
@@goldmetal 감사합니다. 팀원과 코드가 겹쳐서 적용되지않았던거 같습니다 ㅎㅎ
@영영-v2h
@영영-v2h 4 жыл бұрын
빌드하기 전에는 경계밖으로 안 나가지는데 빌드하면 나가지네요 뭐가 문제인가요?
@goldmetal
@goldmetal 4 жыл бұрын
이동을 transform을 하면 발생하는 문제입니다. www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=82113
@김사월-p6v
@김사월-p6v 3 жыл бұрын
저장하기를 누르면 창은 닫히는 데 저장이 안되는 것 같습니다. 레지스트리에 뜨지가 않네요. 디버그 로그를 넣어서 확인해보니 콘솔창에 아무것도 안뜹니다ㅠ 오류라도 뜨면 좋겠는데 오류도 안뜨고.. 뭐가 문제 일까요? public GameObject player; public Questmanager questmanager; public Image NPCimage; public Animator NPCAnim; public Talkmanager talkmanager; public Animator talkPanel; public TypeEffect Talk; public GameObject scanObjcet; public bool isAction; public int talkIndex; public Sprite prevNPCimage; public GameObject menuSet; public Text questText; void Start() { GameLoad(); questText.text= questmanager.CheckQuest(); } public void GameSave() { PlayerPrefs.SetFloat("playerX", player.transform.position.x); PlayerPrefs.SetFloat("playerY", player.transform.position.y); PlayerPrefs.SetInt("QustId",questmanager.questid); PlayerPrefs.SetInt("QustActionIndex", questmanager.questActionIndex); PlayerPrefs.Save(); menuSet.SetActive(false); // player.x // player.y // Quest id // Quest Action Index } public void GameLoad() { if (!PlayerPrefs.HasKey("playerX")) return; float x = PlayerPrefs.GetFloat("playerX"); float y = PlayerPrefs.GetFloat("playerY"); int questId = PlayerPrefs.GetInt("QustId"); int questActionIndex = PlayerPrefs.GetInt("QustActionIndex"); player.transform.position = new Vector3(x, y, 0); questmanager.questid = questId; questmanager.questActionIndex = questActionIndex; }
@goldmetal
@goldmetal 3 жыл бұрын
저장하기 버튼의 OnClick 연결 함수가 GameSave인지 확인해보세요
@김사월-p6v
@김사월-p6v 3 жыл бұрын
@@goldmetal 원클릭에 게임종료 처럼 게임메니저 넣고 (TalkText).GameSave와 창을 닫아야 하니 계속하기의 메뉴셋을 넣고 (GameObject).SetActive 이렇게 두개를 넣어 놨습니다. 만약 제가 넣은게 맞다면 UnassignedReferenceException: The variable player of TalkText has not been assigned. You probably need to assign the player variable of the TalkText script in the inspector. 라는 오류가 나오네요.
@goldmetal
@goldmetal 3 жыл бұрын
@@김사월-p6v 말씀하신 오류 메세지는 메뉴와는 관계가 없는 내용이네요. TalkText의 Palyer 변수 확인해보세요
@현나-n1h
@현나-n1h Жыл бұрын
빌드한 파일은 실행도 잘 되고 기능도 모두 정상적으로 돌아가는데 유니티 내에서는 플레이하면 캐릭터의 x,y 축 포지션이 모두 -1.309999로 이동하고 KeyNotFoundException: The given key was not present in the dictionary. System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at :0) QuestManager.CheckQuest () (at Assets/Script/QuestManager.cs:49) GameManager.Start () (at Assets/Script/GameManager.cs:27) 라는 오류가 뜨며 시작부터 에러가 나서 멈춥니다.. 오류나는 부분은 public string CheckQuest() { return questList[questId].questName; } void Start() { GameLoad(); questText.text = questManager.CheckQuest(); } 이 체크퀘스트 부분입니다. 캐릭터 이름 출력하려고 코드를 추가했고 저 부분은 건드리지 않았는데 왜 그럴까요..? 빌드한 파일은 또 잘 작동되니 이상합니다ㅠㅠ
@goldmetal
@goldmetal Жыл бұрын
대화 데이터를 Dictionary에 넣기도 전에 CheckQuest 가 실행되어서 그렇습니다. 대화 데이터가 다 넣어진 후에 CheckQuest가 실행되도록 하면 어떨까 합니다.
@바운티볼개발일지
@바운티볼개발일지 4 жыл бұрын
30분동안 버튼 안눌려서 뻘짓했는데 이벤트 시스템 없으면 버튼 안눌려지네요 번거로워서 지웠는데
@goldmetal
@goldmetal 4 жыл бұрын
네 그래서 UI를 처음 생성하면 Event System 오브젝트가 같이 생기는 이유입니다.
@바운티볼개발일지
@바운티볼개발일지 4 жыл бұрын
@@goldmetal 빌드하니까 대화는 가능하지만 플레이어를 제외한 스프라이트가 안보이는데 뭔지 아시나요
@이찬영-v6s
@이찬영-v6s 3 жыл бұрын
이상하게 저장만 안 되는데 어디가 문제인지 몰라서 구체적으로 물어볼 수가 없네요ㅠㅠ 죄송합니다ㅠ 저장버튼이 왜 안될까요?
@goldmetal
@goldmetal 3 жыл бұрын
저장버튼의 OnClick 이벤트 연결하셨는지 확인해보세요.
@이찬영-v6s
@이찬영-v6s 3 жыл бұрын
아..안했내요 OnClick은 어떻게 설정해줘야 하나요?
@goldmetal
@goldmetal 3 жыл бұрын
@@이찬영-v6s 게임매니저의 GameSave 함수와 연결시키면 됩니다.
@이찬영-v6s
@이찬영-v6s 3 жыл бұрын
@@goldmetal 감사합니닿ㅎ
@클립-c1d
@클립-c1d 2 жыл бұрын
저장버튼을 누를 때 GameSave함수가 적용되지 않습니다. public void GameSave() { if(!PlayerPrefs.HasKey("PlayerX")) { return; } PlayerPrefs.SetFloat("PlayerX", player.transform.position.x); PlayerPrefs.SetFloat("PlayerX", player.transform.position.y); PlayerPrefs.SetInt("QuestId", questManager.questId); PlayerPrefs.SetInt("QuestActionIndex", questManager.questActionIndex); PlayerPrefs.Save(); menuSet.SetActive(false); saveText.SetActive(false); Invoke("saveText", 5); } 이게 GameSave코드고 세이브 버튼 On Click부분에 Runtime Only,Gamemanager 삽입 후 Gamemanager.GameSave부분을 적용했습니다. 왜 안되는 걸까요? 오류가 발생하지는 않으니 버튼부분에 뭘 잘못넣은거 같은데...
@goldmetal
@goldmetal 2 жыл бұрын
if문에 걸려서 그런게 아닌 가 의심해봐야겠네요. 먼저 PlayerPrefs.SetFloat("PlayerX", player.transform.position.x); 위에서 Debug.Log("Saving..."); 한번 추가해보시고 버튼 테스트해보세요. 로그가 나타나지 않는다면 if문에 걸리는겁니다. 게임을 처음 실행 혹은 저장할 때는 PlayerPrefs에 저장할 Key,value 초기값을 미리 저장해두셔야 합니다. 여기서는 if문 안에 하면 좋겠네요.
@클립-c1d
@클립-c1d 2 жыл бұрын
@@goldmetal 감사합니다. if함수안에 플레이어의 x값과 y값을 미리 저장하니까 잘 해결되네요!
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
그냥 하면 세이브가 안되는데 On Click에 뭘 넣어야 하나요?
@goldmetal
@goldmetal 3 жыл бұрын
게임매니저 넣으시고 GameSave 함수 연결해주셔야 합니다.
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@goldmetal 감사합니다!
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@goldmetal 그런데 22:30 에 컴퍼니,프로젝트이름 파일에 들어가 보니까 아무파일도 없어요
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@goldmetal 맥이라 다른건가요?
@user-ek9dp4fu1s
@user-ek9dp4fu1s 3 жыл бұрын
@@goldmetal 아니면 코드가 틀린건가요? public void GameSave() { PlayerPrefs.SetFloat("PlayerX", player.transform.position.x); PlayerPrefs.SetFloat("PlayerY", player.transform.position.y); PlayerPrefs.Save(); menuSet.SetActive(false); } public void GameLoad() { if (!PlayerPrefs.HasKey("PlayerX")) return; float x = PlayerPrefs.GetFloat("PlayerX"); float y = PlayerPrefs.GetFloat("PlayerY"); player.transform.position = new Vector3(x, y, 0); } 에서 뭐가 틀렸나요?
@이수영-k4x
@이수영-k4x 4 жыл бұрын
코드 똑같이 작성했는데 ESC눌러도 창이안나와요ㅜㅜ 세팅에도 Cansel 있구요..ㅜㅜ 게임매니저에 적용도 했구요..
@goldmetal
@goldmetal 4 жыл бұрын
Cansel -> Cancel 입니다. 오타 확인해주세요.
@클라우드-s6p
@클라우드-s6p 4 жыл бұрын
라이선스 오류때문에 해보지도 못하고 있어..
@goldmetal
@goldmetal 4 жыл бұрын
여기 한번 참고해보세요. crecord.tistory.com/m/307
@클라우드-s6p
@클라우드-s6p 4 жыл бұрын
감사합니다
@영영-v2h
@영영-v2h 4 жыл бұрын
세이브 한거 어떻게 초기화 시켜요?
@goldmetal
@goldmetal 4 жыл бұрын
레지스크리에 저장된 값을 지우시면 됩니다. kzbin.info/www/bejne/o4rNhomjrNhlfJI
@codinglike
@codinglike 4 жыл бұрын
위치저장이 않되요ㅠㅠ 코드는여 저장코드 public void GameSave() { PlayerPrefs.SetFloat("PlayerX", player.transform.position.x); PlayerPrefs.SetFloat("PlayerY", player.transform.position.y); PlayerPrefs.Save(); menuSet.SetActive(false); } 불러오기 코드 public void GameLoad() { if (!PlayerPrefs.HasKey("PlayerX")) return; float x = PlayerPrefs.GetFloat("PlayerX"); float y = PlayerPrefs.GetFloat("PlayerY"); player.transform.position = new Vector3(x, y, 0); } void Start() { GameLoad(); }
@goldmetal
@goldmetal 4 жыл бұрын
GameSave()가 어디서 호출하는지가 중요하겠네요. 호출하는지 확인해보세요.
@codinglike
@codinglike 4 жыл бұрын
@@goldmetal 저장버튼에요
@codinglike
@codinglike 4 жыл бұрын
답변좀여;;
@goldmetal
@goldmetal 4 жыл бұрын
@@codinglike GameSave()에 Debug.log("SAVE") 넣어주시고 버튼 눌렀을 때 로그가 콘솔창에 나오는지 확인해보세요.
@codinglike
@codinglike 4 жыл бұрын
@@goldmetal 갑자기 저장이 잘되내요! 감사합니다!!!!!
@성이름-m7p7j
@성이름-m7p7j 2 жыл бұрын
22:00 오브젝트 참고
@better-programmer
@better-programmer 4 жыл бұрын
어! 저도 쿠키런 폰트쓰는데!
@포포-k2m
@포포-k2m 4 жыл бұрын
이름 만드는건 어디있나요....?
@goldmetal
@goldmetal 4 жыл бұрын
편집으로 생략된 모양입니다. 이미 각 NPC들은 오브젝트 스크립트에 의해 이름 정보를 가지고 있으니 이를 활용해서 Text에 넣어주기만 하시면 됩니다.
@rakiyu2693
@rakiyu2693 8 ай бұрын
이름이 왜나오지..?
@idd-el6sx
@idd-el6sx 7 ай бұрын
중간에 생략이 됐나봐요 ㅋㅋ 그래도 거기까지 진행하셨으면 텍스트 하나 만드셔서 위치 잡고, 컬러값 넣고, NPC 이름도 불러오고 하는 응용편이라고 생각하면 재미있더라구요. 저는 NPC 이름 텍스트를 하나 만들고 위치 잡고 ObjData에 public으로 NPCName과 Color 변수를 만들어주고 인스펙터창에서 값을 넣어준 후에 GameManager에서는 NPC이름을 넣어줄 Text를 public으로 연결시켜서 Action함수에 있는 ObjData에서 Npc이름과 컬러값을 바로 넣어줬네요 ㅋㅋ
@최명구-t3j
@최명구-t3j 3 жыл бұрын
9:40에 짧게 쓰고 싶으신 분들은 menu.SetActive(!menuSet.activeSelf); 이렇게만 해도 끄고 켜기는 돼요
@VintagesoUltree
@VintagesoUltree Жыл бұрын
KeyNotFoundException: The given key '0' was not present in the dictionary. System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) 이 오류 뜨시는 분들은 if(!PlayerPrefs.HasKey("PlayerX"))에서 PlayerX 또는 PlayerY 대신 QustId, QustActionIndex 같은 걸 넣어서 코드 실행해보세요. 게임 첫 실행단계에서는 GameLoad()함수가 실행이 되면 안되는데 특정 이유로 로드 함수가 실행되어서 QuestId의 default값인 0이 로드 되어서 생기는 오류 같습니다. void Start() { GameLoad(); /* Debug.Log(PlayerPrefs.HasKey("PlayerX")); Debug.Log(PlayerPrefs.HasKey("PlayerY")); Debug.Log(PlayerPrefs.HasKey("QustId")); Debug.Log(PlayerPrefs.HasKey("QustActionIndex")); */ Debug.Log(questManager.CheckQuest()); questText.text = questManager.CheckQuest(); } 별표친 부분 사이에 있는 코드 4줄 넣고 Console창 확인하시면 PlayerX,PlayerY는 True, QustId,QustActionIndex는 False가 나옵니다. 즉, 게임 첫 실행 단계에서는 저장된 Key가 없어야 정상인데 무슨 이유에서인지 PlayerX와 PlayerY는 Key가 있다고 인식을 하네요? 혹시 저장하지도 않은 상태에서 왜 PlayerX와 PlayerY만 Key를 갖고 있는지 아시는 분은 답글 달아주시면 감사하겠습니다!
@goldmetal
@goldmetal Жыл бұрын
한번 저장되면 계속 남아있어서 그렇습니다. Edit > Clear All PlayerPref 메뉴로 지워주세요
@VintagesoUltree
@VintagesoUltree Жыл бұрын
@@goldmetal 아하 감사합니다! 근데 혹시 PlayerX랑 PlayerY만 저장이 남는 이유가 있을까요?
@goldmetal
@goldmetal Жыл бұрын
@@VintagesoUltree 이전 플레이에서 그 두개만 저장된 상태에서 종료했다던가 여러가지 이유가 있을 수 있겠습니다.
@rianb6897
@rianb6897 2 жыл бұрын
골드메탈님 새벽까지 열심하고 있다가 .. npcName보여줄려고 설정하다가 뭘 잘못건들였는지 갑자기 에러가뜹니다 KeyNotFoundException: The given key '0' was not present in the dictionary. System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at :0) QuestManager.CheckQuest (System.Int32 id) (at Assets/Scripts/QuestManager.cs:44) GameManager.Talk (System.Int32 id, System.Boolean isNpc) (at Assets/Scripts/GameManager.cs:81) GameManager.Action (UnityEngine.GameObject scanObj) (at Assets/Scripts/GameManager.cs:53) PlayerAction.Update () (at Assets/Scripts/PlayerAction.cs:88) 저장까지 잘되다가 어딘가 잘못수정했나봅니다. 시작부터 에러가뜨며 대화를 하면 TalkIndex가 ++ 되다가 대화가 끝나면 0이되는데 이때 대화창이 안내려가고 무한반복합니다..
@rianb6897
@rianb6897 2 жыл бұрын
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GameManager : MonoBehaviour { public TalkManager talkManager; public QuestManager questManager; public Animator talkPanel; public Animator portraitAnim; public Image portraitImg; public Sprite prevPortrait; public TypeEffect talk; public Text questText; public GameObject menuSet; public GameObject scanObject; public GameObject player; public bool isAction; public int talkIndex; void Start() { GameLoad(); questText.text = questManager.CheckQuest(); } void Update() { //Sub Menu if (Input.GetButtonDown("Cancel")) { if (menuSet.activeSelf) menuSet.SetActive(false); else menuSet.SetActive(true); } } public void Action(GameObject scanObj) { //Get Current Object scanObject = scanObj; ObjData objData = scanObj.GetComponent(); //Set Talk Text Talk(objData.id, objData.isNpc); //Visible Talk for Action talkPanel.SetBool("isShow", isAction); } void Talk(int id, bool isNpc) { //Set Talk Data int questTalkIndex = 0; string talkData = ""; if (talk.isAnim) { talk.SetMsg(""); return; } else { questTalkIndex = questManager.GetQuestTalkIndex(id); talkData = talkManager.GetTalk(id + questTalkIndex, talkIndex); } //End Talk if(talkData == null) { isAction = false; talkIndex = 0; questText.text = questManager.CheckQuest(id); return; } //Continue Talk if (isNpc) { talk.SetMsg(talkData.Split(':')[0]); //Show Portrait portraitImg.sprite = talkManager.GetPortrait(id, int.Parse(talkData.Split(':')[1])); portraitImg.color = new Color(1, 1, 1, 1); //Animation Portrait if(prevPortrait != portraitImg.sprite){ portraitAnim.SetTrigger("doEffect"); prevPortrait = portraitImg.sprite; } } else { talk.SetMsg(talkData); //Hide Portrait portraitImg.color = new Color(1, 1, 1, 0); } //Next Talk isAction = true; talkIndex++; } public void GameSave() { PlayerPrefs.SetFloat("PlayerX", player.transform.position.x); PlayerPrefs.SetFloat("PlayerY", player.transform.position.y); PlayerPrefs.SetInt("QuestId", questManager.questId); PlayerPrefs.SetInt("QuestActionIndex", questManager.questActionIndex); PlayerPrefs.Save(); Debug.Log("SAVE"); menuSet.SetActive(false); } public void GameLoad() { if (!PlayerPrefs.HasKey("PlayerX")) return; float x = PlayerPrefs.GetFloat("PlayerX"); float y = PlayerPrefs.GetFloat("PlayerY"); int questId = PlayerPrefs.GetInt("QuestId"); int questActionIndex = PlayerPrefs.GetInt("QuestActionIndex"); player.transform.position = new Vector3(x, y, 0); questManager.questId = questId; questManager.questActionIndex = questActionIndex; questManager.ControlObject(); } public void GameExit() { Application.Quit(); } } 혹시 모르니 코드 첨부합니다.. 힘이 쭉 빠지네요
@rianb6897
@rianb6897 2 жыл бұрын
TalkManager도 첨부합니다 둘중한곳에서 분명히 문제가 발생한듯 싶네요.. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TalkManager : MonoBehaviour { Dictionary talkData; Dictionary portraitData; public Sprite[] portraitArr; void Awake() { talkData = new Dictionary(); portraitData = new Dictionary(); GenerateData(); } // Update is called once per frame void GenerateData() { talkData.Add(1000, new string[] { "안녕?:0", "이 곳에 처음 왔구나?:1"}); talkData.Add(2000, new string[] { "어머 브라이언:1", "진짜 오랜만이다 잘 지냈어?:0" }); talkData.Add(3000, new string[] { "오우쉣 브라이언:0", "오늘 신문지 확인해봐 대박이야.:1" }); talkData.Add(4000, new string[] { "신문지다.", "오늘은 무슨일이 있었는지 확인해볼까?"}); //Quest Talk talkData.Add(10 + 3000, new string[] { "어서와.:0", "여기는 우크라이나 수도 키예프야:1", "여기 오른쪽 남자애는 알렉스야. 이곳에 대해 알려줄꺼야.:0" }); talkData.Add(11 + 2000, new string[] { "어 안녕 너가 브라이언이구나?:0", "요즘 러시아랑 굉장히 문제가많아서 말이야.. 좀 바빠:1", "곧있으면 우크라이나 모든 남자들이 징집된다는 소문이있어.. 전쟁은 무서운데..:0" }); talkData.Add(20 + 1000, new string[] { "하트?:0", "하트가지러가자:1", "근처에있어:0" }); talkData.Add(20 + 2000, new string[] { "찾으면 꼭 가져다 줘:0" }); talkData.Add(22 + 200, new string[] { "하트를 찾았다." }); talkData.Add(23 + 2000, new string[] { "엇, 찾아줘서 고마워.:0" }); portraitData.Add(3000 + 0, portraitArr[0]); portraitData.Add(3000 + 1, portraitArr[1]); portraitData.Add(1000 + 0, portraitArr[2]); portraitData.Add(1000 + 1, portraitArr[3]); portraitData.Add(2000 + 0, portraitArr[4]); portraitData.Add(2000 + 1, portraitArr[5]); } public string GetTalk(int id, int talkIndex) { //key가없으면? if (!talkData.ContainsKey(id)) { if (!talkData.ContainsKey(id - id % 10)) //해당 퀘스트 진행 순서 대사가 없을 때 //퀘스트 맨 처음 대사를 가지고 온다. return GetTalk(id - id % 100, talkIndex); //Get First Talk else return GetTalk(id - id % 10, talkIndex); //Get First Quest Talk } //get talk 로직. if (talkIndex == talkData[id].Length) return null; else return talkData[id][talkIndex]; } public Sprite GetPortrait(int id, int portraitIndex) { return portraitData[id + portraitIndex]; } }
@rianb6897
@rianb6897 2 жыл бұрын
int questTalkIndex = 0; string talkData = ""; 이곳에서 두개다 불필요한 값을 해당하고있다고 하는데.. 뭐가 문제인지 ..
@rianb6897
@rianb6897 2 жыл бұрын
막상 빌드하면 정상적인데 이러면 유니티에서 테스트를 못하고 계속 빌드하면서 테스트 해야할까요..
@goldmetal
@goldmetal 2 жыл бұрын
퀘스트매니저의 questList[questId].npcId[questActionIndex] 에서 문제가 발생하는 것 같네요. questId 를 의도적으로 0을 만드는 곳이 있는지 확인해봐야겠습니다. 모르시겠다면 프로젝트를 통으로 zip 파일 압축하셔서 gold_metal@naver.com 로 보내주세요. 점검해드리겠습니다.
Random Emoji Beatbox Challenge #beatbox #tiktok
00:47
BeatboxJCOP
Рет қаралды 51 МЛН
Seja Gentil com os Pequenos Animais 😿
00:20
Los Wagners
Рет қаралды 89 МЛН
Triple kill😹
00:18
GG Animation
Рет қаралды 17 МЛН
1일 1식으로 하드 모드 생존! ㅋㅋ / 60seconds
17:41
*아무것도 누르면 안되는 게임*
18:55
우주하마
Рет қаралды 1,7 МЛН
주인공 이름부터 스포일러인 게임
50:46
침착맨 플러스
Рет қаралды 539 М.
샤오샤오 시리즈 한 눈에 모아보기! (추억의 플래시게임)
18:48
Random Emoji Beatbox Challenge #beatbox #tiktok
00:47
BeatboxJCOP
Рет қаралды 51 МЛН