Перейти к основному содержимому

IPlayerData

Контракт для доступа к состоянию игрока из игрового кода.

iplayer data

В онлайн-мире те же свойства возвращает сервер, а вызывающий код не меняется.

Пространство имён: 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 каждый раз, когда он нужен.