- 다중 젬 슬롯용 타입을 별도 스크립트로 분리하고 테스트 젬/로드아웃 자산 생성 경로를 정리 - 젬 테스트 전용 공격 스킬과 분리된 애니메이션 자산을 추가해 베이스 스킬 검증 경로를 마련 - PlayerSkillDebugMenu와 MPP 디버그 메뉴를 보강해 젬 프리셋 적용, 원격 테스트, 보스 기절 디버그 메뉴를 추가 - BossCombatBehaviorContext와 공통 BT 액션이 기절 상태를 존중하도록 수정해 보스 추적과 패턴 실행을 중단 - Unity 리프레시와 외부 빌드 통과를 확인하고 드로그전 및 MPP 기준 젬 프리셋 적용 흐름을 검증
132 lines
3.8 KiB
C#
132 lines
3.8 KiB
C#
using System;
|
|
|
|
using UnityEngine;
|
|
using Unity.Netcode;
|
|
using Unity.Netcode.Transports.UTP;
|
|
|
|
namespace Colosseum.UI
|
|
{
|
|
/// <summary>
|
|
/// 네트워크 연결 설정 (Inspector에서 제어)
|
|
/// </summary>
|
|
public class ConnectionUI : MonoBehaviour
|
|
{
|
|
[Header("Connection Settings")]
|
|
[SerializeField] private string ipAddress = "127.0.0.1";
|
|
[SerializeField] private ushort port = 7777;
|
|
|
|
[Header("Editor Test")]
|
|
[Tooltip("에디터 Play Mode 진입 시 자동으로 Host를 시작합니다")]
|
|
[SerializeField] private bool autoStartHostInEditor = false;
|
|
|
|
[Header("Status (Read Only)")]
|
|
[SerializeField, Tooltip("현재 연결 상태")] private string connectionStatus = "Disconnected";
|
|
|
|
private UnityTransport transport;
|
|
|
|
private void Awake()
|
|
{
|
|
transport = NetworkManager.Singleton?.GetComponent<UnityTransport>();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
UpdateTransportSettings();
|
|
|
|
#if UNITY_EDITOR
|
|
if (autoStartHostInEditor && NetworkManager.Singleton != null && !NetworkManager.Singleton.IsListening)
|
|
{
|
|
if (IsVirtualProjectClone())
|
|
StartClient();
|
|
else
|
|
StartHost();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
UpdateConnectionStatus();
|
|
}
|
|
|
|
private void UpdateConnectionStatus()
|
|
{
|
|
if (NetworkManager.Singleton == null)
|
|
{
|
|
connectionStatus = "No NetworkManager";
|
|
return;
|
|
}
|
|
|
|
if (NetworkManager.Singleton.IsServer && NetworkManager.Singleton.IsHost)
|
|
connectionStatus = "Host";
|
|
else if (NetworkManager.Singleton.IsServer)
|
|
connectionStatus = "Server";
|
|
else if (NetworkManager.Singleton.IsClient)
|
|
connectionStatus = NetworkManager.Singleton.IsConnectedClient ? "Connected" : "Connecting...";
|
|
else
|
|
connectionStatus = "Disconnected";
|
|
}
|
|
|
|
public void StartHost()
|
|
{
|
|
UpdateTransportSettings();
|
|
NetworkManager.Singleton.StartHost();
|
|
Debug.Log("[Network] Started as Host");
|
|
}
|
|
|
|
public void StartClient()
|
|
{
|
|
UpdateTransportSettings();
|
|
NetworkManager.Singleton.StartClient();
|
|
Debug.Log($"[Network] Connecting to {ipAddress}:{port}...");
|
|
}
|
|
|
|
public void StartServer()
|
|
{
|
|
UpdateTransportSettings();
|
|
NetworkManager.Singleton.StartServer();
|
|
Debug.Log("[Network] Started as Server");
|
|
}
|
|
|
|
public void Disconnect()
|
|
{
|
|
if (NetworkManager.Singleton != null)
|
|
{
|
|
NetworkManager.Singleton.Shutdown();
|
|
Debug.Log("[Network] Disconnected");
|
|
}
|
|
}
|
|
|
|
private void UpdateTransportSettings()
|
|
{
|
|
if (transport != null)
|
|
{
|
|
transport.SetConnectionData(ipAddress, port);
|
|
}
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
if (Application.isPlaying && transport != null)
|
|
{
|
|
UpdateTransportSettings();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// MPP 가상 플레이어 복제본 에디터인지 확인합니다.
|
|
/// </summary>
|
|
private static bool IsVirtualProjectClone()
|
|
{
|
|
string[] arguments = Environment.GetCommandLineArgs();
|
|
for (int i = 0; i < arguments.Length; i++)
|
|
{
|
|
if (string.Equals(arguments[i], "--virtual-project-clone", StringComparison.OrdinalIgnoreCase))
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|