MR Multiplayer Template 무작정 따라하기 (3) - 프리팹 구성, UI 레이아웃, 상호작용 기능 등 이해

 

주요 기능 및 사용 목적

  1. Virtual Table 및 UI GameObjects:
    • Virtual Table: XR 및 MR 환경에서 테이블 인터페이스를 제공하는 가상 오브젝트.
    • UI GameObjects: 사용자 인터페이스(UI)를 구성하는 요소.
  2. Table UI Prefab:
    • Table UI 프리팹은 Virtual Table의 모든 UI 요소의 루트입니다.
    • 컨텍스트에 따라 특정 메뉴를 활성화하거나 비활성화하는 동적 UI로 설계되었습니다.

 

 

메뉴 버튼을 열거나 닫을 때 특정 UI 오브젝트를 표시하거나 숨기는 동작을 관리합니다.

이 스크립트는 사용자 인터페이스(UI) 상태를 동적으로 변경하는 데 사용됩니다.

 

Player UI Area (Script)

  • 메뉴 버튼 상태(열림/닫힘)에 따라 토글될 시각적 요소를 정의합니다.
동적 UI 관리:
 메뉴 상태(열림/닫힘)에 따라 특정 UI 요소를 표시하거나 숨깁니다.사용자가 메뉴를 탐색하거나 닫을 때 UI의 전환 효과를 제공합니다.

UI 상태 전환:
 Objects To Hide와 Objects To Show를 통해 사용자가 필요로 하는 UI만 표시하여 시각적 혼란을 최소화하고 인터페이스를 간결하게 유지합니다.

사용자 경험 개선:

 메뉴가 열리거나 닫힐 때 자연스럽고 명확한 UI 전환을 제공하여 사용자가 쉽게 UI를 탐색할 수 있도록 지원합니다.

Menu Open

  • Objects To Hide On Menu Open:
    • 메뉴가 열릴 때 숨겨질 오브젝트 목록.
    • 현재 설정:
      1. Expand Icon: 메뉴 확장 아이콘.
      2. Microphone (Collapsed Background): 축소된 상태의 마이크 UI.
  • Objects To Show On Menu Open:
    • 메뉴가 열릴 때 표시될 오브젝트 목록.
    • 현재 설정:
      1. Icon: 메뉴 아이콘.
      2. Panel (Background): 메뉴의 배경 패널.

Menu Close

  • Objects To Hide On Menu Close:
    • 메뉴가 닫힐 때 숨겨질 오브젝트 목록.
    • 현재 설정:
      1. Icon: 메뉴 아이콘.
      2. Panel (Background): 메뉴 배경 패널.
      3. Leave Table (Prompt): 테이블 나가기 프롬프트.
      4. Quit App (Prompt): 앱 종료 프롬프트.
      5. GameSelection: 게임 선택 UI.
  • Objects To Show On Menu Close:
    • 메뉴가 닫힐 때 표시될 오브젝트 목록.
    • 현재 설정:
      1. Expand Icon: 메뉴 확장 아이콘.
      2. Leave Table Button: 테이블 나가기 버튼.
      3. Microphone (Collapsed Background): 축소된 상태의 마이크 UI.

Player Options (Script)

  • Table UI의 전체적인 관리 및 상호작용을 처리합니다.
  • Inspector 창에서 해당 스크립트를 아래로 스크롤하여 찾을 수 있습니다.

주요 설정 설명

  1. Menu Button Input:
    • 메뉴 버튼 입력을 처리합니다.
    • 현재 LeftController/Menu 입력 액션이 설정되어 있습니다.
  2. Mixer:
    • 오디오 믹서를 설정합니다. 현재 "Main" 믹서를 사용 중입니다.
  3. Default Panel:
    • 기본적으로 활성화되는 패널을 지정합니다. 현재 패널 번호는 1입니다.
  4. On Menu Toggle (Boolean):
    • 메뉴 토글 이벤트가 발생했을 때 실행되는 동작을 정의합니다.
    • 현재 설정:
      • PlayerUIArea.MenuToggled 메서드를 호출하여 UI 상태를 변경.
      • Table Panel 오브젝트를 활성화하거나 비활성화.
  5. Panels:
    • 메뉴에서 관리되는 패널 목록입니다.
    • 주요 패널:
      • Main Panel Root: 내비게이션 메뉴.
      • Host Room Panel: 호스트 전용 패널.
      • Client Room Panel: 클라이언트 전용 패널.
      • Leave Table Button: 테이블 나가기 버튼.

 

Text Components

  • 텍스트와 관련된 UI 요소를 관리합니다.
  • 주요 텍스트:
    • Snap Turn Text: "Snap Turn" 관련 정보를 표시.
    • Room Name Text: 방 이름을 표시.
    • Room Name Input Field: 방 이름을 입력받는 필드.

