沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


index

📚 差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
index [2023/11/28 23:53] bibiboxsindex [2024/05/02 20:59] (当前版本) bibiboxs
行 1: 行 1:
 <markdown> <markdown>
-World/Main*+《沙盘引擎》主页
  
-## Event+## 公告信息 
 +> - ==本页使用了[translate.js](http://translate.zvo.cn/ "translate.js")网页翻译方案,如果你希望使用浏览器扩展等翻译工具(需要查看默认原生语言),请将语言切换为【简体中文】。== 
 +> - 我们计划于`2024-05`编写一份**完整的线性文档**(玩家介绍+开发者指引),敬请期待!
  
-### OnScriptLoad()+## 快速介绍 
 +### 这是什么? 
 ++ 是一款使用[Unity](https://unity.com/ "Unity")制作的**3D游戏** 
 ++ 更多地,是一个以创意作为燃料的==**引擎**==
  
-> 当**世界端脚本**被完整加载后调用。 +### 为了什么? 
-++ 提供一个==**单机+联机**==双模式的游戏平台。 
-> 如果需要获取到一些初始化传递数据,可通过`SetGlobalVars() | GetGlobalVars()`以及`本地player.UserData`等方式来读写++ 帮助游戏开发者==**快速建立**==理想Demo
  
 +### 怎么玩?
 ++ 对于**单机**玩家:在拥有==**引擎**== 的基础上
 +  自行选择游戏 ==**模组**==游玩,享受独自的乐趣
 ++ 对于**联机**玩家:选择心水的==**模组**==,找到志同道合的伙伴,开始热火朝天/怡然自得的沙盘世界体验
 ++ 对于**开发者**:只需要一份创意想法,最简单至只用==**记事本**==即可实现项目创造,抛弃传统工具的复杂环境配置和实现方法
  
 +<iframe src="https://store.steampowered.com/widget/926200/" frameborder="0" width="1280" height="190"></iframe>
  
-### OnScriptUnload()+## 快速导航 
 +### 名词解释 
 ++ **沙盘引擎:**你的游戏机 
 ++ **游戏模组:**你的游戏 
 ++ **模型:**游戏里的物品 
 ++ **代码:**游戏的运行规则 
 ++ **玩游戏:**启动引擎+选择玩法模组
  
-> 当脚即将被释放时调用。+### 玩家 
 ++ [获取引擎程序](releases/#优先测试版
 ++ [获取游戏模组](releases/#优先测试版本)
  
 +### 开发者
 ++ [流程速览](thread/mod-dev-process)
 ++ [静态资源](extend/)
 ++ [动态实现](developer/)
  
  
-### OnFrameUpdate( deltaTime )+## 引擎介绍 
 +==**原生资源库、多人联机支持、轻量级脚本API编写...沙盘的潜力不只这些!**==
  
-> 当世界端加载成后每帧调用+==**《沙盘引擎》是一份全支持模组的游戏,同样也是制作游戏的开发工具**==
  
-不应该将**过于复杂**的函数此处执行,可能会影响服务器运算。+官方Wiki(本站)正努力建设中部分页面可能仍然处于未建立的状态,我们正在努力的完善中!
  
-```javascript +**《沙盘引擎》是完完全全的社区项目,单纯出于兴趣的用爱发电和制作,请多给一些时间和理解~**。
-function OnFrameUpdate( deltaTime:float ) //增量时间 +
-```+
  
  
 +## 里程碑记录
 +- **《沙盘引擎》Steam商店于2024-03-30正式公开**
 +- 《沙盘引擎》完整版初步定于2024年10月正式发布
 +- ==2023-12月初将开启**首个公开测试版本**,欢迎加入QQ群聊参与测试。==
 +- ==2023-11月初将开启**初代玩家**内测版本,欢迎加入QQ群聊参与测试。==
 +- 官方Wiki预计在2023-09月进行进阶完善,敬请期待,届时会有更适合阅读的版本。
 +- 开发者文档已在2023-08月大部分完善,可根据需要参考。
 +- 如果你对此游戏有兴趣,欢迎加入群聊[《沙盘引擎》交流群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=OR35HE4466TMtdZdeVqplxQRh4NOxoR8&authKey=vTPGzRrnZG5EnSKkXkFg8vCVTYpLzqUbhvXowQ6K5yZ5fZmX9EI0z1IO4BxExTId&noverify=0&group_code=798458058 "《沙盘引擎》交流群")。
  
-### OnThrowCastTriggertag, point)+![](asset:1701938740376.webp)
  
-> 当`ThrowCast`触发碰撞后调用。 
-> 
-> **此方法支持`return bool`(可选),这将影响一些Throw是否执行其自带绑定Action方法,事件返回值默认为`true`。** 
-> 
-> 例如:`CreateThrowCast()`时在末尾参数绑定了一个`Action`,当ThrowCast发生碰撞后会优先调用当前事件,如果此处代码返回`false`则会阻止其**绑定Action**方法执行(如:默认RPG武器等,如果返回`false`将不会产生爆炸效果)。 
  
-```javascript +## 版本信息
-function OnThrowCastTrigger( tag: string, point: Vector ): bool +
-```+
  
- +> **版本更新日志(Changelog):https://sengine.mp-gamer.com/changelog**
  
-### OnTimeChangeoldTime, newTime )+==我们正在抓紧开发第一个[正式测试版本](releases "测试版本"),敬请期待。==
  
-> 当世界时间生改变时调用+==《沙盘引擎》预计在2024年,上架及布**Steam商店**==
  
-```javascript 
-function OnTimeChange( oldTime, newTime ) 
-{ 
-    DLog("OldTime: " + oldTime.Hour + "-" + oldTime.Minute); 
-    DLog("NewTime: " + newTime.Hour + "-" + newTime.Minute); 
-} 
-``` 
  
- +## 引擎概述
  
-## Function+![](asset:1701938725667.webp)
  
-### Exec()+<font color=#FF0088>**在《沙盘引擎》主世界框架中,在“游戏”里创造游戏。这里内置了诸多基于CC协议的资源及模型库,发挥你的想象力,快速实现理想中的世界,通过JavaScript脚本赋予世界生命!**</font>
  
-执行段脚本代码(Client\World脚本不互通)+<font color=#17C0FF>**作为玩家:只需拥有份《沙盘引擎》游戏,即可享受任何基于此创作的各类玩法体验**</font>
  
-```javascript +## 引擎特性分析
-function Exec( jsCode: string ) +
-```+
  
 +### 主要特点
  
 +  * **高度自定义**:<font color=#FF9200>包括但不限于游戏菜单、UI界面、开放API脚本。</font>
 +  * **轻量级脚本**:<font color=#FF5200>无需IDE或特殊编辑器,脚本可被直接修改(JavaScript)。</font>
 +  * **开放的资源库**:<font color=#00CD15>内置数千个基础资源(角色、载具、建筑、模型、音乐等),同时支持玩家自定义上传至模组(衍生作品)。</font>
 +  * **丰富的API**:<font color=#FF0085>只需一行代码即可以产生爆炸、建立物体、改变天气等等功能。配合资源模型库,就可以非常快速地搭建游戏Demo,只需要考虑游戏逻辑。</font>
 +  * **内置地图编辑器**:<font color=#FF0B00>直接在游戏内创作通用世界地图(除非地图包含特定模组),几乎所有基于《沙盘引擎》的游戏都可以直接载入,生态丰富。</font>
 +  * **原生联机支持**:<font color=#00AAFF>无论开发者的目标是单机还是联机游戏,均是以“本地服务器”概念开发(简单理解:单人游戏实际上是一个1人的联机服务器,其他功能API调用后也会同步到所有人)。</font>
 +  * **允许商用的打包输出**:<font color=#00AAFF>创作者制作**衍生作品**后,可以直接以**模组游戏**的形式进行免费商用(对于独立打包类的特殊需求,也可以实现)。</font>
  
-### SetHostName()+### 不完美之处
  
-> 设置主机房间名称(主机房间被公开或查询时单机游戏以忽略)。 +  * **平台局限性**:前引擎仅支持PC端未来能支持移动端及其他平台。 
-+  * **有限开发**:游戏创作主题玩法主要偏向开放世界与自由模式。**差异过大**的主题和玩法可能会提升开发难度
-**默认值:**`Sandtable Engine Server`+
  
-```javascript 
-function SetHostName( name: string ) 
-``` 
  
-- **name:**主机房间名称文本(最大限制在64字符)。 
  
 +## Indienova 游戏资料
  
 +https://indienova.com/g/SandtableEngine/presskit
  
-### GetHostName() 
  
-> 获取主机房间名称。 
  
-```javascript +## 引擎开发者及工作室信息
-function GetHostName(): string +
-```+
  
 +https://sengine.mp-gamer.com/studio
  
  
-### SetHostInfo() 
  
-> 设置主机房间信息\公告(目前主要用于`TAB`面板封面部分介绍以及有关房间的介绍信息等)。 +## 联系我们 & 加入社区 
-+**有什么好的创意或者想法吗?非常欢迎联系我们让我们看到人在注!** 
-**默认值:`Mod Version: XXX`**+**我们很愿意聆听你对《沙盘引擎》的想法和建议,欢迎勾搭~**
  
-```javascript +- E-Mail:fantasyjoyed@163.com 
-function SetHostInfoinfostring +- QQGroup:[798458058](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=oajEde9NwoO-uozVvZ07GWAyGeJRhP_K&authKey=mu%2BGhjIM0dnc415DDhBAIDeu7rQRj7xEXvq1OAtQmyu6NEsw8ufTjXbzlg3GTEne&noverify=0&group_code=781119508 "798458058"
-```+- Kook:https://kook.top/o6Ggd1 
 +- Discord: https://discord.gg/3xEq9awnxa
  
-- **info:**主机房间信息\公告(最大限制在64字符)。 
  
  
  
-### GetHostInfo() 
  
-> 获取主机房间信息\公告。 
  
-```javascript 
-function GetHostInfo(): string 
-``` 
  
  
  
-### SetPassword() 
  
-> 设置主机房间密码(当主机房间被公开或查询时,单机游戏可以忽略)。 
  
-```javascript 
-function SetPassword( password: string ) 
-``` 
  
  
  
-### GetPassword() 
  
-> 获取主机房间密码。 
  
-```javascript 
-function GetPassword(): string 
-``` 
  
  
  
-### SetMaxPlayers() 
  
-> 设置主机房间最大人数(支持范围`1~100人`)。 
  
-```javascript 
-function SetMaxPlayers( num: int ) 
-``` 
- 
- 
- 
-### GetMaxPlayers() 
- 
-> 获取主机房间最大玩家数。 
- 
-```javascript 
-function GetMaxPlayers(): int 
-``` 
- 
- 
- 
-### SetTime() 
- 
-> 设置当前游戏世界时间。 
-> 
-> **注意:每次加载新世界场景后,时间都将重新替换为【地图文件配置——默认时间】。** 
- 
-```javascript 
-function SetTime( hour: int, minute: int ) 
-``` 
- 
- 
- 
-### GetTime() 
- 
-> 获取游戏世界时间实例(`WorldTime`)。 
- 
-```javascript 
-let worldTime = GetTime(); 
-DLog("Hour: " + worldTime.Hour + ", Minute: " + worldTime.Minute); 
-``` 
- 
- 
- 
-### SetWeather() 
- 
-> 设置游戏世界天气,具体参考[天气ID](reference/instances)文档。 
-> 
-> **注意:每次加载新世界场景后,天气都将重新替换为【地图文件配置——随机天气(天气池)】。** 
- 
-```javascript 
-function SetWeather( weather: int ) 
-``` 
- 
- 
- 
-### GetWeather() 
- 
-> 获取游戏世界天气。 
- 
-```javascript 
-function GetWeather(): int 
-``` 
- 
- 
- 
-### GetRandomWeather() 
- 
-> 随机获取游戏世界天气,获取方式根据参数决定。 
- 
-```javascript 
-function GetRandomWeather( usePool: bool = true ): int 
-``` 
- 
-- `usePool`:是否使用【地图文件天气池】概率随机,否则是索引硬随机 
- 
- 
- 
-### SetGravity() 
- 
-> 设置游戏世界物理重力,分别为`横向X、纵向Y、前后Z`,默认为`Vector(0.0, -1.0, 0.0)`(正常下落的引力,且没有方向偏移)。 
- 
-```javascript 
-function SetGravity( space: Vector ) 
-``` 
- 
- 
- 
-### GetGravity() 
- 
-> 获取游戏世界物理重力。 
- 
-```javascript 
-function GetGravity(): Vector 
-``` 
- 
- 
- 
-### SetWorldColor() 
- 
-> 设置游戏世界叠加色调,默认为白色`Color(255, 255, 255)`。 
-> 
- 
-```javascript 
-function SetWorldColor( color: Color ) 
-``` 
- 
- 
- 
-### GetWorldColor() 
- 
-> 获取游戏世界叠加色调。 
- 
-```javascript 
-function GetWorldColor(): Color 
-``` 
- 
- 
- 
-### SetGameRule() 
- 
-> 设置指定游戏规则(不区分大小写),可用于修改更多细节内容,具体参考[游戏规则Keys](reference/instances)文档。 
-> 
-> 修改时请严格确保`Key > Value`类型正确,否则可能会引起异常。 
-> 
-> 此功能不仅可修改《沙盘引擎》内置规则,在有需要情况下,也可以作为自定义规则字典填充(前提:避开内置key值)。 
-> 
-> **注意:此选项设置的值只在当前世界生效,切换其他世界后将重置。** 
- 
-```javascript 
-function SetGameRule( key: string, value: any ) 
-``` 
- 
- 
- 
-### ResetGameRule() 
- 
-> 重置指定游戏规则默认数值。 
- 
-```javascript 
-function ResetGameRule( key: string ) 
-``` 
- 
- 
- 
-### ResetAllGameRules() 
- 
-> 重置所有游戏规则默认数值。 
- 
-```javascript 
-function ResetAllGameRules() 
-``` 
- 
- 
- 
-### GetGameRule() 
- 
-> 获取指定游戏规则数值(不区分大小写),具体参考[游戏规则Keys](reference/instances)文档。 
- 
-```javascript 
-function GetGameRule( key: string, defaultValue: any = null ) 
-``` 
- 
- 
- 
-### GetServerTickCount() 
- 
-> 获取世界脚本运行时间秒数(float)。 
- 
-```javascript 
-function GetServerTickCount(): float 
-``` 
- 
- 
- 
-### Message() 
- 
-> 给全服在线玩家发送一条公屏消息(在消息框中)。 
- 
-```javascript 
-function Message( text: string ) 
-``` 
- 
- 
- 
-### Announce() 
- 
-> 给全服在线玩家发送一条**公告\大文字**消息,具体类型样式参考[《世界资源实例汇总》](https://sengine.mp-gamer.com/reference/instances)。 
- 
-```javascript 
-function Announce( text: string, type: int = 0, time: float = 6 ) 
-``` 
- 
- 
- 
-### Subtitle() 
- 
-> 给全服在线玩家发送一条**底部字幕**消息。 
- 
-```javascript 
-function Subtitle( text: string ) 
-``` 
- 
- 
- 
-### RayTrace() 
- 
-> 生成一条**检测射线**,可用于检测**两点之间**实体对象的碰撞。 
-> 
-> 多数情况下,建议使用World端方法进行检测,而不是Client端方法。 
- 
-```javascript 
-function RayTrace( start: Vector, over: Vector, flags: int = 0 ): RayTraceResult 
-``` 
- 
--  `start`:起始点 
- 
--  `over`:结束点 
- 
--  `flags`:筛选layer层,默认为0,可用于筛选判断[实体类型层(位)](reference/instances) 
-- `RayTraceResult`:返回值([类型参考](scripting/native/main)) 
- 
-```javascript 
-//只判断Character + Vehicle 
-let result = RayTrace(Vector(0, 0, 0), Vector(10, 0, 10), 2 + 4); 
-DLog(result.IsHit); 
-DLog(result.Point); 
-DLog(result.Entity) 
-``` 
- 
- 
- 
-### CreateDamage() 
- 
-> 生成一处**范围原生伤害**,只有范围伤害的效果。 
- 
-```javascript 
-function CreateDamage( pos: Vector, damage: int, radius: float, from: Entity = null, damageType: int = 0, ignoreSelf = false ) 
-``` 
- 
-- `pos`:起始点 
- 
-- `damage`:伤害值 
-- `radius`:伤害产生范围 
- 
-- `from`:发起伤害单位(可空) 
-- `damageType`:[伤害类型](reference/instances) 
- 
-- `ignoreSelf`:是否忽略**发起伤害单位**自身(如`from`为空则没有意义) 
- 
- 
- 
-### CreateExplosion() 
- 
-> 在指定位置**生成一场爆炸**,不同爆炸类型有不同的效果范围和伤害。 
- 
-```javascript 
-function CreateExplosion( pos: Vector, type: int = 0 ) 
-``` 
- 
-| Type | 说明     | 
-| ---- | -------- | 
-| 0    | 小型爆炸 | 
-| 1    | 中型爆炸 | 
-| 2    | 大型爆炸 | 
- 
- 
- 
-### CreateExplosionForce() 
- 
-> 在指定位置生成一场**物理爆炸力(没有伤害)**,附近的物理刚体将受到力影响(类似爆炸冲击力)。 
- 
-```javascript 
-function CreateExplosionForce( pos: Vector, force: float, radius: float ) 
-``` 
- 
- 
- 
-### CreateRayPowerCast() 
- 
-> 在指定位置生成一条**光线射线(不会穿透物体)**,与射线检测功能基本相同,但会额外多出光线效果(例如:枪械弹道)。 
- 
-```javascript 
-function CreateRayPowerCast( start: Vector, over: Vector, color: Color, width: float = 0.2, time: float = 0.1 ) 
-``` 
- 
- 
- 
-### CreateThrowCast() 
- 
-> 在指定位置生成一条**投掷抛物射线(物理)**,与光线射线功能基本相同,但会额外多出物理效果。 
-> 
-> **注意:投掷射线将在发生碰撞后销毁,并触发【碰撞后事件】(Event优先级:`OnThrowCastTrigger() > BindAction()?`)** 
- 
-```javascript 
-function CreateThrowCast( start: Vector, direction: Vector, color: Color, width: float = 0.2, speed: float = 1.0, tag: string = "", action: Action<Vector> = null ) 
-``` 
- 
-```javascript 
-CreateThrowCast(Vector(0, 0, 0), Vector(0, 0, 1), Color(255, 0, 0), 0.2, 1, "test_throw", (point) => { 
-    DLog("Throw Over: " + point); 
-}); 
-``` 
- 
-- **start:**射线起点坐标 
-- **direction:**射线发射方向向量 
-- **color:**射线颜色 
-- **width:**射线宽度 
-- **speed:**投掷物理速度 
-- **tag:**标签,仅有识别作用,主要用于`OnThrowCastTrigger() `事件参数 
-- **action:**碰撞时触发方法(参数:`Vector`) 
- 
- 
- 
-### CreateModelThrowCast() 
- 
-> 在指定位置生成一条**包含模型的投掷抛物射线(物理)**,与`CreateThrowCast()`功能基本相同,但会额外多出子模型效果(例如射出的子弹、炮弹、弓箭、手榴弹模型等)。 
- 
-```javascript 
-function CreateModelThrowCast( model: int, localPos: Vector, localAngle: Vector, localScale: Vector, start: Vector, over: Vector, color: Color, width: float = 0.2, time: float = 0.1 ) 
-``` 
- 
-- **model:**子模型ID 
-- **localPos:**子模型的[本地]坐标 
-- **localAngle:**子模型的[本地]欧拉角度 
-- **localScale:**子模型的[本地]缩放 
-- *其他参数与`CreateThrowCast()`*相同 
- 
- 
- 
-### PlaySoundForAll() 
- 
-> 为所有当前在线的玩家播放一段2D音频。 
-> 
-> 注意:此操作相当于封装了**遍历player.PlaySound()**方法,播放的是客户端本地声音,后加入的玩家不会听到此声音。 
- 
-```javascript 
-function PlaySoundForAll( audioID: int, loop: bool = false, volume: float = 1f ) 
-``` 
- 
- 
- 
-### Play3DSoundForAll() 
- 
-> 为所有当前在线的玩家播放一段3D音频。 
-> 
-> 注意:此操作相当于封装了**遍历player.Play3DSound()**方法,播放的是客户端本地声音,后加入的玩家不会听到此声音。 
- 
-```javascript 
-function Play3DSoundForAll( audioID: int, pos: Vector, radius: float = 80, loop: bool = false, volume: float = 1f ) 
-``` 
- 
- 
- 
-### PlaySound() 
- 
-> 在服务器世界播放一段2D音频(与客户端音频方法相似,但播放的声音不受`Client\Audio`类控制,客户端也无法停止播放)。 
-> 
-> 即便稍后进入的玩家也会同步播放此声音(播放进度同步),音频实例将一直存在世界中,直到被(自动\手动)销毁。 
- 
-```javascript 
-function PlaySound( audioID: int, loop: bool = false, volume: float = 1f ): string //UUID 
-``` 
- 
- 
- 
-### Play3DSound() 
- 
-> 在服务器世界播放一段2D音频(此方法播放的声音不受`Client\Audio`类控制,客户端也无法停止播放)。 
-> 
-> 即使后进入的玩家也会同步播放此声音(播放进度同步),音频实例将一直存在世界中,直到被(自动\手动)销毁。 
- 
-```javascript 
-function Play3DSound( audioID: int, pos: Vector, radius: float, loop: bool = false, volume: float = 1f ): string //UUID 
-``` 
- 
- 
- 
-### StopSound() 
- 
-> 停止并销毁一个服务器世界声音实例。 
- 
-```javascript 
-function StopSound( uuid: string ): bool //返回false表示不存在UUID实例 
-``` 
- 
- 
- 
-### PauseSound() 
- 
-> 暂停播放一个服务器世界声音实例。 
-> 
-> 注意:此操作不会销毁实例,如果不使用时忘记销毁,可能会一直占用服务器资源。 
- 
-```javascript 
-function PauseSound( uuid: string ): bool //返回false表示不存在UUID实例 
-``` 
- 
- 
- 
-### ResumeSound() 
- 
-> 继续播放一个服务器世界声音实例。 
- 
-```javascript 
-function ResumeSound( uuid: string ): bool //返回false表示不存在UUID实例 
-``` 
- 
- 
- 
-### SetSoundWorld() 
- 
-> 设置一个**服务器世界声音实例**的网络世界(不同世界将无法听到声音)。 
- 
-```javascript 
-function SetSoundWorld( uuid: string, world: int ): bool //返回false表示不存在UUID实例 
-``` 
- 
- 
- 
-### BindKey() 
- 
-> 绑定一个**服务器按键**(当前场景有效),可用于监听**某个玩家的某键**被按下\抬起。 
-> 
-> 按键参数可填写**UnityEngine.KeyCode(Enum)**==索引或名称==作为按键参数。 
- 
-```javascript 
-function BindKey( keyTag: string, key1: string, key2: string = "None", key3: string = "None" ) 
-``` 
- 
-- `keyTag`:按键标签(用于识别) 
-- `key1`:按键1标准名称(如'H' 
-- `key2`:默认'None',否则表示组合键 
-- `key3`:默认'None',否则表示组合键 
- 
- 
- 
-### UnbindKey() 
- 
-> 取消绑定一个**服务器按键**,对其按键监听不再生效。 
- 
-```javascript 
-function UnbindKey( keyTag: string ) 
-``` 
- 
- 
- 
-### UnbindAllKey() 
- 
-> 取消绑定所有**服务器按键**,对其按键监听不再生效。 
- 
-```javascript 
-function UnbindAllKey() 
-``` 
- 
- 
- 
-### BindNativeKey() 
- 
-> 绑定一个**服务器监听原生公开按键**(当前场景有效),只可用于监听**某个玩家的某原生按键**被按下\抬起,**不会远程绑定任何原生公开按键**。 
-> 
-> 此功能需要客户端提前绑定了`BindNativeKey()`才有监听意义。 
- 
-```javascript 
-function BindNativeKey( keyTag: string ) 
-``` 
- 
-- `keyTag`:按键标签(用于识别) 
- 
- 
- 
-### UnbindNativeKey() 
- 
-> 取消绑定一个**服务器监听原生公开按键**,对其按键监听不再生效。 
- 
-```javascript 
-function UnbindNativeKey( keyTag: string ) 
-``` 
- 
- 
- 
-### UnbindAllNativeKey() 
- 
-> 取消绑定所有**服务器监听原生公开按键**,对其按键监听不再生效。 
- 
-```javascript 
-function UnbindAllNativeKey() 
-``` 
- 
- 
- 
-### WriteFile() 
- 
-> 写入一个文件到模组空间目录`Mod/Space`,安全起见,写入文件尺寸限制2MB,且有最大文件数量限制(`Space`目录最多可写【20】个文件)。 
-> 
-> 此功能通常用于实现**游戏\服务器存档、配置**等写入,建议使用JSON功能进行序列化。 
- 
-```javascript 
-function WriteFile( fileName: string, content: string ) 
-``` 
- 
- 
- 
-### ReadFile() 
- 
-> 从模组空间目录读取一个文件,如果文件不存在则返回空白文本。 
- 
-```javascript 
-function ReadFile( fileName: string ): string 
-``` 
- 
- 
- 
-### SetModArchive() 
- 
-> 设置并覆盖**当前模组**的持久化存储数据(字符串,可通过Json扩展,最长限制512字符)。 
-> 
-> 数据内容存储到`ModArchive.json`文件,**任意模组之间可相互获取,但只有当前模组可写入自身数据**。 
-> 
-> ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== 
- 
-```javascript 
-function SetModArchive( content: string ) 
-``` 
- 
- 
- 
-### GetModArchive() 
- 
-> 尝试读取**指定模组**的持久化存储数据(可通过`SetModArchive()`写入修改),如不存在则返回空文本。 
-> 
-> 注意:如果不填写参数,默认获取当前模组的数据。 
- 
-```javascript 
-function GetModArchive( package: string = null ): string 
-``` 
- 
- 
- 
-### SetSaveItem() 
- 
-> 设置并覆盖【存档数据槽(`Slot`)】指定`Key`的项目,并以最终Json的格式存储,仅支持基础类型(`string\number\bool...`)。 
-> 
-> 存档槽默认参数为`0`,如果只用于本地持久化数据存储,或者不需要多存档槽的设计,可以忽略`Slot`参数。 
-> 
-> **注意:此方法最多支持50个存档槽(文件),以及单文件最大1MB的写入空间。有关持久化存档相关内容,无论是单存档、多存档或其他使用场景,都可尝试此方案进行存储。** 
-> 
-> ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== 
- 
-```javascript 
-function SetSaveItem( key: string, value: object, slot: int = 0 ) 
-``` 
- 
-```javascript 
-SetSaveItem("gold", 1000, 0); //Save file to 'SaveData/SaveData_0.json' 
-SetSaveItem("playerlevel", 3, 5); //Save file to 'SaveData/SaveData_5.json' 
-``` 
- 
- 
- 
-### RemoveSaveItem() 
- 
-> 移除【存档数据槽(`Slot`)】指定`Key`的项目**(并非删除存档,而是删除存档中的一个项)**。 
-> 
-> ==(出于安全考虑,此方法仅限World端使用,Client端是只读的)== 
- 
-```javascript 
-function RemoveSaveItem( key: string, slot: int = 0 ) 
-``` 
- 
-```javascript 
-SetSaveItem("playerlevel", 3, 10); //Set level to 3 
-RemoveSaveItem("playerlevel", 10); //Remove 'playerlevel' item 
-``` 
- 
- 
- 
-### GetSaveItem() 
- 
-> 尝试读取【存档数据槽(`Slot`)】指定`Key`的项目内容,如不存在则返回`defaultValue`。 
- 
-```javascript 
-function GetSaveItem( key: string, slot: int = 0, defaultValue: any = null ): any 
-``` 
- 
-```javascript 
-SetSaveItem("gold", 1000); //Save file to 'SaveData/SaveData_0.json' 
-DLog("Your coin: " + GetSaveItem("gold")); 
-``` 
- 
- 
- 
-### ExistSaveItem() 
- 
-> 判断【存档数据槽(`Slot`)】指定`Key`的**项目内容是否为空(`bool`)**。 
- 
-```javascript 
-function ExistSaveItem( key: string, slot: int = 0 ): bool 
-``` 
- 
-```javascript 
-DLog(ExistSaveItem("gold")); 
-``` 
- 
- 
- 
-### ExistSaveData() 
- 
-> 判断【存档数据槽(`Slot`)】存档文件是否已被创建(`bool`)。 
- 
-```javascript 
-function ExistSaveData( slot: int = 0 ): bool 
-``` 
- 
- 
- 
-### DeleteSaveData() 
- 
-> 删除【存档数据槽(`Slot`)】存档文件,包括其文件内所有数据。 
-> 
-> ==(出于安全考虑,此方法仅限World端使用)== 
- 
-```javascript 
-function DeleteSaveData( slot: int = 0 ): bool 
-``` 
  
  
index.1701186800.txt.gz · 最后更改: 2023/11/28 23:53 由 bibiboxs