沙盘引擎 (SEngine)

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

用户工具

站点工具


侧边栏

developer:qa

📚 开发功能指南及问答(Q&A)

《沙盘引擎》内置了比较丰富的代码体量,很多功能并不能逐一进行详细介绍,开发者应该善用关键字搜索功能,以快速寻找到自己期望的功能。

本文档仅为开发者介绍一些常用或相对关键的功能关键字指南,具体API使用方法以及示例代码请根据关键字查阅脚本API列表相关文档。

注意:网站右上角可进行关键字搜索,善用搜索功能!

📒 世界关键类型对象

《沙盘引擎》除了基础的世界框架外,核心玩法基本是由几个关键类型对象组成。

对象名 说明
Model 静态、动态的模型对象
世界中任何可见的模型物品基类
Character 任何拥有生命力的角色、生物
世界中最为关键的元素和操控介质
Vehicle 任何拥有可驾驶特征的载具、车辆、飞行器
Pickup 类似拾取物、光圈触发器(进入\离开检测)、小型检查点
Checkpoint 另外一种光圈触发器(进入\离开检测)、更适合中大型检查点

📒 加载指定场景

加载《沙盘引擎》公开的几个可用的场景(索引)。

通常包括:游戏世界、地图编辑器等。

一般情况下不需要使用此代码,除非希望进入地图编辑器等特殊场景。

Client.LoadNativeScene();

📒 加载内置界面

加载《沙盘引擎》内置的原生通用界面(索引)。

通常包括:游戏设置菜单、游戏模组选择界面、原生开发者名单界面、多人联机浏览器等。

Client.CreateNativeView();

📒 创建内置UI菜单(NativeMenu)

📒 加载屏幕后处理

在开发过程中,有时候希望在特定情况下屏幕多一些画面效果(例如:模糊、滤镜、特效),这些效果统称为屏幕后处理

//首先需要获取到指定Effect类型返回(索引0)
let effect = GetScreenEffect(0);
//然后进行数值设定即可,类型和属性基于SE.ScreenEffect
//类型几乎是通用的,具体可参考API详情文档
effect.Intensity = 1; //0~1
effect.Color = Color(255, 255, 255, 255);

📒 自定义UI界面

参考《Client/GUI》

📒 自定义网络数据

在默认脚本框架下,World\Client脚本API内置了很多可能用到的事件(Event)和方法(Function)

但是,在实际开发阶段可能会遇到希望由【World端】调用【Client端】的方法或属性(反之亦然),或者希望服务端和客户端做一些信息交互(比如进行一些基础数值的传递或者事件激活)。

此类相关需求需要使用自定义网络数据功能来实现。

//World
Function -> player.SendData()
Event -> function OnPlayerStreamData( player, number, data )
 
//Client
Function -> SendDataToServer()
Event -> OnServerStreamData( number, data )

以上提供【自定义网络数据】功能的API关键字,开发者可前往《脚本开发及API》文档搜索查看

📒 获取游戏世界坐标

在游戏开发过程中,经常会遇到需要指定位置坐标的情况(例如:想要实现传送瞬移、移动物体、建造等功能),想要获取相关位置的坐标,可通过以下几个方式实现。

  • 编写一个简单指令(例如/s),功能即是DLog输出到文件一行当前玩家角色所在位置坐标(player.Entity.Pos),这样即可控制玩家走到想要记录的地方,然后输入/s即可
  • 通过地图编辑器临时物体来实现记录(更直观)
  • 如果有更扩展\批量的坐标记录需求,可参考下方【地图坐标与脚本通信交互】

📒 地图坐标与脚本通信交互

为了能使《沙盘引擎》地图更加具有扩展和兼容性,因此并没有将许多功能强制绑定在地图文件中。

有时候无论是其他人制作的地图,还是原创游戏自带的地图,都希望将一些坐标批量、可筛选的存到某个容器内,而不是一个一个坐标记录写死在脚本中(例如:随机乱斗点坐标、生存游戏物资点坐标、大逃杀游戏空投点等),这就可以通过以下的方式来很方便的实现。

注意:当开发者或地图建造者在制作一些有目的性\扩展性的地图时,应该善用以下操作。

  1. 打开地图编辑器,加载希望编辑的地图
  2. 找到一些想要批量存储关键坐标的地方,将地图编辑器资源库内【ID:5】对象VectorPoint)放置到目标位置(图标仅在地图编辑器可见,游戏世界内是完全透明的,只有存储作用),并且可以将目标物体填写【物体标签Tag】(这样有助于多种筛选,允许重复Tag,例如将所有复活点坐标都命名为spawnpoint
  3. 重复多次以上操作后,保存当前地图
  4. 开始编写脚本,在需要用到坐标的地方,使用VectorPoint相关功能API+循环遍历,进行筛选、获取,最终得到坐标、角度甚至缩放等
  5. 大功告成,将这些坐标按照需求使用即可(例如:存到脚本数组中,等待使用)
//Test Code
//以下代码实例获取了所有[spawnpoint]标签的坐标点
let tag = "spawnpoint";
let count = GetVectorPointCount(tag);
for(let i=0;i<count;i++)
{
    DLog(GetVectorPoint(tag, i).Pos);
}

📒 获取引擎内模型的缩略图(Icon)

在部分游戏的开发过程中,可能会遇到需要使用模型缩略图、图标等情况(例如制作背包系统),这并不需要重新导入一份模型图片,可以考虑使用引擎自带的获取缩略图APIGUI.GetModelPreview(),虽然这可能并非最优选择,但是会节省很多制作时间。

当然,题外话,对于更美观、更高级的背包系统等,可以考虑重画Icon并作为图片资源导入使用。

详情API参考《Client/GUI文档》

📒 引擎图片资源与FGUI交互

在部分游戏的开发过程中,可能会遇到需要将引擎Texture资源(包括导入的图片资源)作为UI元素使用的情况,这可以通过GUI.TextureToUI()将其转换为FGUI可识别的NTexture资源。

详情API参考《Client/GUI文档》

developer/qa.txt · 最后更改: 2023/10/16 15:12 由 bibiboxs