沙盘引擎 (SEngine)

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

用户工具

站点工具


scripting:world:pickup

📚 World/Pickup

注意:Pickup仅允许Character类型主动触发,如果Character正在驾驶\乘坐载具,则会在载具进入触发范围时所有载具内角色触发相关事件。

📒 Event

📘 OnPickupEntered( pickup, 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;
	}
}

📘 OnPickupExited( pickup, character )

当角色离开拾取物范围时触发。

function OnPickupExited( pickup, character )
{
	DLog("OnPickupExited: " + pickup.ID);
}

📒 Property

📘 pickup.ID

获取拾取物序列ID,每个实例ID是唯一的。

当之前的实例被销毁后,空闲的靠前ID将会被后续新实例重新使用(对于特殊情况,UUID是更合适的筛选选择)。

pickup.ID: int

📘 pickup.UUID

获取拾取物UUID,这是由一串较长的字符串组成的全局唯一文本ID(实例化时自动赋值,非持久化数据)。

pickup.UUID: string

📘 pickup.Pos

设置拾取物坐标。

pickup.Pos = Vector(0, 0, 0);

📘 pickup.World

设置拾取物实例世界ID(不同世界将不可视\不可交互)。

pickup.World = 0; //int

📘 pickup.Group

设置拾取物实例组(这是一个Entity基类通用属性)。

默认值0表示特殊组(无分组机制),如实例组不为0,则只有相同组的拾取物和对象才会触发。

pickup.Group = 0; //int

📘 pickup.Type

设置拾取物实例光环类型,如设置为-1则不显示光环(类似模型直接在地上),类型样式参考《世界资源实例汇总》

pickup.Type = 1; //int

📘 pickup.Model

设置拾取物实例模型,如设置为-1则不显示任何模型。

pickup.Model = 413; //int

📘 pickup.ModelEnum

设置拾取物实例模型的Enum属性(Model.Enum)。

此属性是一个兼容链接属性,不一定适合所有模型使用。

pickup.ModelEnum = 0?; //int, Not a fixed default

📘 pickup.Color

设置拾取物实例包围颜色,默认为Color(0, 0, 0, 0),不修改则使用Type默认的样式颜色。

pickup.Color = Color(255, 255, 255);

📘 pickup.Text

设置拾取物标签文本(头部文字),支持富文本代码。

pickup.Text = ""; //string

📘 pickup.IsLoopTrigger

设置拾取物是否可持续拾取,默认为true,否则当拾取后Respawn()后,需要重新触碰拾取物才可再次触发。

当此属性设置为true时,重生(Respawn)后将会再次调用OnPickupEntered事件。

pickup.IsLoopTrigger = true;

📘 pickup.IsCollected

读取拾取物“被拾取”状态(只读)。

此属性返回值与Collect\Respawn方法有关。

pickup.IsCollected: bool

📘 pickup.OccupantCount

获取拾取物当前正在触发的角色单位数量,此功能通常搭配pickup.GetOccupant()使用。

pickup.OccupantCount: int

📒 Static Function

📘 Pickup.Create()

生成一个新的拾取物实例,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));

📘 Pickup.Find()

寻找一个拾取物实例(通过ID),不存在则返回null

function Pickup.Find( id: int ): Pickup

📘 Pickup.FindByUUID()

寻找一个拾取物实例(通过UUID),不存在则返回null

function Pickup.Find( uuid: string ): Pickup

📘 Pickup.GetCount()

获取当前所有存在拾取物数量。

function Pickup.GetCount(): int

📘 Pickup.Get()

获取当前存在的指定索引拾取物,通常搭配GetCount()遍历使用。

function Pickup.Get( index: int ): Pickup

📒 Function

📘 pickup.Remove()

销毁当前拾取物实例。

function pickup.Remove()

📘 pickup.Collect()

“拾取”当前拾取物实例(而不是销毁),拾取物将变为“被拾取”状态(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.Respawn()

重置当前拾取物实例拾取状态(pickup.IsCollected == true)。

function pickup.Respawn()

📘 pickup.GetOccupant()

获取当前拾取物实例正在触发的(指定索引)角色实例。

function pickup.GetOccupant( index: int ): Character
//遍历获取正在触发的所有角色
let occCount = pickup.OccupantCount;
for(let i=0;i<occCount;i++)
{
	DLog(pickup.GetOccupant(i).Name + "正在拾取物中...");
}

scripting/world/pickup.txt · 最后更改: 2024/06/30 19:22 由 bibiboxs