네트워크 멀티플레이 대응
This commit is contained in:
62
Assets/Scripts/TeamMemberNetworkBehaviour.cs
Normal file
62
Assets/Scripts/TeamMemberNetworkBehaviour.cs
Normal 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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user