Sam*_*ade 4 c# xna content-pipeline
我目前正在尝试使用Xna Content Pipeline扩展.在该实验中,我正在尝试加载包含另一个需要加载的"内容项"的文件.例如:
public class CustomItem
{
public string Name;
public Texture2D Texture;
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的内容处理器中,我可以创建一个新的'CustomItem'实例并初始化Name字段,因为它只是一个字符串.但是,我无法在内容编译期间加载纹理文件(注意:纹理只是一个示例,理想情况下我希望能够加载任何其他内容类型).
我正在寻找的是:
// ... start class ...
public override CustomItem Process(SomeInputFormat input, ContentProcessorContext context)
{
return new CustomItem()
{
Name = input.ItemName,
Texture = context.LoadAsset<Texture2D>(input.ItemTexturePath) // I realise LoadAsset<T>() does not exist - it's an example of what would be ideal
};
}
// ... end class ...
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否真的有可能,如果有的话,怎么去呢?如果可能的话,我宁愿不去延迟加载其他内容项的路线,或者使用二进制读取器和编写器创建我自己的自定义内容加载.
您不能Texture2D在内容管道中使用.你必须使用Texture2DContent,这是前者的代理类型.反过来,您必须在类型中使用一种机制,以允许成员Texture2DContent在内容构建时,但Texture2D在运行时.本文为您提供了三种方法.
您可以ContentProcessorContext.BuildAndLoadAsset用来获取Texture2DContent对象.此纹理数据将嵌入到.xnb该资产的文件中.
如果您实际上不需要在管道中使用纹理数据,特别是如果您打算在多个资源之间共享相同的纹理,则可以使用它ContentProcessorContext.BuildAsset来获取ExternalReference纹理,该纹理内置于其自己的.xnb文件中,外部到您资产的.xnb文件(并将ContentManager为您处理加载).
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |