meta data for this page
📚 Native/Core
原生脚本是一个内置的通用脚本功能类,此分类下还有更多通用的扩展工具类。
标注原生(Native)类型的常量、类型、事件、函数方法等,它们都基于原生Native类。
📒 Const
📘 VECTOR_NULL
三维坐标默认“空”坐标,通常表示不合理或者默认值。
由于Vector是一个值类型,所以表示为空时不应该直接设为null,在通常情况下应该使用常量代替。
const VECTOR_NULL = Vector(-128000, -128000, -128000);
📒 Type
📘 Vector()
三维坐标结构类型,沙盘引擎世界坐标的通用形式,其中Y轴表示高度。
此方法必须使用Equals()判断相等。
let pos = Vector(0, 0, 10); //X, Y, Z //Extend pos.magnitude; //magnitude(向量长度) pos.normalized; //normalized(归一化)
xX轴数值(左右)yY轴数值(上下)zZ轴数值(前后)
📘 Vector2()
二维坐标结构类型,沙盘引擎世界坐标的2D形式。
此方法必须使用Equals()判断相等。
let pos = Vector2(0, 0); //X, Y
xX轴数值yY轴数值
📘 Bounds()
包围盒结构类型,通常用于AABB数据存储。
此方法必须使用Equals()判断相等。
let bounds = Bounds(Vector(0, 0, 0), Vector(0, 0, 0)); //Center, Size
center中心位置size尺寸extents尺寸(一半)min最小点max最大点
📘 Color()
颜色结构类型,表示一种RGBA组成的颜色,默认情况下A=255(可省略)。
此方法必须使用Equals()判断相等。
let newColor = Color(255, 255, 255, 255); //R, G, B, A let newColor2 = Color(255, 255, 255); //R, G, B, A=255
r颜色数值g颜色数值b颜色数值a透明度数值
📘 ArrayValueResult()
(只读)Array检测函数的返回值,属性可获取数组(封装)信息。
GetCount()获取数组长度Get(index: int)获取指定索引的内容
📘 RayTraceResult()
(只读)射线检测函数的返回值,属性可获取射线检测结果(是否碰撞、最终坐标、检测实体等)。
IsHit是否碰撞射线(如果IsHit = true && Entity = null,可能表示检测到世界地形)Point射线检测坐标(如没有产生碰撞,则坐标即是默认终点)Entity射线碰撞实体(如果对象不是标准的Entity实体,或对象为静态模型(本地静态模型),则返回为null)Distance射线实际产生距离Normal射线检测表面角度
📘 VectorPoint()
坐标点结构类型,表示一组由坐标、旋转、缩放三个Vector类型组成的对象,并且包含一个Tag标签以供可选筛选。
此类型只有坐标记录的功能,通常用于地图编辑器(ID5物体)与脚本的可见预设坐标交互。
使用此结构时不应该使用new VectorPoint| VectorPoint()这类方法,而是应该使用AddVectorPoint() | RemoveVectorPoint()等方法增删到脚本记录。
注意:结构内的三种Vector类型虽然命名不同,但均是以Vector作为属性类型,因此在某些情况下可以忽略命名问题。
Tag筛选标签(可空"")Pos坐标(Vector,不可空,至少要有一个)Angle旋转角度(Vector,可空)Scale缩放(Vector,可空)
📒 Event
📘 OnGameOptionUpdate( optionKey )
当游戏配置(通过SetGameOption被绑定过的)发生主动更新时触发(或有数值被改变)。
每次客户端脚本加载完成时,都会自动触发一次(optionKey = null)。
function OnGameOptionUpdate( optionKey: string )
function OnGameOptionUpdate( optionKey ) { if(optionKey == null) { //如果参数==null,表示不是由某个选项更新触发,而是引擎主动刷新 DLog("Force Update."); return; } //如果不为空,则OptionKey返回具体哪个选项发生更新 DLog("OnGameOptionUpdate: " + optionKey); }
📒 Function
📘 UnloadMod()
卸载当前引擎,回到沙盘引擎初始界面。
注意:通常情况下,可以考虑优先将【退出游戏】操作替换为此方法,而不是直接QuitGame()关闭游戏。
function UnloadMod()
📘 QuitGame()
退出游戏,关闭沙盘引擎程序。
出于安全考虑,此功能实际效果替换为UnloadMod()。
function QuitGame()
📘 SetDisconnectMethod()
设置断开连接监听处理方法,允许设置为null。
此功能允许根据断开原因选择处理方式(断开、重连、关闭模组)。
function SetDisconnectMethod( (output: string ): int => {} )
SetDisconnectMethod((output) => { if(output.indexOf("Error") >= 0) { //Unload Mod return 2; } });
| Method | 说明 |
|---|---|
| 0 | 默认 |
| 1 | 重新连接 |
| 2 | 关闭运行模组 |
📘 GCCollect()
主动执行一次GC垃圾清理,在适当的时机清理有助于缓解性能压力。
function GCCollect( all: bool = false )
all:是否包含对引擎的GC清理,这可能会造成临时卡顿,否则将只清理脚本GC
📘 Equals()
判断两个对象是否相同(相等)。
注意:此方法是判断两者相同的最佳方法,同时也是浮点数据类型(Vector | Vector2 | Color)的唯一判断方法。
对于浮点类型相关的扩展类型,直接使用==无法进行有效判断(将始终返回false),必须使用此方法判断相同。
除此之外,常规数据类型可正常使用==进行判断。
function Equals( a: any, b: any ): bool
📘 IsNullVector()
判断坐标(Vector)是否为理论空(VECTOR_NULL)。
注意:因为Vector是值类型,理论上无法直接判断为Null,因此需要用此方法判断是否为空(一个正常不可能存在的值)。
function IsNullVector( pos: Vector ): bool
📘 GetStringToken()
获取字符串分割后字符串结果,通常用于Command指令参数分割等。
注意:此方法出于特性考虑,如果没有找到分割内容,则会返回包含text[0]的结果,而不是空结果。
function GetStringToken( text: string, symbol: string ): StringValueResult
let source = "test a b c"; let result = GetStringToken(source, " "); DLog(result.Get(2)); //Output: "b"
📘 Env.LoadScript()
加载脚本目录下其他脚本文件(js)。
目标脚本将续写当前代码作用域(续写),共享当前脚本环境的代码,开发者应避免主副脚本之间使用相同名称的变量及方法等。
此方法适合对目录规范有需求的开发者,或者制作模块化功能使用。
function Env.LoadScript( path: string, IIFE: bool = false)
path脚本目录下的 同级或子级 脚本文件路径(例如:Test/MyCode.js)IIFE是否为独立作用域,否则默认脚本续写加载
//Path Rule LoadScript("Test/MyCode.js"); //√ LoadScript("Test/MyCode"); //√ LoadScript("MyCode.js"); //√ LoadScript("../MyCode.js"); //× //Test LoadScript("Test.js") TestAction(); //Test.js >> TestAction() //Test.js function TestAction() { Debug.Log("TestMode"); }
扩展:如果Main脚本原有一个TestAction()方法,但是后续加载了Test.js脚本(且同样包含TestAction()),那么执行的是Test.js >> TestAction(),因为后载入脚本覆写了更早的方法。
📘 Env.AddListener()
增加一个function()事件监听,当指定function被调用时触发。
注意:仅支持引擎主动调用、Emit()手动冒泡方式触发,直接调用原生function()不会触发监听事件。
注意:如果监听OnScriptLoad等优先级较高的方法,请确保监听时脚本未加载完成。
否则可能导致监听成功,但由于脚本已加载(事件已经触发),所以监听永远不会再次被触发。
function Env.AddListener( eventName: string, action: Action, sort: int = 1 ): string
eventName希望监听的function名称,通常用于监听引擎原生事件,但也支持自定义事件action当事件触发时执行的function,支持Lambda表达式sort监听方法的执行顺序,数值越小越靠前,默认顺序为1(在原方法执行后执行),原方法Sort默认保持为0(唯一)return监听事件的Hash值,可用于取消监听
Env.AddListener("OnPlayerJoin", function( player ){ DLog("Player: " + player.Name + " joined!"); }); function OnPlayerJoin( player ) { DLog("Welcome: " + player.Name); } //Output //"Welcome XXX"; //"Player: XXX joined!"
Env.AddListener("OnPlayerJoin", function( player ){ DLog("Player: " + player.Name + " joined!", -1); //-1 < 0(Native) }); function OnPlayerJoin( player ) { DLog("Welcome: " + player.Name); } //Output //"Player: XXX joined!" //Because sort set -1(<0) //"Welcome XXX";
📘 Env.RemoveListener()
移除一个function()事件监听。
function Env.RemoveListener( eventHash: string )
eventHash希望取消监听的eventHash,通过AddListener()返回值获取
let listenerHash = Env.AddListener("OnPlayerJoin", function( player ){ DLog("Player: " + player.Name + " joined!"); }); Env.RemoveListener(listenerHash);
📘 Env.Emit()
手动触发一个function()事件及监听。
function Env.Emit( functionName: string, params: any = ... )
functionName触发的函数\事件名称params附带参数(如存在)
Env.Emit("OnPlayerChat", Player.Find(0), "Hello!");
📘 CreateHost()
建立一个当前模组的服务器\房间世界。
任何情况下,使用此方法都将直接断开当前服务器并建立新的服务器,请确保相关数据提前保存。
补充:如果不填写任何参数,则表示加载到初始入口世界(Main世界)。
通常不建议指定固定的端口号,而是使用Mod.json -> NetworkPort机制设定模组端口,并设置当前方法参数Port=0(自动识别模组NetworkPort)。
function CreateHost( map: string, script: string, port: int = 0, address: string = "", userData: string = "", additional: bool = true ): bool //是否建立成功
载入并创建一个地图为“test2”且脚本为“Main2”的服务器。
CreateHost("test2", "Main2");
载入并创建一个地图为“test2”且脚本为“Main2”,端口指定为8195的服务器(0为默认端口,并非随机端口)。
默认端口配置文件:Mod.json ["NetworkPort": 8192]。
CreateHost("test2", "Main2", 8195);
载入并创建一个地图为“test2”且脚本为“Main2”,端口随意,但使用SteamP2P网络的房间(地址参数填写steam)。
CreateHost("test2", "Main2", 0, "steam");
UserData参数可传递给服务器一个前置字符串参数(长度限制0~256,可用Json扩展),可提前告知服务器一些【玩家自身】自定义信息。
(World脚本可用player.UserData读取内容)
CreateHost("test2", "Main2", 0, "", "TestStringOrJson...");
additional参数可指定是否使用地图附加内容(例如:地图内创建的载具),默认为true,如果只希望加载纯净的地图则设置为false。
CreateHost("test2", "Main2", 0, "", "", false);
📘 ConnectHost()
连接并加载到指定的多人游戏服务器,开发者应自行编写代码,确保参数信息正确。
任何情况下,使用此方法都将直接断开当前服务器并尝试连接到新的服务器。
function ConnectHost(address: string, port: int = 0, password: string = "", userData: string = "")
尝试连接并加载到指定IP地址的服务器
方法与CreateHost部分相同,0表示默认端口,服务器密码可空
UserData参数可传递给服务器一个前置字符串参数(长度限制0~256,可用Json扩展),可提前告知服务器一些【玩家自身】自定义信息
(World脚本可用player.UserData读取内容)
ConnectHost("127.0.0.1");
📘 Disconnect()
断开当前正在连接的服务器\房间\世界,并回到入口场景(Main)。
任何情况下,使用此方法都将直接断开当前服务器。
function Disconnect()
📘 Reconnect()
断开当前正在连接的服务器\房间\世界,并尝试重新连接到上次的服务器(如果没有记录,则不会生效)。
任何情况下,使用此方法都将直接断开当前服务器。
function Reconnect()
📘 IsServerMode()
获取当前是否为服务端模式(仅作为专用服务器启动,通常由bat格式扩展)。
function IsServerMode(): bool
📘 IsNewPlayer()
判断当前是否为玩家初次进入此模组。
function IsNewPlayer(): bool
📘 IsHost()
判断当前是否为服务器\主机模式,反之则为常规客户端。
function IsHost(): bool
📘 GetVersionInfo()
获取沙盘引擎版本信息。
function GetVersionInfo(): string
📘 GetModPackage()
获取当前模组包名。
function GetModPackage(): string
📘 GetModName()
获取当前模组名称(本地化翻译)。
function GetModName(): string
📘 GetEngineTickCount()
获取游戏启动至此已运行的时间(秒)。
function GetEngineTickCount(): float
📘 GetModTickCount()
获取模组启动至此已运行的时间(秒)。
如果期间发生了延迟加载、重载模组等情况,此时间也会被随之重置。
function GetModTickCount(): float
📘 GetDateTime()
获取系统时间。
返回格式会按照yyyy-MM-dd|HH:mm:ss进行字符串处理,开发者可通过split得到的数组获取单独的值。
function GetDateTime(): string
📘 GetTimestamp()
获取Unix时间戳(格林威治时间1970年01月01日00时00分00秒)。
注意:为了方便数值的直接使用,此处目前暂时使用int32类型,因此Unix时间戳最大支持到2038-01-19(32位)。
function GetTimestamp( utc: bool = false ): int
utc是否使用UTC世界时间,否则为本地时间
📘 GetNetworkTime()
获取服务器同步时间,服务器至此运行了多长时间(秒)。
此数值无论是服务端\客户端执行,均取得最新同步后时间。
function GetNetworkTime(): double
📘 GetDeltaTime()
获取游戏帧增量时间。
function GetDeltaTime(): float
📘 Env.SetGlobalVars()
设置一个全局变量(可跨脚本使用),支持绝大部分类型的JavaScript变量(如:数组、对象等)。
此功能可善用扩展,例如:菜单界面设置【服务器名称、服务器模式等】全局变量对象,待服务器加载完毕事件读取,并根据数值来修改逻辑。
如果一个全局变量不再使用,可以将其设置为value = null删除全局变量。
Startup作为前置配置文件,无法通过此方法写入,只能通过加载时自动读取。
function Env.SetGlobalVars( key: string, value: any )
//设置一个字符串类型的全局变量 Env.SetGlobalVars("myWebsite", "www.abc.com"); //设置一个JavaScript扩展对象全局变量 Env.SetGlobalVars("createServerConfig", { serverName: "服务器名称", gameMode: 1, openPVP: false });
📘 Env.GetGlobalVars()
读取一个全局变量(可跨脚本使用),支持绝大部分类型的JavaScript变量(如:数组、对象等)。
如指定key不存在则返回null。
function Env.GetGlobalVars( key: string ): any
//设置一个JavaScript扩展对象全局变量 Env.SetGlobalVars("createServerConfig", { serverName: "服务器名称", gameMode: 1, openPVP: false }); //读取时可正常进行读取 let getConfig = Env.GetGlobalVars("createServerConfig"); DLog("serverName: " + getConfig.serverName);
📘 GetScriptName()
获取当前加载脚本的名称。
function GetScriptName(): string
📘 GetScriptNames()
获取当前模组存在的全部脚本名称(StringValueResult),可使用Get() | GetCount()遍历使用。
function GetScriptNames(): StringValueResult
let scriptsResult = GetScriptNames(); for(let i=0;i<scriptsResult.GetCount();i++) { DLog(scriptsResult.Get(i)); //string }
📘 GetCurrentScriptNames()
获取当前正在使用脚本下存在的全部脚本名称(StringValueResult | *.js),包含子目录及后缀名,可使用Get() | GetCount()遍历使用。
function GetCurrentScriptNames(): StringValueResult
📘 GetPluginNames()
获取当前模组存在的全部插件名称(即使没有被加载)(StringValueResult),可使用Get() | GetCount()遍历使用。
function GetPluginNames(): StringValueResult
let scriptsResult = GetPluginNames(); for(let i=0;i<scriptsResult.GetCount();i++) { DLog(scriptsResult.Get(i)); //string }
📘 GetCurrentPluginNames()
获取当前正在使用脚本已加载完成的全部插件名称(StringValueResult | *.js),可使用Get() | GetCount()遍历使用。
function GetCurrentPluginNames(): StringValueResult
📘 GetGameFPS()
获取当前游戏FPS帧数。
function GetGameFPS(): int
📘 GetMapName()
获取当前正在使用的地图文件名(不包含后缀),可用作判定特定地图。
function GetMapName(): string
📘 GetMapNames()
获取当前用户本地全部地图文件名(不包含后缀)(StringValueResult),可使用filter进行条件过滤。
function GetMapNames( filter: int = 0 ): StringValueResult
| 过滤Filter | 说明 |
|---|---|
| 0 | 默认全部(模组>地图>下载) |
| 1 | 只获取模组内置地图 |
| 2 | 只获取Map地图目录 |
| 3 | 只获取Map\Download地图目录 |
let result = GetMapNames(); for(let i=0;i<result.GetCount();i++) { DLog(i + ">" + result.Get(i)); }
📘 GenerateUUID()
生成一段唯一的UUID字符串(GUID)。
在绝大部分情况下,由此方法生成的UUID应该是全球唯一的。
function GenerateUUID(): string
📘 IsLogicFrame()
获取当前是否为逻辑帧,通常适用于OnFrameUpdate()事件的优化传递。
逻辑帧:以固定时间速率返回为true,而不是每一帧都返回true,此方法可以避免某些逻辑受到帧数影响。==
服务端World/OnFrameUpdate(),默认以逻辑帧间隔执行。
function IsLogicFrame(): bool
📘 RayTrace()
生成一条检测射线,可用于检测两点之间实体对象的碰撞。
如果只希望获取Entity部分类型,可使用layer参数进行实体类型层(位)(位操作),默认0表示检测全部。
注意:此方法会检测世界地形(除非参数includeTerrain = false),如果IsHit = true && Entity = null,表示最终检测到地形。
function RayTrace( start: Vector, over: Vector, layer: int = 0, includeTerrain: bool = true ): RayTraceResult
start起始点over结束点RayTraceResult返回值(类型参考)
//只判断Character + Vehicle let result = RayTrace(Vector(0, 0, 0), Vector(10, 0, 10), 2 + 4); DLog(result.IsHit); DLog(result.Point); DLog(result.Entity)
📘 OverlapEntity()
获取指定位置+范围的世界实体(某坐标指定范围内所有对象),可用于检测指定位置的范围内实体对象(基于Entity的核心对象)。
如果只希望获取Entity部分类型,可使用filter参数进行实体类型层(位)(位操作),默认0表示检测全部。
此方法最终返回OverlapEntityResult结构,可使用GetCount() | Get()方法进行遍历结果。
function OverlapEntity( pos: Vector, radius: float, filter: int = 0 ): OverlapEntityResult
//Only check 'Character' and 'Vehicle' let result = OverlapEntity(Vector(0, 0, 0), 20, 2 + 4); //Result result.GetCount(); //Result Count result.Get(0); //GetEntity by index
let result = OverlapEntity(Vector(0, 0, 0), 2, 0); if(result.GetCount() > 0) { let getEntity = result.Get(0); //Get index 0 DLog(getEntity.GetType()); //"EntityType", maybe "Character" (string) DLog(getEntity.GetInstance()); //EntityObject, maybe Character (object) }
📘 OverlapPlayer()
获取指定位置+范围的玩家对象(某坐标指定范围内所有可见玩家)。
注意:玩家Player是一个非实体类型,这里获取的是所有视角(player.Pos)在范围内的玩家。
此方法最终返回OverlapEntityResult结构,可使用GetCount() | Get()方法进行遍历结果。
function OverlapPlayer( pos: Vector, radius: float ): OverlapEntityResult
let result = OverlapPlayer(Vector(0, 0, 0), 2); if(result.GetCount() > 0) { let getPlayer = result.Get(0); //Get index 0 DLog(getPlayer.Name); }
📘 GetLanguage()
获取当前引擎语言的标准英文名称(在部分情况下,可能会出现引擎语言与模组语言不同的情况,这里返回的是引擎语言)。
例如:沙盘引擎本体支持A语言,但当前模组可能仅支持B语言,此时返回的是A语言的标准英文名称。
通常情况下,开发者应该主动参考此方法获得的语言名称。此方法也会在游戏启动时自动识别GetSystemLanguage()系统语言兼容。
function GetLanguage(): string
📘 GetModLanguage()
获取当前模组语言的标准英文名称(在部分情况下,可能会出现引擎语言与模组语言不同的情况,这里返回的是模组语言)。
例如:沙盘引擎默认暂不支持A语言,但当前模组支持B语言,此时返回的是B语言的标准英文名称。
function GetLanguage(): string
📘 GetSystemLanguage()
获取当前系统识别语言的标准英文名称,此方法仅供参考用户系统语言。
function GetLanguage(): string
📘 GetLanguageText()
获取游戏语言文件的解析内容(根据Key),此函数是获取文本翻译结果的正确方法。
function GetLanguageText( key: string, params: any... ): string function GetLanguageText( key: string, index: int = 0, params: any... ): string
key:游戏语言文件内的完整路径index:可省略参数,表示语言结构数组索引,默认为0,如果设置为-1则表示随机取索引params:如果目标语言文本拥有{0}{1}{2}占位替换符号,可以根据索引填写后续参数
此方法的使用扩展性较强,几乎可覆盖大多数多语言文本需求。
GetLanguageText("Native.Common.Exception"); //"发生异常错误!"
📘 GetLanguageTextCount()
获取游戏语言文件的解析内容的结果数量。
function GetLanguageTextCount( key: string ): int
📘 GetVectorPoints()
获取当前世界所有满足Tag标签筛选的VectorPoint坐标点对象结果数据。
具体VectorPoint数值对象参考本文上方Type部分。
注意:通过此方法获取的对象允许进行set修改其内部属性,仅限本地使用,不会同步到其他客户端。
function GetVectorPoints( tag: string ): VectorPointResult
//Test Code let tag = "test"; let result = GetVectorPoints(tag); for(let i=0;i<result.GetCount();i++) { let getResult = result.Get(i); DLog(getResult.Tag + ": " + getResult.Pos); }
📘 AddVectorPoint()
增加一条指定Tag标签的VectorPoint坐标点对象,如果不需要Tag标签也可以留空(这会导致无法通过RemoveVectorPoint()针对删除)。
function AddVectorPoint( tag: string, pos: Vector, angle: Vector = null, scale: Vector = null ): VectorPoint
//Test Code AddVectorPoint("", Vector(10, 0, 0)); AddVectorPoint("HomePos", Vector(10, 0, 0), Vector(0, 0, 0));
📘 RemoveVectorPoint()
移除所有符合指定Tag标签条件的VectorPoint坐标点对象(也可以留空Tag标签,会删除所有坐标点对象)。
function RemoveVectorPoint( tag: string = "" )
//Test Code RemoveVectorPoint(); RemoveVectorPoint("HomePos");
📘 FormatPlainText()
格式化指定文本为纯文本(去除HTML|UBB),可用于获取除表情外等真实文本及长度。
function FormatPlainText( text: string, includeUBB: bool = true ): string
includeUBB:如果设置为true,则允许包含UBB(忽略处理)。
📘 FormatRichText()
格式化指定文本为引擎富文本(并非传统意义的Richtext),这将使一段文本执行以下操作:链接地址标蓝、@玩家名(高亮)、#数字(根据ID转换为Texture图片或Emoji表情)。
注意:沙盘引擎只有默认OnPlayerChat聊天事件自动执行格式化(也可拦截重写),其他相关文本传递功能(Message | Announce | Subtitle...)如需高亮等效果需要前置格式化。
function FormatRichText( text: string, onlyEmoji: bool = false ): string
onlyEmoji:如果设置为true,则#Number的行为将被识别为表情(0~74),否则#Number将识别全局TextureID。
FormatRichText("#0", false); //Out id 0 (Asset Texture_0, not emoji) FormatRichText("#0", true); //Out id 200 (Emoji Texture, 200~274 is emoji texture)
📘 FormatDefineText()
格式化指定文本为引擎宏文本,这将使一段文本自动将宏文本替换为最终结果。
function FormatDefineText( text: string, includeColor: bool = true ): string
includeColor:如果设置为true,则正确识别的宏文本将附带颜色代码。
Message("Your EngineVersion: %EngineVersion%"); //"Your EngineVersion: V0.77"
📘 ExistImmunityFlag()
检查对象伤害免疫数值是否包含指定Flag。
function ExistImmunityFlag( immunity: int, checkFlag: int )
DLog(ExistImmunityFlag(6, 1)); //AntiNormal: false DLog(ExistImmunityFlag(6, 2)); //AntiBullet: true DLog(ExistImmunityFlag(6, 4)); //AntiExplode: true
📘 SamplePoint()
获取指定坐标的碰撞坐标点(贴近地面或建筑),如果不存在则返回VECTOR_NULL。
function SamplePoint( pos: Vector, sampleAll: bool = true ): Vector
sampleAll是否采样所有静态对象,否则仅采样地面对象(陆地)。
📘 SampleRandomPoint()
获取指定坐标范围内的随机碰撞坐标点(贴近地面或建筑),如果不存在则返回VECTOR_NULL。
function SampleRandomPoint( pos: Vector, radius: float, sampleAll: bool = true ): Vector
sampleAll是否采样所有静态对象,否则仅采样地面对象(陆地)。