跳到主要内容

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。