Voice Chat

  • Mic Perms Button:
    • 마이크 권한 요청 버튼.
  • Input Volume Slider:
    • 입력 볼륨 조정을 위한 슬라이더.
  • Output Volume Slider:
    • 출력 볼륨 조정을 위한 슬라이더.
  • Local Player Audio Visualization:
    • 현재 플레이어의 오디오 활동을 시각적으로 표현(예: 마이크 채우기 애니메이션).
  • Muted Icon:
    • 마이크가 음소거된 상태를 표시하는 아이콘.
  • Mic On Icon:
    • 마이크가 활성화된 상태를 표시하는 아이콘.
  • Voice Chat Status:
    • 음성 채팅 상태를 텍스트로 표시(Text Mesh Pro 사용).

Player Options:

  • Min Max Move Speed:
    • 플레이어 이동 속도의 최소값과 최대값을 설정(X: 2, Y: 20).
  • Min Max Turn Amount:
    • 플레이어 회전 각도의 최소값과 최대값을 설정(X: 15, Y: 180).
  • Snap Turn Update Angle:
    • 스냅 턴(빠른 회전) 시 업데이트되는 각도를 설정(현재 15도).

Lobby UI

Lobby UI는 멀티플레이어 로비 환경을 관리하며, 로비 생성, 참여, 목록 표시 등의 기능을 제공합니다.

주요 기능 및 사용 목적:

  1. 로비 관리:
    • 사용자가 로비를 생성하거나 참여할 수 있는 인터페이스를 제공합니다.
    • 로비 목록 자동 새로 고침 및 연결 상태를 관리합니다.
  2. 동적 UI:
    • 사용자와 로비 간의 상호작용을 처리하는 버튼, 입력 필드, 토글 등 다양한 UI 요소를 포함합니다.
  3. 연결 상태 표시:
    • 연결 시도, 성공, 실패 상태를 텍스트로 표시하여 사용자 경험을 개선합니다.
  4. 방 생성 옵션:
    • 방 이름 설정 및 공개/비공개 전환 기능 제공.

Inspector 창 (Lobby UI Script)

Lobby List:

  • Lobby List Parent:
    • 로비 목록이 배치되는 부모 트랜스폼(Content).
  • Lobby List Prefab:
    • 로비 버튼을 나타내는 프리팹(TableButton_Lobby).
  • Auto Refresh Time:
    • 로비 목록을 자동으로 새로 고침하는 간격(현재 5초).
  • Refresh Cooldown Time:
    • 새로 고침 요청 간 최소 간격(현재 0.5초).

Connection Texts:

  • 연결 상태를 나타내는 텍스트 필드.
  • Connection Update Text: 연결 중 상태 표시.
  • Connection Success Text: 연결 성공 상태 표시.
  • Connection Failed Text: 연결 실패 상태 표시.

Room Creation:

  • Room Name Text:
    • 방 이름을 입력받는 필드(XRI InputField 사용).
  • Privacy Toggle:
    • 방을 공개/비공개로 설정하는 토글.

Connection Sub Panels:

  • 연결 상태와 관련된 하위 패널들.

활용 방안:

  • Lobby List: 동적으로 로비를 생성하거나 참여하도록 사용자 정의할 수 있습니다.
  • Connection Texts: 연결 관련 문제를 디버깅하거나 사용자에게 상태를 알릴 때 활용할 수 있습니다.
  • Room Creation: 사용자 맞춤 로비 생성 옵션을 추가하거나 수정할 수 있습니다.

Network Table Top Manager

Network Table Top Manager

  • 플레이어를 특정 좌석에 배치하고, 같은 좌석에 두 명 이상의 플레이어가 앉지 않도록 보호합니다.

호출 가능한 메서드:

NetworkTableTopManager.RequestSeat();

 

이 메서드를 사용해 플레이어가 좌석을 요청하고 배정받을 수 있습니다.

주요 기능 및 사용 목적

  1. 좌석 관리:
    • 플레이어를 특정 좌석에 배치하고 네트워크를 통해 동기화.
    • 동일한 좌석에 여러 플레이어가 앉는 상황을 방지.
  2. 네트워크 동기화:
    • 멀티플레이어 환경에서 테이블과 좌석의 상태를 실시간으로 동기화.
  3. 좌석 요청:
    • RequestSeat() 메서드를 호출해 플레이어가 빈 좌석에 앉을 수 있도록 처리.
  4. UI 통합:
    • Seat Buttons와 같은 UI 요소를 활용하여 좌석 선택을 사용자 친화적으로 제공.

 

