Linking Entities to Hammer
阅读
2023-08-26更新
最新编辑:TrimesS_
阅读:
更新日期:2023-08-26
最新编辑:TrimesS_
如何将我制作的实体放入地图中?
实体可通过实体工具放置,与 s&box 中的其他工具一样,它们会自动热载到您的游戏和 Hammer 中。
如果您的游戏发布在 asset.party,那么在 Hammer 中下载游戏的所有内容(模型、材质和粒子)后,用户就可以为您的游戏放置实体。
如何创建实体?
创建可放置在 Hammer 中的实体非常简单,只需用 [HammerEntity] 标记即可。
using Sandbox;
using Editor;
/// <summary>
/// 该实体定义了第一人称射击游戏模式中玩家的出生点。
/// </summary>
[Library( "info_player_start" ), HammerEntity]
[Title( "Player Spawnpoint" ), Category( "Player" ), Icon( "place" )]
public class SpawnPoint : Entity
{
}
属性
类中的任何属性都可以使用 [Property] 属性向 Hammer 公开。
public partial class MyEntity : Entity
{
/// <summary>
/// 在hammer中显示的帮助文字
/// </summary>
[Property( Title = "Start Disabled" ) ]
public bool StartDisabled { get; set; } = false;
}
输入
实体类中的任何方法都可以使用 [Input] 属性作为输入向 Hammer 公开,您定义的参数会被自动处理。
定义输入的示例:
public partial class MyEntity : Entity
{
/// <summary>
/// 在 Hammer 和 Visual Studio 中显示我输入的描述
/// </summary>
[Input]
public void DoSomethingElse( string str )
{
// ...
}
[Input( Name = "DoSomething" )]
public void SomeInput()
{
// ...
}
}
要获取输入的激活器,方法中应包含一个名为 "激活器 "的实体类型参数,如下图所示:
[Input]
public void AnotherSomething( Entity activator )
{
// ...
}
输出
实体类中的任何输出都会自动展示给 Hammer。
定义输出的示例:
public partial class MyEntity : Entity
{
/// <summary>
/// 在 Hammer 和 Visual Studio 中显示的输出说明
/// </summary>
public Output OnSomethingHappened { get; set; }
}
触发输出
您可以像这样使用 Output.Fire(sender) 来触发输出:
protected Output OnEndTouch { get; set; }
public virtual void OnTouchEnd( Entity toucher )
{
OnEndTouch.Fire( toucher );
}
Hammer 属性
所有这些都是可选属性,可添加到类中以改变其在 Hammer 中的行为和外观。
这并不是一个详尽的列表,更完整的列表可在此处找到。
固体
告诉 Hammer 此实体是基于画笔的。
[Solid]
支持固体
告诉 Hammer 此点实体也可以是画笔实体,例如 ent_door 实体。
[SupportsSolid]
编辑器模型
告诉 Hammer 实体要使用什么模型,并添加到类中。
[EditorModel( "models/editor/playerstart.vmdl" )]
编辑器精灵
告诉 Hammer 实体要使用什么精灵,并添加到类中。
[EditorSprite( "editor/info_target.vmat" )]
模型
使模型可以在 Hammer 中设置和更改。
[Model]
您还可以为实体设置默认模型,同时仍允许更改。
[Model( Model = "models/citizen/citizen.vmdl" )]
自动应用材质
自动将提供的材质应用到绑定的画笔上。
[AutoApplyMaterial( "materials/tools/toolstrigger.vmat" )]