Войти
ПрограммированиеФорумГрафика

XNA: как добавить ресурсы в Content Pipeline из программы

Страницы: 1 2 Следующая »
#0
0:26, 6 янв. 2012

Все, кто знаком с XNA знают, что для того чтобы отобразить в проекте какой либо контент (текстуру, модель и т.д.) его нужно сначала через Solution Explorer добавить в проект, и тогда он поместится в папочку Content и при компиляции проекта ресурсы проекта также скомпилятся в *.xnb файлы и очень успешно загрузятся.
Это всё, конечно, очень удобно, если бы ни одно Но. А что если нам нужно динамически добавлять контент в программу - например загружаем в игру новый уровень, и соответственно загружаем предназначенный для него контент. Ни каждый же раз при добавлении уровня компилировать проект :)))
Эту проблему я уже частично решил. Оказалось, что не обязательно добавлять контент через интерферс Visual Studio. Достаточно скопировать готовые *.xnb файлы в папку в контент, и обычным способом - content.Load<Texture2D>(TextureFilename) загрузить. Всё работает.

Тогда встает другой вопрос - как тогда, минуя компилятор, конвертировать файлы в XNB формат? ну или же вообще как добавлять их в Content Pipeline? Есть ли в XNA для этого какие то функции?
Нашел статью - http://www.gotdotnet.ru/blogs/gsaf/2896/ . Кстати, тут сказано что текстуры можно загружать посредством метода FromFile класса Texture. Это плюс. А вот модели нельзя.
А модели здесь компилируются хоть и автоматизированно, но опять же довольно извращенно, на основе компилятора VS.

Вопрос думаю ясен. Как же таки добавлять контент в уже скомпилированную игру? :)


#1
1:04, 6 янв. 2012

msbuild.
http://vlks.blogspot.com/2011/10/msbuild.html

#2
1:15, 6 янв. 2012

zlos спасибо. Всё таки какой то вариант.
Но всё же не идеальный. У меня просто в голове не укладывается что ресурсы в игру нельзя добавлять без студии - уж точно не достойно проекта, такого масштаба. Явно есть какой то другой способ...
Я думаю что ресурсы компилировать в редакторе уровней (или в чем то подобном). А в игре загружать уже скомпиленные, описанным мною методом.

Вопрос адекватной комплиляции контента остается открытым.

З.Ы. классный блог кстати ) надо ознакомится)

#3
1:27, 6 янв. 2012

С точки зрения XNA игра - законченный продукт в который внезапно не может быть ничего добавлено. Для XBOX и для WP7 нет даже технической возможности хоть что то добавить в игру после того как та выпущена. Так что если надо делать что то с такой возможностью - то придётся изобретать что то другое или брать другой инструмент.

#4
1:39, 6 янв. 2012

"Для XBOX и для WP7 нет даже технической возможности хоть что то добавить в игру после того как та выпущена"
Да, про это я как бы уже подумал.

"Так что если надо делать что то с такой возможностью - то придётся изобретать что то другое или брать другой инструмент"
Нет слов. Жесть. С большой и доставляющей буквой Ж.
К XNA я всё таки пришел от DirectX Managed (глючного и ныне закрытого проекта). С#, .NET - хорошо всё это. Удобство работы с XNA по сравнению с DirectX, вызвало сначало смешанные чувства, но потом всё таки пришлось по вкусу.
Но вот ТАКОГО я, если честно, даже от мелкомягких неожидал...

