본문 바로가기

분류 전체보기

[08] UI와 Scene, 스크립트 정리 + 서버 의문 게임을 플레이 할 방을 들어가는 것까지의 게임 구조도를 정리해보았다. 현재 구현된 것은 Loading에서 Home으로 가는 것, 종료, 서버 접속까지이다. 기존에 만들어놓은 Scene과 기능들이 따로 놀고 있는 느낌이 있어, 위의 구조도를 기반으로 재정렬하자. Loading에서 플레이어의 데이터를 검사하고, 없다면 새로운 계정을 생성한다. 이 과정은 데이터베이스가 만들어지고 나서 구현할 문제이므로, 일단은 플레이할 때마다 임시 프로필을 부여받아 Home에 접속하는 것으로 하자. 그 이후 Home에서 서버 접속을 시도한다. 처음 로딩 화면이다. 지금은 다음 Scene을 로딩하는 기능밖에 없지만, 나중에 플레이어의 데이터를 불러오고, 데이터가 없다면 플레이어 데이터를 새로 생성하는 장면이다. 그 다음은 Ho.. 더보기
Q. 플레이어를 따라오는 적 만들기 Unity, 2D, 플랫포머. Enemy, Player, Wall으로 구성되어 있을 때, Enemy는 Player를 쫓아가면서 Wall을 뛰어넘어서 Player에게 다가가고 싶다. private Rigidbody2D enemyRB; private SpriteRenderer enemySprite; Enemy, 즉 몬스터의 속도는 일정했으면 좋겠으므로, 움직이는 방식은 rigidbody의 velocity 값을 입력해서 구현해주도록 하자. 또, 왼쪽 오른쪽 움직일 때 스프라이트 방향이 달라지므로, SpriteRenderer도 받아와야 한다. private void Awake() { enemyRB = GetComponent(); enemySprite = GetComponent(); } Awake에서 이런 값들을.. 더보기
[07] 채팅창 UI 만들기, TMP로 한글 쓰기 플레이어가 입력하면 서버의 모든 이용자가 메시지를 볼 수 있는 채팅창을 만들어보자. 기본적인 구성은 위의 사진처럼 Chat이 올라오고, 채팅창의 아래부분을 누르면 채팅을 입력할 수 있는 InputField가 등장하는 구조다. 이제 채팅을 입력하고, 위에 올리는 작업을 시행해야 하나... 그 전에 해결해야 할 문제가 있다. 바로 한글이 쳐지지 않는다는 것. 이 상태로 무언가를 만들어도, 한글로 된 내용은 전부 빈 네모로 바뀔 뿐. 그건 폰트가 한글을 지원해주지 않기 때문이다. 따라서, 우리는 유니티에 TMP에서 쓸 수 있는 한글 폰트를 설정할 필요가 있다. 우선 한글을 지원하는 폰트를 다운받아, TextMeshPro의 Fonts 폴더에 집어넣어주자. 작성자는 넥슨에서 지원하는 메이플스토리 폰트를 사용했다... 더보기
[06] TCP, 클라이언트 만들기 [05]에서 만든 서버 쪽 기초 내용은 아래와 같다. using UnityEngine; using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class TCPTutorial : MonoBehaviour { public const int BUFFER_SIZE = 1024; private Socket serverSocket; private IPAddress ipaddress; private string ipaddressStr; private int port; private IPEndPoint endpoint; //Socket -> Bind -> listen -> acce.. 더보기
[05] Thread, Handle Client [04]에서 HandleClient(Socket clientSocket)에 대해 다룬다고 이야기했다. 이 쓰레드로 클라이언트와 서버 간 통신이 이루어지는데, 통신이 무엇일까? 서로 정보를 주고 받는 일이다. 이해를 하기 쉽게 과정을 좀 더 뜯어본다면, 버퍼를 통해 통신이 이루어진다. 매 순간순간, 한 글자 한 글자를 입력할 때마다 클라이언트가 서버로 보내고 처리하는 것은 비효율적이다. 묶음이 필요하다. Client가 정보를 보내면(write), Send Buffer에 가서 정보가 쌓이게 된다. 그 쌓인 정보들은 다시 서버가 읽을 대기목록인 Receive Buffer에 쌓이게되고, Server가 그 버퍼 안의 내용물을 읽는 것이다. (서버에서 클라이언트로 정보를 보내는 과정은 반대.) 그림에서 느껴지듯, .. 더보기
[04] TCP 서버, Thread [03]과 이어집니다. serverSocket.Bind(endPoint); 을 사용해서 serverSocket과 endPoint를 연결해줍시다. 이제 [03]에서 말했던 서버의 Socket -> Bind -> listen -> accept -> receive -> send -> receive -> close 과정에서 Bind까지를 끝냈습니다. Listen 메소드를 만들어봅시다. private void ListenSocket() { serverSocket.Listen(5); // 대기 큐 크기를 지정 Console.WriteLine("Server started. Waiting for connections..."); Socket clientSocket = serverSocket.Accept(); } List.. 더보기
[03] TCP 소켓 준비, Input Field와 UI 기획에서 이야기했듯, 기본적으로 카드게임은 다른 사람과 같이 진행하기 때문에 멀티가 필수적이다. TCP 공부할 겸 네트워킹을 구현해보자. 그러기 위해서는 우선 네트워크에 대한 정보를 입력할 InputField가 필요하다. UI-InputField를 패널 위에 생성한다. InputField(TMO)의 구성은 TextArea, Placeholder를 보면 된다. TextArea는 입력 공간, Placeholder은 ‘이름을 입력해주세요…’와 같은 안내 메시지가 써 있는 공간이다. Text도 있긴 한데, InputField(TMP)에서 제어가 가능하다. 입력 패널이 있으면 닫는 버튼도 반드시 있어야한다. X 표시 버튼을 만들어서 패널에 할당하고, 누르면 패널을 비활성화하게 만들자. 우리는 이 InputFiel.. 더보기
[01-02] 홈과 로딩에 대해 Loading Scene은 처음 한 번만 로딩되는 것. Home은 다시 왔다갔다 할 수 있는 것. Loading Scene에서 GameManger와 같은 계속 사용할 것들을 불러오고, Home으로 이동한다. Home은 Scene들의 중심으로, 다른 곳들로 오갈 수 있는 다리같은 역할을 한다. 그러니 Home에서 버튼을 통해 다른 곳으로 이동할 수 있도록 이미 버튼 4개를 만들어놓자.(추후 수정될 수 있다.) 처음 Loading Scene이야 기초 세팅을 불러오지만, 그 이외에도 Loading이 필요한 경우는 꽤 많다. Tutorial과 같은 장면 전환시에 불러와야 할 데이터가 많을 수도 있으니, 로딩 바를 만들어보자. public void LoadScene(string sceneName, bool Act.. 더보기