Вы можете использовать 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
reversePath string with the number of levels of the root directory of the
ContentManager . The problem is accessing the full directory of the
ContentManager`, который является частным (или защищенным, я не уверен).Если не считать отражения, я не думаю, что эта переменная может быть доступна.Если мы знаем полный путь к корневому каталогу, тогда это должно работать:
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, чуть-чуть здесь .
Хорошо, вот последняя вещь (используя ответ на вопрос, связанный с выше):
Добавьте ссылку на System.Windows.Forms в ваш проект
Добавьте следующий код в начало файла Game1.cs:
using System.IO;
using TApplication = System.Windows.Forms.Application;
Добавьте этот код там, где он вам нужен, как в 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*");