全站通知:

Entities tags

阅读

    

2023-08-26更新

    

最新编辑:TrimesS_

阅读:

  

更新日期:2023-08-26

  

最新编辑:TrimesS_

来自S&boxWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
-TrimesS-

实体可以使用字符串标签标记。这些标签是联网的,因此也可在客户端上查询。

实体标签(在大多数情况下)会自动传播到实体的所有物理形状中,然后用于确定哪些形状应该相互碰撞。

游戏开发者可以在游戏项目设置中设置哪些标签会相互碰撞。

CollisionMatrix.png

设置标签

// 在实体上设置一个标签
player_entity.Tags.Add( "player" );

// 在实体上设置多个标签
enemy_entity.Tags.Add( "enemy", "threat" );

// 程序化更新标签(true则添加,false则移除)
door_entity.Tags.Set( "locked", IsLocked() );

// 删除标签
enemy_entity.Tags.Remove( "threat" );

查询标签

if ( enemy.Tags.Has( "threat" ) )
{
	// 逃跑
}

在追踪中使用

// 只击中带有世界标记的实体
tr = Trace.Ray( startpos, endpos )
				.WithTag( "world" )
				.Run();

// 击中带有威胁的敌人
tr = Trace.Ray( startpos, endpos )
				.WithAllTags( "enemy", "threat" )
				.Run();

// 击中敌人或玩家
tr = Trace.Ray( startpos, endpos )
				.WithAnyTags( "enemy", "player" )
				.Run();

// 击中除玩家以外的任何物体
tr = Trace.Ray( startpos, endpos )
				.WithoutTags( "player" )
				.Run();

// 击中除玩家和世界以外的任何物体
tr = Trace.Ray( startpos, endpos )
				.WithoutTags( "player", "world" )
				.Run();

检测变化

protected override void OnTagAdded( string tag )
{

}

protected override void OnTagRemoved( string tag )
{
		
}