네트워크 멀티플레이 대응

This commit is contained in:
2026-01-31 20:49:23 +09:00
parent 1152093521
commit c5bcf265d0
69 changed files with 2766 additions and 1392 deletions

View File

@@ -0,0 +1,62 @@
using Unity.Netcode;
using UnityEngine;
namespace Northbound
{
public abstract class TeamMemberNetworkBehaviour : NetworkBehaviour, ITeamMember
{
[SerializeField] protected TeamType initialTeam = TeamType.Player;
protected NetworkVariable<TeamType> _team = new NetworkVariable<TeamType>(
TeamType.Neutral,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server
);
public event System.Action<TeamType> OnTeamChanged;
public override void OnNetworkSpawn()
{
base.OnNetworkSpawn();
if (IsOwner)
{
if (_team.Value == TeamType.Neutral)
{
_team.Value = initialTeam;
}
}
_team.OnValueChanged += OnTeamValueChanged;
UpdateTeamVisuals();
}
public override void OnNetworkDespawn()
{
_team.OnValueChanged -= OnTeamValueChanged;
base.OnNetworkDespawn();
}
public TeamType GetTeam() => _team.Value;
public void SetTeam(TeamType team)
{
if (!IsOwner) return;
TeamType previousTeam = _team.Value;
_team.Value = team;
Debug.Log($"<color=cyan>[{GetType().Name}] {gameObject.name} team changed: {TeamManager.GetTeamName(previousTeam)} → {TeamManager.GetTeamName(team)}</color>");
}
protected virtual void OnTeamValueChanged(TeamType previousValue, TeamType newValue)
{
OnTeamChanged?.Invoke(newValue);
UpdateTeamVisuals();
}
protected virtual void UpdateTeamVisuals()
{
}
}
}