분류 전체보기 썸네일형 리스트형 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.. 더보기 Q. Unity, 물체가 움직이다가 바닥에서 갑자기 튀어올라요. Unity에서 물체가 바닥 위를 지나가다가, 가끔 아무것도 없는 곳에서 퓽-하고 튀어오르는 경우가 있다. 이해를 위해 사진을 첨부하자면... 땅 1의 콜라이더(Collider)와 다른 땅 2의 콜라이더 경계선에서 AddForce()를 이용해 힘을 받고있는 물체가 튀어오르는 현상이다. (꼭 AddForce가 아니라 다른 것일지도 모른다!) 이는 속도가 빠를수록 더 심해진다. 아마 콜라이더 경계선이 바뀌면서 물체가 바닥으로 떨어지려고 하고, 조금 바닥으로 떨어진 물체가 땅2 콜라이더와 겹쳐지면서 위로 튀어오르는 것이 아닐까 추측한다. 땅 1과 땅 2의 콜라이더를 완벽히 겹쳐도 이 현상은 사라지지 않는다. 공의 물체 충돌 예측을 Continuous로 바꿔도 여전히 일어난다. 콜라이더의 길이를 좀 길게해서 콜라.. 더보기 이전 1 2 3 4 5 다음