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。