Network Object

  • 네트워크 오브젝트로, 해당 오브젝트가 멀티플레이어 환경에서 동기화됩니다.
  • Synchronize Transform: 위치, 회전, 스케일 등의 동기화를 활성화.
  • Spawn With Observers: 관찰자와 함께 스폰.

  1. Always Replicate As Root:
    • 이 옵션이 활성화되면 오브젝트가 항상 네트워크 계층 구조의 루트로 복제됩니다.
    • 현재 비활성화되어 있습니다.
  2. Synchronize Transform:
    • 오브젝트의 위치, 회전, 스케일을 네트워크를 통해 동기화합니다.
    • 현재 활성화되어 있어 해당 오브젝트의 Transform이 다른 클라이언트와 동기화됩니다.
  3. Active Scene Synchronization:
    • 오브젝트의 활성화 상태를 네트워크 상에서 동기화합니다.
    • 현재 비활성화 상태입니다.
  4. Scene Migration Synchronization:
    • 오브젝트가 씬 간에 이동할 때 해당 상태를 동기화합니다.
    • 현재 활성화되어 있습니다.
  5. Spawn With Observers:
    • 오브젝트가 관찰 가능한 상태로 생성됩니다.
    • 현재 활성화되어 있어 이 오브젝트를 생성한 사용자가 자동으로 관찰자가 됩니다.
  6. Dont Destroy With Owner:
    • 오브젝트 소유자가 제거되더라도 오브젝트가 제거되지 않습니다.
    • 현재 비활성화 상태입니다.
  7. Auto Object Parent Synchronization:
    • 부모-자식 관계를 네트워크 상에서 자동으로 동기화합니다.
    • 현재 활성화되어 있어 부모 오브젝트와의 관계가 네트워크에서 동기화됩니다.
  8. Sync Owner Transform:
    • 소유자의 Transform 상태를 동기화합니다.
    • 현재 활성화되어 있습니다.
  9. Allow Owner To Parent:
    • 소유자가 이 오브젝트의 부모가 될 수 있는지 여부를 설정합니다.
    • 현재 비활성화 상태입니다.
  10. GlobalObjectIdHash:
    • 네트워크 오브젝트의 고유 ID입니다. 현재 ID는 1876378851로 설정되어 있습니다.
  11. NetworkManager:
    • 오브젝트가 연결될 네트워크 관리자를 지정합니다.
    • 현재 값은 null로 설정되어 있어 특정 네트워크 관리자와 연결되어 있지 않습니다.
멀티플레이어 게임에서 오브젝트의 위치 및 상태 동기화를 구현하고자 할 때 유용합니다.
Spawn With Observers와 Scene Migration Synchronization을 함께 활용해 네트워크 오브젝트의 생성을 동적이고 일관되게 관리할 수 있습니다.
특정 네트워크 관리자(NetworkManager)와 연결되지 않은 경우 추가 설정을 통해 연동을 활성화해야 합니다.

 

 

Network Table Top Manager (Script)

멀티플레이어 테이블톱 환경에서 좌석 배치와 관련된 네트워크 기능을 관리하는 역할

주요 기능 및 사용 목적

  1. 좌석 관리:
    • 사용자가 테이블톱 게임에서 특정 좌석을 선택하거나 배정받을 수 있도록 합니다.
    • 네트워크를 통해 각 플레이어의 좌석 상태를 동기화하여 중복 배정을 방지합니다.
  2. Seat Buttons:
    • 사용자가 선택 가능한 좌석을 나타내는 UI 요소입니다.
    • 버튼을 통해 플레이어가 좌석 요청 및 배정을 수행할 수 있습니다.
  3. Table System 연동:
    • 테이블 시스템과 좌석 시스템 간의 연결을 관리하여 테이블 상태 및 좌석 정보를 유지합니다.
좌석 커스터마이징: Seat Buttons를 조정하여 좌석의 수를 늘리거나 줄일 수 있습니다.다양한 좌석 옵션을 추가하거나 버튼 디자인을 커스터마이징하여 사용자 경험을 향상시킬 수 있습니다.
네트워크 동기화: 멀티플레이어 환경에서 좌석 상태를 모든 클라이언트에 실시간으로 동기화합니다.좌석 요청이 들어올 때마다 Networked Seats와 연동해 관리합니다.
사용자 지정 로직 추가: 특정 조건에서 좌석을 활성화하거나 비활성화하는 추가 로직을 구현할 수 있습니다.예를 들어, "특정 좌석은 호스트 전용으로 설정"하거나 "플레이어 수 제한" 기능을 추가할 수 있습니다.

  • Networked Seats:
    • 네트워크 좌석 시스템을 관리.
  • Seat System:
    • TableSystem(Table Seat System) 오브젝트가 연결되어 좌석과 관련된 데이터를 관리합니다.
  • Table Top:
    • TableTop 오브젝트와 연결되어 테이블 관련 작업을 처리합니다.
  • Seat Buttons:
    • 좌석 버튼 수. 현재 설정된 버튼 수는 4입니다.