티스토리 뷰
게임 서버 개발의 경우 살짝 복잡한데 유니티에서는 데디케이트 서버 빌드라고 리눅스로 빌드하는 버전이 있고 게임 메커니즘은 거기에서 일어난다. 그리고 거기를 연결해 주는 소켓이 있고 이 소켓에서 보통 윈도우 버전으로 정보를 쏴주면 클라이언트들은 랜더링 위주로 진행된다. 보통 같은 방식으로 개발하지만 리눅스 버전에서는 음악 리소스 같은걸 경량화 해서 서버에 쉽게 들어갈수 있도록 작업을 해준다. 클라이언트에서 공격 준비 동작같은걸 넣어서 지연이 일어나는걸 느끼지 못하도록 하는것까지 넣으면 멀티 플레이가가 들어가면 생각보다 게임 개발이 복잡해 진다.
전회사가 게임 방송 앱인데 투자 유치를 쉽게 받으려고 뜬금없이 메타버스를 집어 넣는 통에 서버를 할줄 아는 유니티 개발자를 찾고 있었었다. 그래서 일단 node.js AWS 다이나모 디비라도 할줄 안다는 이유로 불려가게 됬었다. 대표에게 내가 하는 일이 많다보니 서버를 보조해줄 개발자 한명을 구해달라고 했는데 몇달이 지나도 안들어 오더라. 결국 안들어 왔다.
그 대신 새로 팀장이 들어 왔는데 예리하게도 이 프로젝트는 구지 유니티로 갈필요 없다면서 플루터로 리엑트까지 통합해서 가고 유니티 파트는 대폭 축소하는 식으로 조직개편을 했다. 클라 뿐만 아니라 서버도 AWS로 구축하기 보다는 상용 프로그램으로 진행하는 걸로 바꿔서 6개월 동안 개발한거는 무용지물이 되었다. 회사에선 이런식으로 바뀌는거는 비일 비재하다고 했었다.
상용서버를 쓰는 거는 인턴에게 맞겨도 되는 거라 이제 딱히 회사에서 더 할일이 없더라. 그래서 대표가 제시한 업무가 방송 업무를 자동화 하는 거였었다. 구지 내가 그 일을 해야 싶긴 해서 다른 직원을 대신 보내고 나는 퇴사 준비를 했었다.
지금 하고 있는게 미련에 결과물일까. 그럴지도 모르겠다. 곰곰히 생각해 보면 다음 프로젝트는 멀티 게임이 아닌 컨텐츠가 풍부한 싱글 게임을 만드는걸 목표로 해야 한다.
그래도 이번에 털고는 가자. 다이나모 디비 하나에 의존하기 보다는 몽고 디비 등으로 선택지를 넓힐 필요가 있고 소켓 통신을 넣는거를 익히고 간다. 몽고 디비의 경우에는 시간이 나면 하고 아니면 구지 안해도 될듯 싶다. 일단은 소켓과 유니티를 연결하는거를 만들어 보고 마찬가지로 간단히 이동해 보는것을 구현하도록 하자. 구지 3D일 필요가 없으니 좌우로 움직이는거는 2D로 만들도록 해야 겠다.
그리고 동영상으로 촬영을 할 예정인데 늘 만들어 보는 패턴이 있다. 그걸로 가야 겠다.
연결방법은 이 영상에 나와 있더라 한번 집고 넘어가면 될듯 싶다.
https://drive.google.com/file/d/1hGIZWhMSri0-crMkEsk6bElk3I_Wubbm/view
assets.zip
drive.google.com
에셋 파일은 여기 있다. 2D 프로젝트로 갈 생각이다. 캐릭터가 좌우 이동만 하는 단순한 메카니즘이다.
https://github.com/itisnajim/SocketIOUnity
GitHub - itisnajim/SocketIOUnity: A Wrapper for socket.io-client-csharp to work with Unity.
A Wrapper for socket.io-client-csharp to work with Unity. - itisnajim/SocketIOUnity
github.com
https://github.com/itisnajim/SocketIOUnity.git
유니티 패키지 메니저에서 이걸 설치를 해준다.
어차피 앞부분은 다른 강의에서 했으니 빠르게 넘어가도록 한다. 유니티에서 먼가 다른게 있는지 여부가 중요하다.
https://github.com/doghappy/socket.io-client-csharp
GitHub - doghappy/socket.io-client-csharp: socket.io-client implemention for .NET
socket.io-client implemention for .NET. Contribute to doghappy/socket.io-client-csharp development by creating an account on GitHub.
github.com
using UnityEngine;
namespace Main
{
public class SocketManager : MonoBehaviour {
SocketIOUnity _socket;
int Port => 3000;
void Start() {
_socket = new SocketIOUnity($"http://localhost:{Port}");
_socket.OnConnected += async (sender, eventArgs) =>
{
print("Connected!");
};
_socket.Connect();
}
}
}
이게 웹을 하다가 유니티로 넘어오니까 컴파일 되는거 까지 해서 살짝 무겁다는 생각이 들기도 한다.
C#에 async 모태라고 할 정도로 다른 언어에 영향을 많이 끼친 async를 사용할수 있다는게 가장 강점이다. 물론 다른 언어도 사용은 가능하지만 C# 만큼은 아니다.
using UnityEngine;
namespace Main
{
public class SocketManager : MonoBehaviour {
SocketIOUnity _socket;
int Port => 3000;
void Start() {
_socket = new SocketIOUnity($"http://localhost:{Port}");
_socket.OnConnected += (sender, eventArgs) =>
{
print("Connected!");
};
_socket.Connect();
_socket.OnDisconnected += (sender, eventArgs) =>
{
print("Disconnected!");
};
_socket.Disconnect();
}
}
}
포트가 디스커넥티드 됬을때 코드도 만들어 주도록 한다. 기본 코드셋이다.
on이나 emit같은거는 같은 방식으로 쓰는거 같긴 하다.
강의는 따라 보고 있으면 지겹기 때문에 건너 띠고 이거를 만들어 보고 마찬가지로 영상으로 찍어서 올릴 생각이다.
'학습 > AWS' 카테고리의 다른 글
쓰래드 문제 (0) | 2024.08.26 |
---|---|
영상으로 만들어야지 (0) | 2024.08.25 |
어디까지 했더라 (0) | 2024.08.24 |
꿈을 꿨는데 (0) | 2024.08.23 |
서너번 반복해 보고 (0) | 2024.08.22 |