【问题标题】:Xna Content Pipeline Extension - Loading other content within custom processorXna Content Pipeline Extension - 在自定义处理器中加载其他内容
【发布时间】:2023-04-07 18:59:02
【问题描述】:

我目前正在试验 Xna 内容管道扩展。在该实验中,我正在尝试加载一个包含另一个需要加载的“内容项”的文件。例如:

public class CustomItem
{
    public string Name;
    public Texture2D Texture;
}

现在,在我的内容处理器中,我可以创建一个新的“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 ...

有谁知道这是否真的可行,如果可以,该怎么做?如果可能的话,我宁愿不去延迟加载其他内容项,或者使用二进制读取器和写入器创建我自己的自定义内容加载。

【问题讨论】:

    标签: c# xna content-pipeline


    【解决方案1】:

    您不能在内容管道中使用Texture2D。您必须使用Texture2DContent,这是前者的代理类型。反过来,您的类型中必须有一种机制,允许成员在内容构建时为Texture2DContent,但在运行时为Texture2DThis article 为您提供了三种方法。

    您可以使用ContentProcessorContext.BuildAndLoadAsset 来获取您的Texture2DContent 对象。此纹理数据将嵌入到该资产的 .xnb 文件中。

    如果您实际上不需要在管道中使用纹理数据,特别是如果您打算在多个资产之间共享相同的纹理,您可以使用ContentProcessorContext.BuildAsset 来获取纹理的ExternalReference,它内置在自己的.xnb 文件中,位于资产的.xnb 文件外部(ContentManager 将为您处理加载)。

    【讨论】:

    • 为快速回复干杯。我曾在某处阅读过有关 Texture2DContent 的信息,但希望有更好的方法来处理它。不过那篇文章确实解释得很好,所以我知道完全理解它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多