Кстати, незнаю, или я чего то не так понял или...
ну в общем тут (MSDN) написано про неймспейс Content.Pipeline
Эмммм.... ну я в общем... не нашел я этот самый pipeline в студии :-[  Щас юзаю VS 2008 + XNA 3.0

#5
4:03, 6 янв. 2012

RABBITSV
Он находится где то в совершенно другом месте. Автоматом добавляется если делать Content Pipeline Extension. В рантайме его нет вообще, только в версии для разработчиков.

#6
4:27, 6 янв. 2012

я им не пользуюсь - свой написал..

#7
11:07, 6 янв. 2012

Shawn Hargreaves пишет, как это сделать.

P.S. Это фича XNA 4.0.

#8
11:32, 6 янв. 2012

Ммм... если я правильно понял (извиняюсь, тороплюсь, убегаю..)
То в 4.0 есть такого рода (внизу) импортеры, которые собсна и позволяют добавлять всякий контент в pipeline?
TextureImporter importer = new TextureImporter();
TextureContent texture = importer.Import("cat.tga", new MyImporterContext());
Я правильно понял?

А если не правильно... мда..... печально.. похоже придецца компилировать всё через MSBUILD... разве что, конечно, не вручную, а в проге отдельной это заделать.
Кстати, этот msbuild, он с фреймворком стандартным идет, или тока со студией? (иными словами - придецца ли юзверю для пользования ей качать что то кроме .NET Framework?)

#9
16:54, 6 янв. 2012

Вот еще глянь примерчик.
http://create.msdn.com/en-US/education/catalog/sample/winforms_series_2
Тут правда не xnb, а просто fbx или x, но в рантайме.

#10
19:39, 6 янв. 2012

RABBITSV
MSBUILD идёт с .NET сразу. А юзверю придётся ставить разработческую версию XNA и Студию, поскольку без Студии оно не ставится. В xnaredist ничего связанного с обработкой контента не идёт. Лучше тогда сделать что то своё, то что пытаетесь сделать сродни забиванию гвоздей отвёрткой, инструментом предназначенным для совсем другого.

#11
20:31, 8 янв. 2012

Inc
Спасибо огромное за пример!!! Помоему как раз то что нужно)) Правда и здесь не без MSBUILD, но зато всё в рантайме.
"Тут правда не xnb" - Да ну, помому там ресурсы компилятся через msbuild и используются

Просто пока нет времени, сильно занят научной работой :( А чуть позже - разберусь,

zlos
"А юзверю придётся ставить разработческую версию XNA и Студию, поскольку без Студии оно не ставится."
Ммм.. тут я не совсем понял, зачем студия и XNA Game Studio, если MSBUILD входит в .NET Framework (начиная с версии 2.0!)?
А хотя.. ну всё, понял... туплю... действительно он нужен для компиляции...

Мда... Ну вот как не назвать XNA после этого полной херней и не забить на неё отвёрткой болт.. :(

#12
21:41, 8 янв. 2012

RABBITSV
> Мда... Ну вот как не назвать XNA после этого полной херней и не забить на неё
> отвёрткой болт.. :(

Надо познать философию.
XNA разрабатывали люди, у которых многолетний опыт создания коммерческих игр для консолей.
Если что-то не получается, то велик шанс, что ты что-то делаешь не так.

Плюсов у XNA для рядового разработчика гораздо больше чем недостатков.

Лучше озвучь, то что хочешь сделать конкретно.

#13
21:51, 8 янв. 2012

Demiurg-HG
"Плюсов у XNA для рядового разработчика гораздо больше чем недостатков. "
Да я заметил (это я прямом смысле - там действительно очень многое удобнее делать чем в DX, но если при этом еще и знаешь DirectX - так вобще всё шикарно)

"Лучше озвучь, то что хочешь сделать конкретно."
Нууу... дык вроде уже озвучил) Ладно, еще раз:

Как БезГеморойно загружать в рантайме в программу ресурсы? модели и тд - вот весь вопрос

#14
23:23, 8 янв. 2012

RABBITSV
> Как БезГеморойно загружать в рантайме в программу ресурсы? модели и тд - вот
> весь вопрос

Во-первых, это тебе зачем то надо, собственно цель меня и интересует.
Вполне возможно, что это можно сделать проще, или проблемы на самом деле и нет :)

Во-вторых:
- Звуки грузятся через метод FromStream
- Текстуры грузятся через метод FromStream
- Модели ты можешь создавать в рантайме, и у тебя всегда есть доступ к вершинным и индексным буферам.
  Способы загрузки моделей слишком разнообразны, чтобы создавать рантайм классы для каждого возможного типа файлов.
Проблема только с загрузкой эффектов. Это объясняется тем, что на Xbox и Windows Phone нет компилятора шейдеров.

Ну и наконец, можно весь контент собрать через MSBuild, а также методом описанном в блоге Shawn Hargreaves.
Поставить Visual C# Express Edition + XNA SDK на машину артиста или мод-мэйкера - особой проблемы нет.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.