[UGDG 사랑] 유니티+MagicOnio+Docker에서 미니어처 RTA를 혼자 만들어요.
15173 단어 C#UnityDockerMagicOniongRPC
이 글은 Unity 게임 개발자 협회 Advent Calendar 2021 14일째 되는 글이다.
어제는 Seaees 모뎀과 같은 한 해를 되돌아보다!
메리 크리스마스!여러분 유닛이에요?
이번에는 Docker든 Magic Onion이든 서버 쪽에서 경험이 없던 제가 임진마총 지식으로 얼마나 간단한 서비스를 할 수 있는지 이런 게임을 적어봤습니다.RTA라고 하지만 누구와 경쟁하는 것도 아니고 서두르는 것도 아니다.자유자재로 혼자 하다.
기술적인 것도 쓰겠지만 이 기사에서 얻을 수 있는 게 많지 않다고 생각해서 양해부탁드립니다.
※ 다시 한 번 말씀드리지만, 서버, 통신, Docker 등의 경험이 없기 때문에 대추를 통째로 삼키지 마세요.
날과 씨
옛날에 대학 다닐 때 유니티 포톤(PUN2)을 배웠어요.
그리고 비슷한 시기에 친구가 RTA에서'스피드 버튼 웹 서비스 제작'을 했기 때문에 나도 유니티와 포톤에서 똑같은 일을 했다.
(위의 이미지는 RTA를 전송하는 모습입니다. 시간은 1시간 8분 11초입니다.)
그 외에도 금방 완성돼서 기분이 좋아서 RTA를 혼자 할까 말까 고민했어요.
목표로 삼다
그리고 Docker와 GCP로 온라인화할 수 없을 것 같아서 처음으로 Docker를 사용해 봤습니다.(GCP가 폐기되었기 때문에 로컬 호스트)
만든 물건
이것은 우리가 즉시 한 것이다.( https://github.com/euglenach/OnlineVote )
(스팸코드를 대량 생산해 보여드리기가 쑥스럽습니다)
연말이라 빨리 누르기 버튼 같은 놀 수 있는 도구를 만들려고 이번에 온라인 투표 애플리케이션을 만들었다.게임 같은 파티 게임을 해보고 싶어요.
급하게 하는 건 아니지만 UI 같은 건 예뻐지고 싶은 생각은 전혀 없어요. 용서해 주세요...
①방 이름, 사용자 이름, 질문자 또는 답변자를 입력하여 방에 입장/제작
② 질문자가 질문과 옵션을 입력한다
어쨌든 쉼표로 구분을 선택하면 최대 4개까지 로그인할 수 있다.
③ 응답자가 질문에 선택 버튼을 누른다
④ 질문자는 투표를 기다린다
⑤ 합계 버튼을 누르면 결과 표시
네, 이번에 한 게 이거예요. 이것밖에 없어요.
질문하고 설문조사 통계를 내는 것뿐이다.
방법은 매우 간단하다.이 정도면 됐어.
MagicOnion과 Docker를 사용할 수 있어서 만족합니다.
결실
시작 시간과 종료 시간은 다음 텍스트 파일에git를 작성하고 이 시간 안에 측정합니다.
결과는...
시작 시간 12월 12일 22시 14분.
종료 시간 12월 13일 13시 28분.
개개
$\huge{>15 시간 14 분 읺$
$\huge{ ̄Y ̄Y ̄Y ̄Y ̄Y ̄}$
싫지 않아!!!무슨 말인지 모르겠어!!!!!!!!
이런 거북이처럼 노르마의 이유가 됐어요.
AddTo를 잊어버렸어요. 습관적으로 Subscribe 뒤에 썼는데 왠지 한 군데만 안 써져요.몇 년을 건드려도 인간 오류가 발생하기 때문에 로슬린 애널리즈를 영입하기로 했다.사람이 잠을 자지 않으면 안 된다.
컨디션
다음은 기술적인 이야기입니다.
클라이언트와 서버의 구축은 Unity + .NET Core+MagicOniov3 환경 구축의 글을 참고했다.감사합니다.
MagicOnion 사용
이번에 서버 코드를 거의 쓰지 않았지만 C#로 서버를 쓰는 전대미문의 경험을 할 수 있어서 감동적이었습니다.
업무와 서버를 쓰겠다고 했지만 실시간 통신을 쓰지 않아 즐거웠다.
처음 사용하는 거라 걸려 넘어질 때도 있어요.
이 게임(시도)두 개의 통신을 대략적으로 나누어 쓰는 처리가 필요하다.
일치 및 게임
처음에는 서버든 클라이언트든 따로 썼어요.
통신 클래스 일치
class MatchingRPC : IMatchingReceiver{
private IMatchingHub matchingHub;
// 略...
네트워킹 게임class QuestionRPC : IQuestionRecieiver{
private IQuestionHub questionHub;
// 略...
그리고 서버에도 이런 반이 있어요.여러분들은 전문적인 매직온 튜브에 익숙하실 거라고 생각합니다.
MacchingRPC 클래스와 통신하는 서버
public class MatchingHub : StreamingHubBase<IMatchingHub,IMatchingHubReceiver>, IMatchingHub{
IGroup room;
// 略...
QuestionRPC 클래스와 통신하는 서버public class QuestionHub : StreamingHubBase<IQuestionHub,IQuestionHubReceiver>, IQuestionHub{
// 略...
그러나 이렇게 하면 MatchingHub류만 알고 있다IGroup
QuestionHub류는 접근할 수 없고 방송할 수 없다.이거 어떡해?나는 도중에 반드시 그것을 해결해야 한다는 것을 발견했다 (늦게)한두 시간쯤 어떻게 할지 생각했는데 해결이 안 돼서...결국 이 두 가지를 결합시키기로 했다.
그리고 이런 StreamingHub/Receiver가 터졌어요...
using System.Threading.Tasks;
using MagicOnion;
using ServerShared.MessagePackObjects;
namespace ServerShared.StreamingHubs{
public interface IGameHub : IStreamingHub<IGameHub,IGameReceiver>{
/// <summary>
/// ゲームに接続することをサーバに伝える
/// </summary>
Task JoinAsync(string roomName,Player player);
/// <summary>
/// ゲームから切断することをサーバに伝える
/// </summary>
Task LeaveAsync();
/// <summary>
/// 質問したことをサーバに伝える
/// </summary>
Task QuestionAsync(Question question,Player player);
/// <summary>
/// 選択肢を選んだことをサーバに伝える
/// </summary>
Task SelectAsync(int index,Player player);
/// <summary>
/// 集計結果をサーバに伝える
/// </summary>
Task ResultAsync(QuestionResult questionResults,Player player);
}
public interface IGameHubReceiver{
/// <summary>
/// 誰かがゲームに接続したことをクライアントに伝える
/// </summary>
void OnJoin(Player player);
/// <summary>
/// 誰かがゲームから切断したことをクライアントに伝える
/// </summary>
void OnLeave(Player player);
/// <summary>
/// 質問したことをクライアントに伝える
/// </summary>
void OnQuestion(Question question);
/// <summary>
/// 選択肢を選んだことをクライアントに伝える
/// </summary>
void OnSelect(int index);
/// <summary>
/// 集計結果が来たことをクライアントに伝える
/// </summary>
void OnResult(QuestionResult questionResults);
}
}
또 하나 망설이는 것은 서버가 부르는 클라이언트 방법의 처리 방법이다.I~~HubReceiver
그것만 받아들일 수 있기 때문에 그 방법IObserver<T>.OnNext
또는 Pub/Sub
에서 사용한다.상술한
IGameHubReceiver
의 예를 들어 이 반resultStream.OnNext();
과 같은 모든 방법을 실시했다.또 하나 자주 있는 강좌에 따라 진행하면
IGameHubReceiver
외부에 공개되기 때문에 IObservable여기에 쓰인 말은 매우 길기 때문에 코드는 아래의 링크를 밟으세요.
지금 나는 이렇게 하면 Pub/Sub가 더욱 수월할 것이라고 생각한다.
메시지 피프 같은 건 거의 안 건드려봐서 해봤는데...
Docker 사용
Docker.전혀 손대지 않은 Docker.드디어 맛을 보았다.
Docker 만지기 전에 아무것도 몰랐던 제 모습입니다.
이 RTA를 하기 전에 해 봤는데 고민하면서 Build→Run을 했어요.
나는 매우 기쁘다.길드 슬랙에서도 그런 기쁨을 보였다.
RTA도 같은 일만 해서 잘 먹긴 했지만 사실 온라인화하려고 했는데...
언제 올지 모르는데 다음 RTA는 꼭 하고 싶어요!목표 온라인화!!
MagicOnion 서버의 컨테이너화에 대해서는 Unity:MagicOnion의.AWS Fargate를 사용하여 NET Core 컨테이너 서버를 실행하는 방법를 참조하십시오.감사합니다.
다만, 자신의 환경에서 서버.Net6에서 이동하므로 Docker File을 수정하고 추가해야 합니다.
FROM mcr.microsoft.com/dotnet/sdk:6.0
# ~~略
# (.Net 6 と gRPC のバージョンの相性が悪かったっぽい?)
RUN apt-get update && apt-get install -y libc-dev && apt-get clean
# ~~ 略
끝말이상!이렇게 RTA 기록이 끝났습니다.
새로운 것을 접하게 되어 기쁩니다.더 하고 싶어요.
"여기가 이래요!!"만약 이런 상황이 있으면 댓글을 남겨주세요. UGDG에 꼭 참가해서 저에게 알려주세요!!
UGDG 좋아요.
그러면💪💪💪💪💪
감사의 말
위대한 선조 를 참고하였다
MagicOnion의 샘플https://github.com/Cysharp/MagicOnion/tree/master/samples/ChatApp/ChatApp.Unity
Unity + .NET Core+MagicOn v3 환경 구축 손잡이https://qiita.com/_y_minami/items/db7b19eb5979ef1d6fe9
Unity:MagicOnion의.AWS Fargate를 사용하여 NET Core 컨테이너 서버를 실행하는 방법https://qiita.com/simplestar/items/b1d29e986b0b2cd6af2b
C#만 사용하는 경우 이제 소셜 게임 APPhttps://qiita.com/yoship1639/items/c54f6942d847f8374377를 만듭니다.
Win10에 WSL2 및 Ubuntu 20.04https://astherier.com/blog/2020/07/install-wsl2-on-windows-10-may-2020/ 설치
Windows 10 Home에서 WSL2+Dockerhttps://qiita.com/KoKeCross/items/a6365af2594a102a817b 사용
gRPC의 isse(https://github.com/grpc/grpc/issues/24153
Reference
이 문제에 관하여([UGDG 사랑] 유니티+MagicOnio+Docker에서 미니어처 RTA를 혼자 만들어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Euglenach/items/65d0f61c287eeeb3d314텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)