在代码中使用资产
入门 程序员
在代码中使用资产有几种方式:
- 引用 —— 最简单的方式,会在属性面板中创建一个可指定的引用。
- Url 引用 —— 也会在属性面板中创建可指定的引用,但允许你手动处理加载和卸载(最常与场景一起使用)。
- 直接加载 —— 一种手动加载资产的方式,无需在属性面板中指定任何内容。
引用资产
在自己的脚本中使用资产最简单的方式,是通过公共属性或字段创建可指定的引用。
public class Example : StartupScript
{
public Model ModelAsset { get; set; }
}
上面的代码会如下显示在属性面板中:

Stride 会自动处理加载和卸载。如果你想更精细地控制资产的加载方式,请改用 Url 引用。
Url 引用
Url 引用(Url reference)提供了一种在属性面板中指定资产但不加载它的方式。
你可以在自己的脚本中使用 UrlReference<T> 创建可指定的资产 Url 引用,其中 T 是你想使用的资产类型。
public class Example : StartupScript
{
public UrlReference<Model> MyAssetReference { get; set; }
}
它会如下显示在属性面板中:

可以通过内容系统使用 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 引用。