Table of Contents

在代码中使用资产

入门 程序员

在代码中使用资产有几种方式:

  • 引用 —— 最简单的方式,会在属性面板中创建一个可指定的引用。
  • Url 引用 —— 也会在属性面板中创建可指定的引用,但允许你手动处理加载和卸载(最常与场景一起使用)。
  • 直接加载 —— 一种手动加载资产的方式,无需在属性面板中指定任何内容。

引用资产

在自己的脚本中使用资产最简单的方式,是通过公共属性或字段创建可指定的引用。

public class Example : StartupScript
{
    public Model ModelAsset { get; set; }
}

上面的代码会如下显示在属性面板中:

脚本在属性面板中的图像,属性显示文本"No asset selected",旁边有手形和橡皮擦两个图标,以及一个带手形图标的空方框。

Stride 会自动处理加载和卸载。如果你想更精细地控制资产的加载方式,请改用 Url 引用。

Url 引用

Url 引用(Url reference)提供了一种在属性面板中指定资产但不加载它的方式。

你可以在自己的脚本中使用 UrlReference<T> 创建可指定的资产 Url 引用,其中 T 是你想使用的资产类型。

public class Example : StartupScript
{
    public UrlReference<Model> MyAssetReference { get; set; }
}

它会如下显示在属性面板中:

脚本在属性面板中的图像,属性显示文本"No asset selected",旁边有手形和橡皮擦两个图标,以及一个带手形图标的空方框。

可以通过内容系统使用 Content.Load 或 Content.LoadAsync 加载该资产,然后使用扩展方法 Content.Unload 卸载它。

Note

这些方法需要引入 Stride.Core.Serialization 才能使用。

using Stride.Core.Serialization;

public override void Start()
{
    var asset = Content.Load(MyAssetReference);
}

public override void Cancel()
{
    Content.Unload(MyAssetReference);
}
Warning

手动加载的资产也必须手动卸载,否则 Stride 会让这些资产永远驻留在内存中。

直接加载

你可以通过自动生成的 Assets 类直接在代码中访问项目的所有资产。它包含构建中所有可用资产的引用。

Note

这些方法需要引入 Stride.Core.Serialization 才能使用。

using Stride.Core.Serialization;

public override void Start()
{
    var loadedModel = Content.Load(Assets.Models.Sphere_Model);
}

public override void Cancel()
{
    Content.Unload(Assets.Models.Sphere_Model);
}
Warning

你可能需要重新构建项目并重新加载 IDE,资产才会出现。如果它仍然显示缺失,说明它没有被包含在构建中。更多信息请参阅缺失的资产。

也可以使用内容系统通过路径加载资产:Content.Load<T> 或 Content.LoadAsync<T>,然后使用 Content.Unload 卸载它们。

public override void Start()
{
    var loadedModel = Content.Load<Model>("path/to/asset");
}

public override void Cancel()
{
    Content.Unload("path/to/asset");
}
Warning

手动加载的资产也必须手动卸载,否则 Stride 会让这些资产永远驻留在内存中。

缺失的资产

资产编译器只能根据引用关系知道要将哪些资产包含在构建中。直接加载资产时,Stride 不知道该资产是被需要的。

要解决这个问题,你可以将缺失的资产标记为根资产,以确保它们始终包含在构建中;或者尝试改用 Url 引用。

另请参阅