内容管道扩展,用于同时创建游戏对象和模型

时间:2014-04-28 09:03:10

标签: c# xna

我从Blender导出了一个island.fbx,我想在xna中导入以创建一个岛屿对象:

public class Island
{
   public Vector3[] Slots;
   public Model Model;
}

fbx内部的一个网格是岛屿的模型。处理器应该从中创建一个Model实例。其他网格是建筑物的插槽。那些位置应该放在Slots数组中:

public override Island Process(NodeContent input, ContentProcessorContext context)
{
    Island newIsland = new Island();

    foreach (NodeContent nc in input.Children)
    {
        string childName = nc.Name.ToLower();
        if (childName.StartsWith("slot"))
            Helpers.ArrayAdd<Vector3>(ref newIsland.Slots, nc.Transform.Translation);
        else if (childName.ToLower().StartsWith("island"))
            newIsland.Model = ???;
    }

    return newIsland;
}

创建模型实例是个问题 我想我可以导入fbx两次(或导出两个fbx文件),一次用于Model,另一次用于创建Island对象。
但这似乎有点矫枉过正。

如何在同一处理器中执行这两个步骤?

1 个答案:

答案 0 :(得分:0)

我会这样做:

public class IslandProcessor : ModelProcessor
{
    public override ModelContent Process(NodeContent input, ContentProcessorContext context)
    {
        ModelContent mc = base.Process(input, context);
        mc.Tag = CreateData(input);

        return mc;
    }
    ...
}

然后像这样加载它:

Island = new Island();
Island.Model = Content.Load<Model>(@"island");
Island.Data = IslandModel.Tag as IslandData;

工作正常,并不是很多工作。