🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
注意:Pickup
仅允许Character
类型主动触发,如果Character
正在驾驶\乘坐载具,则会在载具进入触发范围时所有载具内角色触发相关事件。
当角色进入拾取物范围时触发,角色同一时间可触发多个拾取物(如果在范围内)。
function OnPickupEntered( pickup, character ) { DLog("OnPickupEntered: " + pickup.ID); switch(pickup.ID) { case 0: //直接销毁拾取物 pickup.Remove(); //doSomething... break; case 1: //“拿取”其中的模型,但不会重新生成,直到调用Respawn() pickup.Collect(); //“拿取”其中的模型,并等待10秒后重新生成 //重新生成后,将会重新调用OnPickupPickedUp pickup.Collect(10.0); //doSomething... break; case 2: //不执行针对拾取物的操作,一直存在 DLog("Pickup!"); //doSomething... break; } }
当角色离开拾取物范围时触发。
function OnPickupExited( pickup, character ) { DLog("OnPickupExited: " + pickup.ID); }
获取拾取物序列ID,每个实例ID是唯一的。
当之前的实例被销毁后,空闲的靠前ID将会被后续新实例重新使用(对于特殊情况,UUID
是更合适的筛选选择)。
pickup.ID: int
获取拾取物UUID,这是由一串较长的字符串组成的全局唯一文本ID(实例化时自动赋值,非持久化数据)。
pickup.UUID: string
设置拾取物坐标。
pickup.Pos = Vector(0, 0, 0);
设置拾取物实例世界ID(不同世界将不可视\不可交互)。
pickup.World = 0; //int
设置拾取物实例组(这是一个Entity基类通用属性)。
默认值0
表示特殊组(无分组机制),如实例组不为0,则只有相同组的拾取物和对象才会触发。
pickup.Group = 0; //int
设置拾取物实例光环类型,如设置为-1则不显示光环(类似模型直接在地上),类型样式参考《世界资源实例汇总》。
pickup.Type = 1; //int
设置拾取物实例模型,如设置为-1
则不显示任何模型。
pickup.Model = 413; //int
设置拾取物实例模型的Enum
属性(Model.Enum
)。
此属性是一个兼容链接属性,不一定适合所有模型使用。
pickup.ModelEnum = 0?; //int, Not a fixed default
设置拾取物实例包围颜色,默认为Color(0, 0, 0, 0)
,不修改则使用Type
默认的样式颜色。
pickup.Color = Color(255, 255, 255);
设置拾取物标签文本(头部文字),支持富文本代码。
pickup.Text = ""; //string
设置拾取物是否可持续拾取,默认为true
,否则当拾取后Respawn()
后,需要重新触碰拾取物才可再次触发。
当此属性设置为true
时,重生(Respawn)后将会再次调用OnPickupEntered
事件。
pickup.IsLoopTrigger = true;
读取拾取物“被拾取”状态(只读)。
此属性返回值与Collect\Respawn
方法有关。
pickup.IsCollected: bool
获取拾取物当前正在触发的角色单位数量,此功能通常搭配pickup.GetOccupant()
使用。
pickup.OccupantCount: int
生成一个新的拾取物实例,Type
类型样式参考《世界资源实例汇总》。
function Pickup.Create( type: int, model: int, pos: Vector, color: Color = null ): Pickup
//在0点坐标处,建立一个类型为5,模型为413(出租车)的默认颜色拾取物实例 Pickup.Create(5, 413, Vector(0, 0, 0)); //在0点坐标处,建立一个类型为5,模型为413(出租车)的红色(RGB[255,0,0])拾取物实例 Pickup.Create(5, 413, Vector(0, 0, 0), Color(255, 0, 0));
寻找一个拾取物实例(通过ID),不存在则返回null
。
function Pickup.Find( id: int ): Pickup
寻找一个拾取物实例(通过UUID),不存在则返回null
。
function Pickup.Find( uuid: string ): Pickup
获取当前所有存在拾取物数量。
function Pickup.GetCount(): int
获取当前存在的指定索引拾取物,通常搭配GetCount()
遍历使用。
function Pickup.Get( index: int ): Pickup
销毁当前拾取物实例。
function pickup.Remove()
“拾取”当前拾取物实例(而不是销毁),拾取物将变为“被拾取”状态(pickup.IsCollected
)。
此处功能更多只有展示作用,实际的交互需要由开发者根据需求自行完成。
function pickup.Collect( respawnTime: float = 0 )
//拾取当前实例,因为参数(省缺)为0,所以永远不会自动恢复,直到手动pickup.Respawn() pickup.Collect(); //拾取当前实例,因为参数填写为3.0,所以3秒后会自动恢复为“未拾取”状态(pickup.IsCollected == false) pickup.Collect(3.0); //相当于3秒后自动执行一次pickup.Respawn()
此功能可以扩展成一些武器箱、搜刮物资、补给站点等机制,当pickup.IsCollected == true
时表示此物资已经被拿过了,可等待XXX后执行pickup.Respawn()
重置状态。
重置当前拾取物实例拾取状态(pickup.IsCollected == true
)。
function pickup.Respawn()
获取当前拾取物实例正在触发的(指定索引)角色实例。
function pickup.GetOccupant( index: int ): Character
//遍历获取正在触发的所有角色 let occCount = pickup.OccupantCount; for(let i=0;i<occCount;i++) { DLog(pickup.GetOccupant(i).Name + "正在拾取物中..."); }