본문 바로가기

유니티

유니티 TCP 시작하기(3) - 응용

이번엔 앞서 만든 서버와 클라이언트를 활용하여 추가로 보내고 싶은 데이터를 선정하여 주고 받을 겁니다.

먼저 클라이언트인 유니티에서 버튼을 만들어 버튼이 눌렸다는 정보를 주고 받아 봅시다!

버튼 생성 예시

Hierarchy에서 우클릭으로 UI -> button을 생성합니다.

스크립트 생성 예시

그리고 또 다른 Create Empty로 ButtonControl이라는 이름으로 오브젝트를 만든 후 Project의 Assets/Scripts 안의 폴더에 마우스 우클릭을 통해 Create -> C# Script를 생성해줍니다.

그 후 저번과 같이 스크립트를 드래그하여 ButtonControl 오브젝트에 넣어줍니다.

ButtonControl.cs 예시

위와 같이 생성한 스크립트에 간단한 함수를 만들어 줍니다.

버튼에 해당 스크립트 함수 넣기

위 사진의 순서에 따라 버튼에 OnClick 함수 구간에 ButtonControl스크립트를 가진 ButtonControl 오브젝트를 넣어주고 우리가 만든 함수를 찾아 선택해 줍니다.

이제 버튼을 유니티를 실행해서 버튼을 클릭하면 함수에 적은 "Button is clicked" 라는 말이 콘솔창에 뜰 겁니다.

Assets/Scripts/Packet.cs 에 추가 예시

위 사진 처럼 Assets/Scripts/Packet.cs에 있는 enum에 우리가 사용할 button을 추가.

Assets/Scripts/ClientSend.cs 예시

Assets/Scripts/ClientSend.cs 부분에 위와같이 ButtonClick을 추가.

(위와 같이 하는 이유는 소켓 통신을 통해 데이터를 전달할 때 온전한 string 형태로 주고 받을 수 없기 때문에 byte의 형태로 바꾸어 packet에 저장한 뒤 보내고 byte 형태로 받은 정보를 다시 재조합하여 string으로 바꾸어 정보를 받기 때문입니다.)

Assets/Scripts/ClientHandle.cs 부분 예시

Assets/Scripts/ClientHandle.cs 에서는 서버에서 ServerSend를 통해 받은 byte형태의 packet을 string형태로 바꾸어 확인할 수 있는 부분입니다. 미리 만들어 놓아 나중에 다시 Client 확인하지 않도록 합니다!

Assets/Scripts/Client.cs 부분 예시

Assets/Scripts/Client.cs에 위에서 추가했던 내용들을 초기화 시켜줍니다.

Assets/Scripts/ButtonControl.cs 부분 추가 예시

다시 ButtonControl.cs로 돌아와서 위와 같이 ClientSend를 추가하여 ButtonClick 함수를 통해 보내고자 하는 데이터를 입력하여 줍니다.

그렇게 하면 클라이언트의 준비는 완료 됩니다.

 

이제 C#으로 만든 서버를 손봐주도록 하겠습니다.

ConsoleApp1/Packet.cs 부분 예시

클라이언트에서 처럼 button enum을 추가해 줍니다.

ConsoleApp1/ServerHandle.cs 부분 예시

ConsoleApp1/ServerHandle.cs에서 클라이언트가 보낸 packet 형태의 데이터를 받아서 해석하고 ServerSend를 이용하여 다시 클라이언트에게 데이터를 받았다는 메세지 전달.

ConsoleApp1/ServerSend.cs 부분 예시

ConsoleApp1/ServerSend.cs 부분에 데이터를 전달하는 함수도 추가!

ConsoleApp1/Server.cs 부분 예시

ConsoleApp1/Server.cs 부분에 위에서 추가했던 enum 정보와 ServerHandle 정보 추가하여 초기화.

이제 준비는 끝났고 결과를 확인해 볼 시간입니다.

먼저 서버를 실행시킨 후 클라이언트를 실행 시켜 연결 하고 버튼을 눌러 봅시다.

결과 예시

서버(오른쪽)와 클라이언트(왼쪽)가 서로 통신을 성공적으로 하고 있는걸 볼 수 있죠?

위와 같은 방법으로 전달하고 싶은 내용을 서로 주고 받을 수 있습니다!