31 lines
1.1 KiB
C#
31 lines
1.1 KiB
C#
|
|
using Fusion;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
// struct quản lý thông tin
|
||
|
|
public struct _PlayerMetaData : INetworkStruct
|
||
|
|
{
|
||
|
|
public NetworkString<_16> Name;
|
||
|
|
public _CharacterClass Class;
|
||
|
|
}
|
||
|
|
|
||
|
|
public class _PlayerDataManager : NetworkBehaviour
|
||
|
|
{
|
||
|
|
// biến này của Fusion sẽ tự động đồng bộ giữa các client và host,
|
||
|
|
// khi có thay đổi sẽ tự động cập nhật ở tất cả các bên
|
||
|
|
[Networked]
|
||
|
|
public NetworkDictionary<PlayerRef, _PlayerMetaData> Players => default;
|
||
|
|
|
||
|
|
// RPC: phương thức này sẽ được gọi từ client hoặc
|
||
|
|
// host để cập nhật thông tin player, sau đó sẽ được gửi
|
||
|
|
// đến state authority (host) để xử lý và đồng bộ lại cho tất cả các client
|
||
|
|
[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
|
||
|
|
public void RPC_UpdatePlayerMetaData(PlayerRef playerRef, _PlayerMetaData metaData)
|
||
|
|
{
|
||
|
|
Players.Set(playerRef, metaData);
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool TryGetPlayerMetaData(PlayerRef playerRef, out _PlayerMetaData metaData)
|
||
|
|
{
|
||
|
|
return Players.TryGet(playerRef, out metaData);
|
||
|
|
}
|
||
|
|
}
|