한때 오랫동안 리니지를 즐겼던 유저로써 리니지1의 이동은 어떤식으로 구현되었을까요? 리니지에서 이동중에 서버렉이 걸리면 케릭터가 찍은 좌표로 클라의 케릭터는 계속 걸어갑니다. 렉이걸린시점부터의 클라시점 밖의 NPC나 몬스터는 표시가 안되고 렉이 풀리면 클라 포지션이 렉이 걸린 시점의 포지션으로 순간이동하는 렉이 있었는데요 통신이 안되도 케릭은 일정타이밍까지는 이동이 됩니다. 그러타면 서버에서는 도착좌표만 주고 클라에서 보간처리로 이동을 한다는 말이될것같은데 그렇게 따지면 클라의 보간처리로 이동한다면 다른 케릭에의해서 길이 막혔을 때 처리가 안될것 같습니다. 지금 프로젝트의 구현과 리니지1의 이동 동기화의 차이점도 궁금합니다.
안녕하세요. 최근에 배우고 있는 수강생 입니다. 오류에 관한 질문이 있습니다. 강사님의 배우는 대로 코드를 작성했는데 NullReferenceException라는 오류 문자가 나왔습니다. 다시 코드를 작성 했는데 오류문자가 사라지지 않습니다. 어디가 문제인지 모르겠습니다.
session방식이 아닌 토큰방식을 쓰는데 유저 요청시 정보를 매번 DB에서 긁어와야 할까요? 아니면 Service마다 accountId를 키로해서 각 유저 정보를 저장해놓고 사용하는게 좋을까요? 메모리에 일부 정보를 저장해 두었다가 유저 요청시, DB에 접근하지 않고 검증할 수 있는 부분은 메모리 단에서 거르는 방식으로 DB접근 오버헤드를 줄이면 좋을거 같은데 유저 정보를 메모리에 들고있는다고 하면 Stateful방식을 쓰지 Stateless방식을 쓰는 이점이 있나 해서 질문드립니다
퀘스트 시스템에 같은 코드네임의 퀘스트의 누적 클리어 횟수를 넣어주려고 하는데 어떻게 해야할까요 저장할때 가져오는 퀘스트는 클론이라 퀘스트에 정수 변수를 만든다음 추가하는 방식이 불가능하고 퀘스트가 저장될때마다 private JArray CreateSaveDatas(IReadOnlyList<Quest> quests, string key) { // 기존 데이터 로드 JArray saveDatas = LoadExistingSaveData(key); // 기존 세이브 파일에서 JArray 로드 foreach (var quest in quests) { Debug.Log("before " + quest); if (quest.IsSaveable) { Debug.Log("after " +quest); QuestSaveData saveData = quest.ToSaveData(); // 기존 데이터에서 같은 codeName 찾기 var existingData = saveDatas.FirstOrDefault(item => item["codeName"]?.ToString() == saveData.codeName); // 누적 퀘스트 카운트 계산 saveData.questClearCount = GetQuestClearCount(saveDatas, quest.CodeName); if (existingData != null) { saveData.questClearCount++; // 기존 데이터 갱신 existingData["questClearCount"] = saveData.questClearCount; } else { // 새 데이터 추가 Debug.Log("처음"); saveDatas.Add(JObject.FromObject(saveData)); } // 현재 퀘스트의 카운트 업데이트 quest.questClearCount = saveData.questClearCount; } } return saveDatas; } private JArray LoadExistingSaveData(string key) { if (File.Exists(saveFilePath)) { // 파일에서 JSON 데이터를 읽어옵니다. string jsonString = File.ReadAllText(saveFilePath); var root = JObject.Parse(jsonString); // 저장된 특정 경로 데이터(JArray)를 반환 if (root[key] != null) { return (JArray)root[key]; } } // 기존 파일이 없거나 해당 키가 없으면 빈 JArray 반환 return new JArray(); } private int GetQuestClearCount(JArray saveDatas, string codeName) { // JArray에서 해당 codeName을 가진 항목 찾기 var questData = saveDatas.FirstOrDefault(item => item["codeName"]?.ToString() == codeName); // 항목이 존재하고 "questClearCount"가 있을 경우 반환 if (questData != null && questData["questClearCount"] != null) { return (int)questData["questClearCount"]; } // 항목이 없거나 "questClearCount"가 없는 경우 기본값 반환 Debug.LogWarning($"Quest with codeName '{codeName}' not found or questClearCount is missing."); return 0; }기존의 세이브파일에서 참조해서 추가하는 방식으로는 다른요소로 저장할때마다도 추가가 됩니다. 계속 어떻게 수정해야할지 고민중이긴한데 어떻게 해야할지 모르겠습니다. 저장할 퀘스트의 id를 퀘스트DB에 있는 id와 비교해서 원본 퀘스트를 찾은 다음 그 퀘스트를 가져와서 원본 퀘스트의 변수를 수정해주는 방식이 좋을까요
안녕하세요. 덕분에 재미있게 공부중입니다. example 폴더에 있는 기존 스크립트 들에서 전역에 변수를 지정후 사용을 안할경우 워링이 뜹니다. 문제는 워링이 뜨던 스크립트를 게임오브젝트에서 연동 제외하고 새로 게임오브젝트에 다른 스크립트를 연동해도 기존에 스크립트에 오류뜨던게 같이 뜹니다. 맞는건가요? 지역변수는 상관없고 전역변수에서만 워닝이 뜨네요. 프로젝트 폴더에 있는건 유니티에서 상시 다 읽어들인다고 보면 될까요?
안녕하세요. 강의를 보다가 퀘스트 관련해서 몇가지 궁금한 점이 생겨 글을 남깁니다. QuestTask 정보를 string화 해서 DB에 저장하시던데, 저럴 경우 운영적인 측면에서는 이슈가 없을까요? (DB 마이그레이션이라던지) Dialogue의 진행은 클라이언트에서 진행되고 Dialogue가 완료되면 Interaction을 서버로 요청하던데, 이럴 경우 클라에서는 Dialogue가 진행됐지만 서버에서 실패할 수 있는 상황이 생길 것 같은데요. Dialogue 같은 건 원래 클라이언트가 주도적으로 진행을 하나요? 일반적인 MMO를 보면 Quest가 완료된 후에 Dialogue가 출력되거나 Npc가 특정 위치로 이동을 하거나 특정 지역으로 Pc가 Teleport를 하는 등 서버에서 동기화를 맞출필요가 있는 일들이 여럿 발생하던데.. 이런 처리는 일반적으로 어떻게 구현 할까요? 언제나 좋은 강의 감사드립니다~
안녕하세요! 강의를 시청하면서 가챠시스템을 배웠는데요 다름이 아니라 클라이언트에서만 가챠시스템을 운용한다면 위조나 보안에 취약하다는 생각이 들었습니다 따라서 앞서 배운 강의내용인 파이어베이스와 연동을 해서 가챠시스템을 연동하면 좋겠단 생각을 했는데 그럴 경우, 어떤 식으로 내용을 구성해야 효율적으로 관리할 수 있을지 의견을 여쭙고자 합니다.
안녕하세요. 게임 구현 중에서 일부분적으로 이해가 안되는 부분이 있어서 강의 학습을 시작하였습니다. 다 따라쳐서 하는 기초 목적으로 수강하지 않아서, 일단 유니티 에디터에서 플레이는 되게하고 응용해보고 싶은데요. 강의 종료 후 제공된다고 글이 있는 것 같은데요.. 지금 커리큘럼이 출시?로 보이는데 다 끝난건지, 소스 코드가 언제 제공되는지 궁금합니다 ...
섹션 4 Project M1 - 성장 컨텐츠 제작(재화, 성장, 아이템, 퀘스트, ...) 에속한 SaveData, HeroList, ItemData, ItemHolder 이쯤부터 전부 재생이 안됩니다. 꽤 종종 이런 재생 오류 문제가 발생합니다. 한주에만 이런문제를 겪은게 3회정도 된거같습니다. 다음날 재생하면 또 되는경우가 존재하고, 너무 불편합니다. 인프런 운영사분들 제발 쾌적한 재생환경을 부탁드려요 .. 강의듣는 와중에, 흐름이 끊길때마다 너무 불편합니다... 강의는 잘듣고 있습니다..
안녕하세요 강의를 이제 막 듣기 시작하면서 가능할까 의문이 들어 질문 드립니다. 우선 제가 만들고자 하는 게임이 비대칭 vr 같이 vr과 데스크탑(모니터, 키보드, 마우스 ) 조작으로 2인 로컬플레이 게임을 만들고자 합니다. 먼저 드는 생각은 일단 vr 기능으로 만든 플레이어에 키보드 마우스로 플레이하는 플레이어와 이 플레이어에 해당하는 카메라를 추가해서 2인이서 플레이할 수 있도록 만들 생각중인데 vr 기기와 컴퓨터 화면, 키보드 마우스 입력으로 동시에 플레이하는게 가능할까요?
제가 강의를 놓친걸수도 있는데 질문드려서 죄송합니다. 스포닝풀을 스크립터블 오브젝트로 관리하는데 (M1 에서는 타일맵에 찍어서 관리 했었던걸로 기억합니다) 스크립터블 오브젝트로 Pivot PosX , Pivot PosY 를 어떻게 직관적으로 보고 작업 할수 있나요? 그냥 찍어서 좌표 확인하는건지 아니면 더 편한 방법이 있는건지 궁금해서 질문남겨요
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
루키스님 안녕하세요. 한 달 전에 올린 질문에 추가 질문드립니다. 서버는 C++, 클라이언트는 유니티 조합으로 준비하고 있다는 질문이었고, 루키스님이 답변을 해주셨었습니다. 그 답변 이후로 열심히 C++ 서버 공부하고 있어요. 오늘 들어와서 답변을 다시 살펴보니까, C# 강의에서 들어야 할 강의 중에, C# Part4 게임 서버도 써주셨더라고요. C++ 서버만 듣는 건 부족해서 C# 서버도 들어보라고 하신 걸까요~? 아니면 강의 마지막에 유니티 연동 관련한 부분 때문에 그러신 걸까요~? C++ 서버 강의 너무 좋은데 완강하는데 많은 시간이 걸려서 살짝씩 멘탈이 흔들리지만 다잡으면서 가고 있습니다. 늘 좋은 강의 감사합니다.
이전까진 문제없이 잘 이해하고 코드도 실행되었습니다. 그런데 [ 로비생성] 강의를 보고 따라했더니 오류가 발생했습니다. Unity.Services .Lobbies.LobbyServiceException: lobby code 'BARB6QOAUYDBBMLVUPZQBE' contains an invalid character 'O' (U+004F) at index 6 ---> Unity.Services .Lobbies.Http.HttpException`1[ Unity.Services .Lobbies.Models.ErrorStatus]: (400) HTTP/1.1 400 Bad Request ...생략 ... ... 호스트는 잘 만들어지는데요, 다른 플레이어로 조인하려고 하면 저런 빨강 글씨의 오류가 발생합니다. 인터넷에 찾아보니 외국 포럼만 나오는데요, 버그같기도 하고 그러네요. 제가 고치기 힘들어서요. 혹시 중간강의에서 코드를 통째로 올려주실 수 있나요? 저 오류때문에 코드를 실행하진 못하고, 코드 따라치면서 논리만 이해하는 식으로 공부하고 있습니다. 코드를 실행하면서 게임을 돌려보는 실습까지 해보면 재밌긴 하겠지만요. 강의는 재밌게 잘 보고 있는데, 저 오류가 아쉽네요.