IPlayerData
Контракт для доступа к состоянию игрока из игрового кода.
В онлайн-мире те же свойства возвращает сервер, а вызывающий код не меняется.
Пространство имён: OpenMon.MCE.SDK
Определение
public interface IPlayerData
{
Roster PlayerRoster { get; }
int Money { get; }
string PlayerName { get; }
int BadgeCount { get; }
}
Свойства
PlayerRoster
Текущая партия монстров игрока.
Тип: Roster
Roster содержит до 6 объектов MonsterInstance. Доступ к отдельным участникам — по индексу:
Roster roster = player.PlayerRoster;
MonsterInstance first = roster[0]; // Lead monster
int teamSize = roster.RosterSize; // How many monsters in the party
Money
Значение денег, которое хранит GlobalGameData.
Тип: int
GlobalGameData.Money существует для предпросмотра сохранения, и движок записывает его, когда игра сохраняется. Баланс, который игрок тратит, находится в Bag игрока (PlayerBag.Money), поэтому между сохранениями Money может отставать от него.
PlayerName
Имя ассета CharacterData игрока (персонажа, которого выбрал игрок).
Тип: string
BadgeCount
Количество значков залов, заработанных игроком.
Тип: int
Пример использования
using OpenMon.MCE.SDK;
using Zenject;
public class PlayerHUD : MonoBehaviour
{
// Only IMonsterCaptureEngine is bound in DI; reach subsystems through it.
[Inject] private IMonsterCaptureEngine engine;
private IPlayerData player;
private void Awake()
{
player = engine.Player;
}
[SerializeField] private Text nameLabel;
[SerializeField] private Text moneyLabel;
[SerializeField] private Text badgeLabel;
[SerializeField] private Text teamLabel;
private void Update()
{
nameLabel.text = player.PlayerName;
moneyLabel.text = $"${player.Money:N0}";
badgeLabel.text = $"Badges: {player.BadgeCount}/8";
var roster = player.PlayerRoster;
teamLabel.text = $"Team: {roster.RosterSize}/6";
}
}
Не кэшируйте PlayerRoster надолго. Ссылка на партию может измениться после операций сохранения/загрузки. Обращайтесь к player.PlayerRoster каждый раз, когда он нужен.