Other

玩家设定

玩家是指游戏中玩家,每个玩家都对应一个玩家身份(单机版只有一个玩家)。

玩家设定

玩家是指游戏中玩家,每个玩家都对应一个玩家身份(单机版只有一个玩家)。

玩家拥有玩家的自定义属性玩家变量以及玩家的场景对象

玩家的自定义属性

  • 高级作者通过可视化编辑器编辑玩家的属性,以及通过脚本实现玩家属性的功能,
  • 以便该游戏模板可以可视化调整相关的玩家参数,设定后每个玩家都拥有这些属性。
  • 比如TBRPG-梦之剑模板中预设了金币和背包、战斗相关属性,玩家则拥有了金币和背包以及战斗相关设定,
  • 而这些属性之所以不是系统自带而是作为自定义属性是因为不是每个游戏都有金币和背包这些设定的,不同游戏有不同的设定。

更多请参考自定义玩家设定。

alt text

玩家的场景对象

每个玩家默认拥有一个场景对象

  • 虽然默认玩家只拥有一个场景对象数据,但可以通过逻辑编写拥有多名队员或控制多个场景对象,
  • 比如ARPG-黑之书就是拥有多名队员的ARPG游戏模板,其他队员在加入时是创建出来的场景对象,而在切换场景时会讲这些对象带到新的场景。
  • 储存时由于系统会自动记录当前场景的场景对象,所以只要追加记录关键数据(如队友的场景对象ID)即可。

同时具备这个场景对象对应的场景对象原型预设的自定义场景对象属性自定义显示对象

  • 比如RPG中通常玩家的场景对象和NPC都具备行走图,而行走图即是一种自定义显示对象,同时也可能具备移动速度这样的自定义属性,
  • 这些都是通过场景对象原型预先设定好的模型,当然也支持设定多种不同的场景对象原型

数据储存

自定义玩家属性和玩家变量都是封装好的系统自动储存,网络版本内核会定期储存至数据库中,而单机版在调用存档相关的功能时储存。

脚本调用:玩家属性

单机版-玩家数据读写

由于单机版只有一个玩家,可通过Game.player访问。

Script.ts
// 读取玩家自定义属性:
Game.player.data.我的自定义属性1
// 操作玩家自定义属性:
Game.player.data.我的自定义属性1=123456;

网络版-客户端玩家数据读取

网络版客户端的玩家自定义数据来源于服务器的同步(同步方式由项目层决定,哪些属性可同步可以在编辑器中预先设定好)。

Script.ts
// 获取我的玩家的属性
Game.player.data.我的自定义属性1
// 获取其他玩家的属性:比如场景上10号对象对应的玩家的属性
let so = Game.currentScene.sceneObjects[10];
// 判定这个对象是否是玩家
if(so.player){
    trace(so.player.data.我的自定义属性1);
}

网络版-服务器玩家数据读写:

找到这个玩家后直接读写他的数据即可,如果需要操作离线玩家或非当前线程下的玩家数据,可以使用系统提供的方法或自己实现相应的逻辑。

Script.ts
// 读取玩家的属性(player是SeverPlayer类的实例或子类的实例)
player.data.我的自定义属性1
// 写入玩家的属性
player.data.我的自定义属性1 = 123;
// 写入非当前线程下的玩家或离线玩家的数据(也就是说在当前线程中无法找到该玩家,但又想操作写入该玩家的数据)
// 参考 ServerPlayer的operationPlayerData方法

Copyright © 2021 - 2025