Async 란? 비동기 방식을 사용할 때 사용하는 "키워드"입니다. 비동기란? "비동기"는 대기하거나 특정 주문에 묶이지 않고 작업을 수행하는 것을 의미합니다. 친구와 카톡을 하고 있다고 가정하고 할 수 있는 작업이 2가지 있다고 상상해 보겠습니다. 카톡을 하는데 친구가 말을 마칠 때까지 기다려야 한다. 친구가 카톡 입력을 마칠 때까지 기다리지 않고 바로 카톡을 답장한다. 첫 번째 작업에서는 조치를 취하기 전에 어떤 일이 발생하기를 기다리기 때문에 "동기적으로" 작업을 수행합니다. 두 번째 작업에서는 상대방이 완료할 때까지 기다리지 않고 바로 응답할 수 있기 때문에 "비동기적으로" 작업을 수행하고 있습니다. 특정 상황에 얽매이지 않고 그동안 멀티태스킹이나 다른 일을 할 수 있습니다. 컴퓨팅 또는 프로그래..
VR POKE Interaction 오늘은 Poke 기능에 대해 알아보겠슴당~ Poke 번역하면 찌름! 이런거쥬 네 맞아유 누르는 기능이에유 먼저 Poke Interactable을 오브젝트에 추가해줘요~ 그리고 빈오브젝트 Proximity와 Surface를 생성해줘 wlsdn629.tistory.com 이전 글들을 보면 Poke Interactable 오브젝트엔 Field가 존재했고 콜라이더 역할을 했었습니다. 최근 Poke Interactable를 보면 Surface에서 기능을 전부 처리하게 바뀌었습니다. Plane Surface의 경우 Canvas에 붙이시길 추천드립니다. Bounds Clipper를 통해 인터렉션이 가능한 콜라이더 영역을 확인할 수 있습니다!
플레이어들은 제공받은 Lobby Code 또는 ID를 이용해서 원하는 Lobby에 참여할 수 있습니다 또는, 아무 방이나 빠르게 들어갈 수 있습니 #1. Join by specifying a lobby ID try { await LobbyService.Instance.JoinLobbyByIdAsync("lobbyId"); } catch (LobbyServiceException e) { Debug.Log(e); } #2. Join by providing a lobby code try { await LobbyService.Instance.JoinLobbyByCodeAsync("lobbyCode"); } catch (LobbyServiceException e) { Debug.Log(e); } #3. Quick..
Relay Service와 Lobby Service 둘다 함께 사용할 때, 그 서비스들은 Relay 연결 상태를 로비 구성원과 동기화 하려고 시도합니다 한 마디로, 사용자가 예기치 않게 Relay에서 연결을 끊으면 로비 데이터에서 사용자를 연결이 끊긴 것으로 로비 서비스를 표시합니다 사용자가 릴레이 서비스에 다시 연결할 수 없는 경우 시간이 초과 되면 로비에서 자동으로 제거됩니다 다시 연결할 수 있는 경우 ReconnectToLobby() API를 사용하여 사용자를 연결된 것으로 표시하도록 로비서비스에 요청할 수 있습니다 using System; using UnityEngine; using Unity.Services.Authentication; using Unity.Services.Core; asyn..
#1. Get joined lobbies GetJoinedLobbies API를 이용해서 Lobby를 선택할 수 있습니다 이 API는 현재 활동중인 플레이어가 현재 속한 로비를 위한 로비 ID의 List를 반환해준다! 이 API는 예기치 못한 끊김에 사용될 수 있습니다 예기치 못한 끊김(충돌이나 사용자가 로비에서 연결을 끊는 등)이 발생할 때, 플레이어가 속한 모든 로비 목록을 가져오기 위해 API를 사용할 수 있고, API를 사용하여 전체 로비 세부 정보를 회복(?)하거나 로비에 다시 연결할 수 있습니다! try { var lobbyIds = await LobbyService.Instance.GetJoinedLobbiesAsync(); } catch (LobbyServiceException e) { D..
Lobby error messages Lobby error messages# Lobby servers use ERROR messages to inform you that an error has occurred. The following table describes each field found in the error detail of the error message with an example. You can find the error detail in the Details field of docs.unity.com
#1. Delete a lobby 로비 호스트는 로비를 삭제할 수 있으며 삭제된 대기실은 더이상 참여할 수 없습니다. 삭제된 로비는 쿼리에 표시되지 않으며 삭제된 로비를 대상으로 하는 모든 접근은 실패하게 됩니다 클라이언트는 언제든지 로비에서 제거될 수 있음을 예상해야 합니다 로비가 삭제된다거나, 호스트가 플레이어를 로비에서 강퇴한다거나, 릴레이 연결이 해제 된다거나 등 클라이언트는 특정 로비를 대상으로 하는 모든 API 호출이 실패할 수 있음을 예상하고 그에 맞게 처리해야 합니다 try { await LobbyService.Instance.DeleteLobbyAsync("lobbyId"); } catch (LobbyServiceException e) { Debug.Log(e); } #2. Leave a..
heartbeat 생명주기 유니티 "Lobby 서비스"에서 사용되는 로비는 30초 안에 heartbeat를 보내거나 update되지 않으면 비활성화 됩니다. 비활성화 상태가 되면 유저는 더이상 'Quick Join'으로 참여할 수 없으며, query 결과값으로도 보이지 않게 됩니다.(즉, 로비를 찾지 못한다는 뜻) 비활성화 상태가 되고 1시간이 지나면, 로비는 만료됩니다. 만료된 로비는 새로운 업데이트나 하트비트가 없으면 자동으로 삭제됩니다! 업데이트는 로비 속성을 변경한 경우에만 실행됩니다. 여기에는 호스트의 플레이어 데이터에 대한 변경 사항은 포함되지 않습니다. 예시 코드 async Task CreateLobbyWithHeartbeatAsync() { string lobbyName = "test lo..
[출처]- Unity Documentation 1. Create a lobby / 로비 세팅 새로운 Lobby를 만들 때, 다음과 같은 프로퍼티를 세팅할 수 있다 Lobby name (required) Lobby visibility (public or private) Lobby size (the maximum occupancy) This is referred to as Max Players in the code. Initial custom lobby data This can include any arbitrary data. For example, map IDs and game modes. Lobby data with string or numeric values can be indexed, allowing..
Join Code는 게임세션에 플레이어들이 참가할 수 있게 해주는 코드입니다 플레이어들은 로비, Chat, 그 외 서비스를 통해 코드를 공유할 수 있습니다 Join Code는 대소문자를 구분하지 않아 단순하고 짧습니다 호스트 플레이어는 게임 세션을 생성한 후 Allocationos 서비스에서 친구에게 보낼 참고 코드를 요청하고, 친구들은 참가코드를 사용해서 호스트 플레이어가 있는 게임 세션에 참가할 수 있습니다 Join Code를 만들어내는 방법에는 Relay SDK 또는 Relay API를 이용해서 만들 수 있습니다 1) NGO를 사용한다면 transport 확인하고 NGO를 host 플레이어로 시작하면 됩니다 더보기 IEnumerator Example_ConfigureTransportAndStartN..
로비 서비스란? public 또는 private Lobby에서 게임이 시작하기 전이나 플레이하는 플레이어들을 연결해주는 서비스입니다 로비 서비스를 사용하기 위해선 SDK를 설치해야 하며 다음 순서를 따르면 됩니다 In Unity, navigate to Window > Package Manager. From the Package Manager, search for com.unity.services.lobby or scroll through the Unity Registry to find the Lobby package. Select the package and click Install. 로비 관리하는 방법은? 로비 만들기 로비 참여하기 lobby 데이터 Update player 데이터 Update Quer..
1. 릴레이 서버는 UTP와 결합된 Relay SDK를 사용하는 것이 좋습니다 2. 플레이어는 동일한 게임 세션 내에서만 다른 플레이어와 연결할 수 있습니다 3. 현재까지는 지역 잠금 기능이 없습니다 4. 릴레이 서비스는 호스트가 선택한 지역을 통해 모든 통신 - 라우팅을 합니다 -> 최적의 latency를 제공하지 못하게 됩니다
[출처] - Unity Documentation #1. Initialize Unity Services await UnityServices.InitializeAsync(); 를 사용해 UnityServices 를 초기화 해야합니다 #2. Authenticate the player public async void OnSignIn() { await AuthenticationService.Instance.SignInAnonymouslyAsync(); playerId = AuthenticationService.Instance.PlayerId; Debug.Log($"Signed in. Player ID: {playerId}"); } 호스트 플레이어와 연결중인 플레이어 모두 인증해야합니다 가장 쉬운 방법은 SignI..
Local Lobby와 Remote Lobby 차이에 대해 몰랐는데 XREAL 시니어분께서 알려주셨다! LocalLobby는 실제 로비(RemoteLobby)의 정보를 가져와서 로컬에 저장해두는 로비 데이터고 RemoteLobby는 로비 SDK에 request 보냈을 때 실제로 받는 로비 데이터라고 하셨다! Lobby Sdk에서 받아온 Lobby Data를 로컬에 저장해둠으로써 실시간으로 불필요한 통신을 방지하기 위함인 것 같다! 정보가 변하지 않은 상태에선 local lobby 데이터를 사용하고 lobby의 data가 변하면 그 때 remote lobby data를 Lobby SDK에 보내고 Lobby 정보를 갱신하면 되는 것!
Relay SDK는 Unity Transport Package (UTP)에서 잘 작동됩니다 About Unity Transport | Unity Multiplayer Networking Unity Transport provides the com.unity.transport package, used to add multiplayer and network features to your project. docs-multiplayer.unity3d.com UTP는 쉽게 말하면 추상적인 네트워킹에서 Unity 게임 엔진을 위해 만들어진 현대적인 네트워킹입니다 한 마디로, 게임 개발자들이 low - level protocol과 networking 프레임워크에 대해 잘 알지 못해도 게임 제작에 집중할 수 있게 도와준..
릴레이 서버란? Unity에서 제공하는 멀티플레이어 게임용 Relay 서비스입니다. Relay 서버는 게임 세션 생명주기와 독립적으로 동작하는 특징을 가지고 있습니다. Relay 서버는 플레이어 연결 시간이 초과되면 플레이어 연결을 해제합니다. Relay서버 서비스를 사용하면 비용이 많이 드는 전용 게임 서버(DGS)를 구축 하지 않고도 간편하고 안전한 P2P 통신을 통해 플레이어를 연결할 수 있습니다. 또한, Join Code 형식의 워크플로우를 사용하여 게임 서버를 유지하는 데 필요한 노력과 비용을 절약할 수 있습니다. Join Code 형식이란? 유니티(Unity) Relay Join Code에 대해서 (#Relay 5편) Join Code는 게임세션에 플레이어들이 참가할 수 있게 해주는 코드입니다..
#1. 상단 UV Editing을 눌러줍니다 #2. 이거 눌러줍니다 #3. 사과 4등분 해서 (Edge 단축키 2번 누른 후 Alt하고 선 하나 클릭 후 4번 반복) 우클릭 후 Mark Seam을 눌러줍니다 #4. 이거 눌러준 후 사과 누른 후 A해서 다 잡히게 하고 UV누른 후 Unwrap해줍니다 #5. 이미지를 저장합시다 New누르고 이렇게 해줍니다 #6. 다음으로 상단 Texture Paint을 눌러주고 Mode를 Single Image로 바꿔준 후 사진 모양의 아이콘을 클릭 후 아까 만들어준 apple Image을 클릭해줍니다 그다음 저 네모 박스 친거 클릭하고 Texture하나 만들고 구글에 사과텍스쳐 친 후 맘에 드는 거 아무거나 png로 다운 받은 후 Open해서 열어줍니다(불친절해진거는....
#1. UV Sphere를 하나 만들어줍니다! #2. 좌측 상단 토글을 펼쳐 Segments와 Rings을 12로 설정하고 Radius를 0.15m로 바꿔줍니다! #3. Edit Mode에서 화살표 가리킨 곳을 활성화 해주고 오른쪽 사진처럼 동그라미 영역을 좁혀준 후 G버튼을 눌러 음푹 들어가게 만듭니다 #4. 각 Vertex를 눌러서 사과의 울퉁불퉁을 표현해줍니다! #5. 대충 울퉁불퉁하게 만들었으면 Object Mode로 넘어와서 섭디비전 해줍시다! 단축키는 Ctrl + [숫자(원하는 Value)] 임다 다음으로 우클릭 후Shade Auto Smooth를 해줍니다 [결과]
인터페이스란?예를 들어, 우리가 컴퓨터 키보드에 글자를 입력하면, 키보드는 글자를 컴퓨터로 전달합니다. 이때 키보드와 컴퓨터 사이의 인터페이스는 키보드의 물리적 디자인과 컴퓨터가 키 입력을 이해하는 프로그램 사이의 연결 역할을 합니다. 그 덕분에 우리가 타이핑하는 순간 글자가 화면에 나타나게 되는 것입니다. 아직 이해가 제대로 되지 않으셔도 괜찮습니다. 아래 "햄버거"를 예시로 쉽게 인터페이스에 대해 다시 설명드리겠습니다. 햄버거 만들기햄버거를 만드는 스크립트를 작성한다고 생각해 봅시다. 우리는 다음 4개의 스크립트가 필요할 것입니다. (물론, 더 많이 존재할 수 있겠지만 대략적인 틀만 잡아 보기 위해 4개의 스크립트만 준비했습니다. 모든 코드는 수도코드 형식으로 작성되었습니다.) 햄버거 레시피 (인터페..