안녕하세요 오랜만에 인갤에 방문했는데
궁금한게 생겨서 질문글을 씁니다
현재 하스스톤같은 카드게임을 만들고 있고
카드 특수효과를 제외하면 왠만한 기능은 만들어진거 같아요
(아직 추가적으로 해야할게 있긴한데..대충은..!)
그래서 카드 추가효과 같은걸 구상하면서 개인적인 욕심으론 포톤서버같은것도 붙여보고싶은데요
제가 서버를 전혀모르는지라 그냥 지나가는 지식으로 멀티스레드로 보통 로딩화면같은거 구상하니까
서버를 연동시키려면 멀티스레드 공부도 해야하나? 이런생각이 스쳐지나가듯이 들어서
일단 동기, 비동기의 차이점 쓰레드의 기원 등등 영상보면서 간단히공부하고 있는데,
일단 저는 목표가 이 카드게임을 빨리 만들고 싶다 이다보니 멀티스레드가 꼭 필요할까? 라는 생각이 들어서
인붕님들께 여쭈어보려고 글을 쓰게 됬습니다
인터넷에 구글링해도 멀티스레드가 온라인게임에서 필수인지 아닌지에대한 정보는 안보이고 그냥 멀티스레드에 대한 설명같은거 위주라
한번 여쭈어보고 싶어졌습니다(제가 무지해서 그냥 당연한건데 모르고 물어보는것일수도 있습니다 ㅎ;)
p.s.하스스톤도 카드만의 독자적인 효과가 있을텐데(이 카드 출현시 하수인 공격력 +2 같은)
이런건 어떻게 구현하면 좋을까요? 카드이름으로 string리스트를 만들고 이름을 통해 찾은후 그 이름의 카드가 있으면 해당 함수 실행 이런식으로 생각하고 있는데
더 좋은 방법이 있을까용..?
P2P 방식인가요? 사용하는 엔진은요?
유니티 사용하고있고P2P는..아직 잘 모르겠어요..그냥 생각만하고 고려해보려고 하는거라
만들어보면 멀티쓰레드라 할지라도 추후엔 단일쓰레드로 작업하는 형태로 구현됩니다. 안그러면 머리가 깨져서 컨텐츠 구현이 안됩니다. 보통 카드게임의 경우 지연에 덜 민감하고 stateless 성질이 강하므로. 즉 node.js - Socket.io 같은 그런거 쓰셔서 구현하셔도 됩니다. stateless가 강하다는 의미는 분산서버 처리가 간단하다는 것이며, node.js를 여러개 뛰움으로 멀티쓰레딩 효과를 낼수도 있을거에요.
음..node.js나 Socket.io란게 뭔지 잘 몰라서..함 검색해봐야겠네요
필수라고 봐야지.. 네트워크 통신하는 동안 게임 멈추게 할 게 아니라면
아하..그렇군요 통신하는동안 아예 멈추게 되버리는군요..동기가 되면..
게임 엔진을 쓰고 있다면 특별히 멀티스레드 이슈는 신경쓰지 않아도 될듯..
일단 되는대로 해봐.. 별로 상관없어보임
넹!
온라인게임에 멀티스레드가 필수냐고 물으면 필수임 온라인 게임을 만드는데 멀티스레드에 대한 이해가 필수냐고 물으면 그건 아님. 어차피 카드게임이어도 NPC랑 튜토리얼하고 싸우는 건 있을 거 아냐 일단 싱글게임처럼 거기까지만 만드셈 이후에 멀티로 만들때는 포톤엔진같은거 쓰면 방을 만들고 방에 유저들이 조인하고 그방에 조인한 유저들의 화면에서 어떤것들을 동기화할지 선택하면 동기화 대상들은 그 방에 있는 모든 유저에 화면에서 똑같이 움직이고 아닌 것들은 각 화면에서 따로 움직인다. 이정도 이해만 있어도 됨.
일단 싱글게임 기반으로 대충 만든 AI가 있긴해용(그냥 아무 카드 룰 어긋나지 않는 선에서 막 냄) 승리, 패배 ui까지 띄우는것도 다 되있구요 왠만한 게임구조는 다 맞춰졌고 카드 특수효과 구현만 남은상태에요(싱글기준) 음..그러면 멀티스레드 보다는 포톤을 공부해보는게 맞겠네요 안그래도 지금 포톤 튜토리얼 메뉴얼 읽고있어요! 조언 감사합니다
node.js 초장기때는 기술 기반이 확립되지 않아 많은 영세 업체들이 문자 그대로 싱글스레드에서 서버를 운용하곤 했는데, 다중스레드에 준하는 비동기적 구현을 위해 얼마나 많은 이들이 피땀 흘렸는지 알 사람은 알거다. 그 특유의 콜백지옥은.. 정말... ..
게임 서버라는게 크게 3가지 종류가 있는데, 실시간 서버, 세션 서버, 비동기 서버가 있음. 여기서 실시간 서버(MMO 서버)와 비동기 서버(모바일 게임 서버)는 하나의 서버로 최소 수백 수천명의 유저를 감당해야하기 때문에 멀티쓰레딩이 중요한데 세션 서버(롤과 같이 소수의 인원들이 서로 플레이하는 서버)는 게임에 따라서 싱글스레드여도 괜찮습니다
님이 만드시는 카드 게임은 세션 서버에 속하기 때문에 멀티스레딩이 필요 없다고 할 수 있겠습니다. 다만 게임 내 재화나 상점 시스템과 같은 메타프로그레션 시스템은 비동기 서버로 굴려야하기 때문에 서버를 만든다면 돈 절약을 위해 멀티쓰레딩이 필요하죠 아니면 그냥 뒤끝같은 SaaS들을 사용해도 되고...
tcp 세션이 몬가요 ?.?
여기서 세션이 그 tcp 세션이 아니라 시작과 끝이 정해지는 "매치" 개념이 있는 게임을 말합니다 카드 게임은 시작과 끝이 있으니 세션이죠, 블루아카이브는 서버가 (가능하면) 영원히 떠있으므로 세션이 아닙니다
게임 세션 서버 검색해보면 조금 자료가 나올거에요
아하 그렇군요..설명감사합니다 많이 배우네요. 저는 포톤 Pun2라는 유니티 서버 에셋을 사용할 생각이에요 포톤이 어떻게 만들어진 서버인진 모르겠는데 일단 예제랑 설명 홈페이지에서 보고 따라해보고 본 카드게임에 적용해 볼까 합니다 재화나 상점은 안만들거고 카드도 덱짜기 씬에서 그냥 카드를 상점을 통해 뽑는게아니라 전체카드리스트 보여주고 원하는거 골라담아 짜게 하려고합니다
그렇다면 멀티스레딩 신경 안써도 될 것 같습니다 세션 서버같이 소수의 인원만 있는 서버는 멀티스레딩을 하더라도 절약되는 비용이 사실상 없어서 굳이 개발 비용 더 들여서 만들 필요 없어요
오우;;칼답변 감사합니다 그럼 멀티스레드를 크게 신경안쓰고 제가하려는 서버에셋만 공부해보면 되겠네요 좀 덕분에 마음이 편안해졌습니다ㅎㅅㅎ
온라인게임하는데 멀티스레드 필수냐고? 필수일수도 있고 아닐수도. 너라면 8코어짜리 컴퓨터 8대에 싱글코어 서버를 돌릴래 아니면, 컴퓨터 2대에 멀티코어 서버 돌려서 비용아낄래?
오..이렇게 설명해주시니 대충 멀티스레드의 필요성과 이유에 대해선 이해가 되네요
카드게임 같은거라면 MMO처럼 멀티쓰레드 필수가 아니라 그냥 싱글 서버 여러개 띄우는 방식으로도 가능할거에요 - dc App