Node.js 최종프로젝트가 얼마 남지 않은 상태에서 유니티에 대한 이해도가 아예 없는 것 보단 있는게 도움이 될 것 같아
조금 찾아보았다.
서버는 데이터를 관리하고 요청을 처리하는 중앙 시스템이다.
예를 들어, 게임에서 모든 플레이어의 위치나 게임 상태를 유지하고 관리하는 역할을 한다.
클라이언트는 사용자 측에서 실행되는 애플리케이션으로 지금 우리가 node서버와 연동하는 Unity 클라이언트는 사용자가 보는 화면을 렌더링하고, 입력을 받아 서버에 데이터를 보내는 역할을 한다.
객체가 처음 생성될 때 한 번 호출되며 Start()보다 먼저 실행된다.
게임이 시작되기 전에 초기화 작업이 필요할 때 사용된다.
객체가 활성화될 때 첫 번째 업데이트 전에 호출되고 일반적으로 초기화 코드가 여기에 작성된다.
매 프레임마다 호출되며 게임의 프레임 속도에 따라 호출 빈도가 달라진다.
몇일 전 TIL에서 다뤘던 Latency 측정 기법에서 Update에 PING/PONG을 구현했기 때문에 프레임에 따라 레이턴시가
변했던 것이다. 주로 게임 로직(ex: 캐릭터 이동, 상태 체크)을 처리한다.
물리 연산을 위해 일정한 간격으로 호출된다. 물리 엔진과 관련된 업데이트는 이 메서드에서 처리하는 것이 적합하며
아마 위의 Latency도 해당 메서드에서 처리하면 되지 않을까라는 생각이 든다.
Update()가 끝난 후에 호출되며 주로 카메라나 오브젝트의 후처리 작업에 사용된다.
Unity에서는 System.Net.Sockets 네임스페이스를 사용하여 TCP 클라이언트를 구현할 수 있다.
TcpClient 클래스는 서버와의 TCP 연결을 관리한다.
using System;
using System.Net.Sockets;
using System.Text;
using UnityEngine;
public class TCPClient : MonoBehaviour
{
private TcpClient client;
private NetworkStream stream;
void Start()
{
try
{
client = new TcpClient("127.0.0.1", 3000);
stream = client.GetStream();
// 서버에 메시지 전송
byte[] data = Encoding.ASCII.GetBytes("Hello from Unity!");
stream.Write(data, 0, data.Length);
Debug.Log("데이터 전송 완료");
}
catch (Exception e)
{
Debug.LogError("오류: " + e.Message);
}
}
void OnApplicationQuit()
{
if (stream != null) stream.Close();
if (client != null) client.Close();
}
}