Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xna内容管道扩展-在自定义处理器中加载其他内容_C#_Xna_Content Pipeline - Fatal编程技术网

C# Xna内容管道扩展-在自定义处理器中加载其他内容

C# Xna内容管道扩展-在自定义处理器中加载其他内容,c#,xna,content-pipeline,C#,Xna,Content Pipeline,我目前正在试验Xna内容管道扩展。在那个实验中,我试图加载一个包含另一个需要加载的“内容项”的文件。例如: public class CustomItem { public string Name; public Texture2D Texture; } 现在,在我的内容处理器中,我可以创建一个新的“CustomItem”实例并初始化Name字段,因为它只是一个字符串。但是,我无法在内容编译期间加载纹理文件(注意:纹理只是一个示例,理想情况下我希望能够加载任何其他内容类型) 我

我目前正在试验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 ...
/。。。开始上课。。。
公共覆盖CustomItem进程(SomeInputFormat输入、ContentProcessor上下文)
{
返回新的CustomItem()
{
Name=input.ItemName,
Texture=context.LoadAsset(input.ItemTexturePath)//我意识到LoadAsset()并不存在——这是一个理想的例子
};
}
// ... 末班。。。

有人知道这是否真的有可能,如果有,怎么做?如果可能的话,我不希望延迟加载其他内容项,也不希望使用二进制读写器创建自己的自定义内容加载。

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

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


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

为快速回复干杯。我在什么地方读过关于Texture2D内容的文章,但我希望有一种更好的方式来处理它。那篇文章确实很好地解释了这一点,所以我完全理解它。