gpt4 book ai didi

c# - 如何从文件路径而不是内容加载 XNA 模型(例如 Model.FromStream 但它不存在)

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:11 24 4
gpt4 key购买 nike

如何从文件路径而不是从内容加载 XNA 模型(例如,Model.FromStream 但它不存在)? Texture2D.FromStream,我怎样才能为 Model 做同样的事情?

最佳答案

您可以使用 Content.Load<Model>("Path here, make sure you use drive letter");

如果你真的需要一个FromStream模型上的方法,您可以使用扩展方法(不完全是 FromStream 的完美副本,但它应该可以工作):

public static Model FromPath(this Model model, ContentManager content, string path)
{
return content.Load<Model>(path);
}

编辑:

我刚刚测试了上面的代码,显然,您需要匹配 "..\\" in a 的数字,而不是使用驱动器号。反向路径 string with the number of levels of the root directory of the内容管理器 . The problem is accessing the full directory of the ContentManager` 是私有(private)的(或 protected ,我不确定)。如果不使用反射,我认为无法访问该变量。如果我们确实知道完整的根目录路径,那么这应该可行:

string reversePath = "";
foreach (string level in Content.FullRootDirectory.Split('\\'))// I know there isn't actually a property 'FullRootDirectory' but for the sake of argument,
{
reversePath += "..\\";
}
reversePath = reversePath.Substring(4);

我在谷歌上搜索了几次,但没能找到获取 ContentManager 根目录的方法。我什至可能会在 SO 上问这个问题 here .

好的,这是最后一件事(使用上面链接的问题的答案):

  1. 将对 System.Windows.Forms 的引用添加到您的项目

  2. 将以下代码添加到 Game1.cs 文件的顶部:

    using System.IO;
    using TApplication = System.Windows.Forms.Application;
  3. 在任何需要的地方添加此代码,例如在 LoadContent 或扩展方法中:

    string ContentFullPath = Path.Combine(Path.GetDirectoryName(TApplication.ExecutablePath),
    Content.RootDirectory);

    string reversePath = "";
    foreach (string level in ContentFullPath.Split('\\'))
    {
    reversePath += "..\\";
    }

    reversePath = reversePath.Substring(3);


    Model test = Content.Load<Model>(Path.Combine(ContentFullPath, reversePath) + "*Your file name here*");

关于c# - 如何从文件路径而不是内容加载 XNA 模型(例如 Model.FromStream 但它不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com