Как с помощью фрэймов отобразить модель героя?
Захотелось сделать свой инвентарь на фрэймах, только вон никак не могу найти способ отобразить модель героя. Желательно с возможностью вращать и масштабировать.
DGUI не предлагать.

Без ответа.


Просмотров: 1 069

» Лучшие комментарии


8gabriel8 #1 - 7 месяцев назад 0
DGUI не предлагать.
А как ты фреймы тогда сделал? DGUI размещает модельки перед камерой игрока, чтобы казалось, что они являются частью интерфейса. У тебя иначе?
NazarPunk #2 - 7 месяцев назад (отредактировано ) 0
А как ты фреймы тогда сделал?
BlzCreateFrameByType() и дальше по накатанной. Скриншот кстати из инвентаря на DGUI, я его для наглядности прикрепил.
Hate #3 - 7 месяцев назад 0
8gabriel8:
DGUI не предлагать.
А как ты фреймы тогда сделал? DGUI размещает модельки перед камерой игрока, чтобы казалось, что они являются частью интерфейса. У тебя иначе?
это как бы на последних патчах новые нативки на создание нормального интерфейса
noyl #4 - 7 месяцев назад -2
prog #5 - 7 месяцев назад (отредактировано ) 0
Есть нативка BlzFrameSetModel. К сожалению, вращать и масштабировать не выйдет т.к. идет привязка к камере в модели, до которой вроде как невозможно добраться имеющимися способами. И фрейм вроде как нужен правильный для этого.
NazarPunk #6 - 7 месяцев назад 0
noyl, вы вопрос читали? Создавать фрэймы я умею.
Есть нативка BlzFrameSetModel
Нативку я нашёл, но не к каждому фрэйму она применима.
И фрейм вроде как нужен правильный для этого.
Написал парсер фрэймов, чтоб каждый не открывать. Скорей всего, нужен фрэйм с типом MODEL, например
Frame "MODEL" "ScoreScreenBackground" {
			BackgroundArt "UI\Glues\ScoreScreen\ScoreScreen-Background\ScoreScreen-Background.mdl",
			SetAllPoints,
			LayerStyle "NOSHADING",
		}
Как будет время, буду тестировать и отпишусь о результатах.
NazarPunk #7 - 7 месяцев назад (отредактировано ) 3
Итак выудил из комментариев карту с моделью кампании на весь экран. Как и думал, копать нужно в сторону фрэймов с типом MODEL.
library UItest initializer init

	globals
		private framehandle gameUI
		private framehandle customUI
		private framehandle customUI_Backdrop
		private framehandle editbox
		private framehandle editbox_Backdrop
		private integer case = 0
	endglobals
	
	private function act takes nothing returns nothing
		if case == 0 then
			call BlzFrameSetVisible(editbox, false)
			set case = 1
		elseif case == 1 then
			call BlzFrameSetVisible(editbox, true)
			set case = 0
		endif
	endfunction
	private function init takes nothing returns nothing
		local trigger tr = CreateTrigger()
		
		set gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
		set customUI = BlzCreateFrameByType("MENU", "customUI", gameUI, "StandardPopupMenuMenuTemplate", 0)
		call BlzFrameSetSize(customUI, 0.032, 0.032)
		call BlzFrameSetPoint(customUI, FRAMEPOINT_BOTTOM, gameUI, FRAMEPOINT_BOTTOM, 0.0, 0.12)
		set editbox = BlzCreateFrameByType("SPRITE", "SlidingDoors", customUI, "StandardFrameTemplate", 0)
		call BlzFrameSetPoint(editbox, FRAMEPOINT_CENTER, customUI, FRAMEPOINT_CENTER, 0.0, 0.0)
		call BlzFrameSetModel(editbox, "UI\\Glues\\Singleplayer\\Nightelfcampaign3d\\nightelfcampaign3d.mdx", 0)
	
		call BlzFrameSetSpriteAnimate(editbox, 1, 0)

	endfunction
endlibrary
Начало положено, будем копать дальше.
Прикрепленные файлы
quq_CCCP #8 - 7 месяцев назад 0
Это как то делали с уберсплатами, мб покадровая анимация?
NazarPunk #9 - 7 месяцев назад 0
Это как то делали с уберсплатами, мб покадровая анимация?
Да нет, берётся фрэйм и в него вставляется модель из кампании.
quq_CCCP #10 - 7 месяцев назад 0
NazarPunk, раньше это было, задолго до мемхака и патчей близзардов.
NazarPunk #11 - 7 месяцев назад 0
раньше это было, задолго до мемхака и патчей близзардов.
Нативки для создания своего интерфейса?
quq_CCCP #12 - 7 месяцев назад 0
NazarPunk, нет, просто трекабли и камеры, но так делали древа талантов как в диабле и системы выбора персонажей и экипировки.
8gabriel8 #13 - 7 месяцев назад 0
quq_CCCP, а где можно посмотреть такую систему с трекаблями? А то уже очень давно про них слышал, но единственный пример был отвратительно убог.
Hate #14 - 7 месяцев назад 0
8gabriel8:
quq_CCCP, а где можно посмотреть такую систему с трекаблями? А то уже очень давно про них слышал, но единственный пример был отвратительно убог.
например
pro100master #15 - 7 месяцев назад -1
вы на хайве читаете хоть?
Все по палочками... а для модель нужен тип Модель и наследуй и в игре триггерно даем путь
например как создать бар www.hiveworkshop.com/threads/ui-creating-a-bar.316254
врашать нельзя а масташ можно...
NazarPunk #16 - 7 месяцев назад 0
вы на хайве читаете хоть?
А вы по своим ссылкам ходите? Там ниразу не сказано ка взять например units\human\HeroMountainKing\HeroMountainKing.mdx и отобразить поверх стандартного интерфейса.
а для модель нужен тип Модель и наследуй и в игре триггерно даем путь
Вы сами пробовали? Попробуйте, вас ждёт много интересного.
pro100master #17 - 7 месяцев назад (отредактировано ) -2
NazarPunk, мда! я уже выкладывал
Вот файл
Прикрепленные файлы
NazarPunk #18 - 7 месяцев назад (отредактировано ) 0
мда! я уже выкладывал
Если вы имеете ввиду этот комментарий, то модель не поверх стандартного интерфейса. А если заменить модель на вышеуказанную можно увидеть много чего интересного.
Притом изменить размеры фрейма с моделью никак нельзя.
Прикрепленные файлы
pro100master #19 - 7 месяцев назад -1
NazarPunk, потому что начни уже fdf ковырято как раз он и отвечает наследование фрейма поверх создание..
NazarPunk, там он стоит после наследование оригинала GAME UI на весь экран 100% ширину и высоту..
NazarPunk #20 - 7 месяцев назад 0
потому что начни уже fdf ковырято
И какой из .fdf мне расковырять, если модель создаётся не из них?
local GAME_UI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
local MODEL_WRAP = BlzCreateFrameByType("MENU", "", GAME_UI, "StandardPopupMenuMenuTemplate", 0)
BlzFrameSetSize(MODEL_WRAP, 0.000001, 0.000001)
BlzFrameSetPoint(MODEL_WRAP, FRAMEPOINT_CENTER, GAME_UI, FRAMEPOINT_CENTER, 0.0, 0.0)
local MODEL = BlzCreateFrameByType("SPRITE", "", MODEL_WRAP, "StandardFrameTemplate", 0)
BlzFrameSetPoint(MODEL, FRAMEPOINT_CENTER, MODEL_WRAP, FRAMEPOINT_CENTER, 0.0, 0.0)
BlzFrameSetModel(MODEL, "UI\\Glues\\Singleplayer\\Nightelfcampaign3d\\nightelfcampaign3d.mdx", 0)
И как видно из BlzFrameSetSize(MODEL_WRAP, 0.000001, 0.000001) на размер фрэйму вообще наплевать.
pro100master #21 - 7 месяцев назад (отредактировано ) 0
NazarPunk, StandardFrameTemplate это наследует от fdf оригинала
SPRITE а есть и MODEL
например это с fdf
потрет в батленет иконка где там клан
Frame "SPRITE" "IconSelectPortrait" {
        Width 0.0900,
        Height 0.09185,
        SetPoint CENTER, "IconSelectPortraitBorder", CENTER, 0.0, 0.0,

        Frame "BACKDROP" "IconSelectPortraitHighlight" {
            SetAllPoints,
            BackdropBlendAll,
            BackdropBackground  "UI\Widgets\BattleNet\bnet-profileportrait-cover.blp",
        }
    }
как видим создаем спрйат а внутри рисуем фон. а во время код внедряем модель и радуем!
А это кинеметик потрет который низу показывает
Frame "FRAME" "CinematicScenePanel" {

        // This is used to hide whatever is below the portrait from showing through.
        Frame "BACKDROP" "CinematicPortraitBackground" {
            Width 0.116,
            Height 0.116,
            SetPoint BOTTOMLEFT, "CinematicPanel", BOTTOMLEFT, 0.014, 0.014,
            DecorateFileNames,
            BackdropBackground  "EscMenuBlankBackground",
        }

        // NOTE: If you change the dimensions or location of the "CinematicPortrait",
        //       then you also need to change the above "CinematicPortraitBackground"
        //       to match those same dimensions.
	    Frame "SPRITE" "CinematicPortrait" {
	        Width 0.116,
	        Height 0.116,
	        SetPoint BOTTOMLEFT, "CinematicPanel", BOTTOMLEFT, 0.014, 0.014,
	    }

	    Frame "BACKDROP" "CinematicPortraitCover" {
	        Width 0.144,
	        Height 0.144,
	    
	        SetPoint BOTTOMLEFT, "CinematicPanel", BOTTOMLEFT, 0.0, 0.0,
	    
	        DecorateFileNames,
	        BackdropTileBackground,
	        BackdropBackground  "EscMenuBlankBackground",
	        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
	        BackdropCornerSize  0.048,
	        BackdropBackgroundSize  0.256,
	        BackdropBackgroundInsets 0.01 0.01 0.01 0.01,
	        BackdropEdgeFile  "EscMenuBorder",
	        BackdropBlendAll,
	    }

	    Frame "TEXT" "CinematicSpeakerText" INHERITS "EscMenuTitleTextTemplate" {
	        SetPoint TOPLEFT, "CinematicPortraitCover", TOPRIGHT, 0.015, -0.035,
	    }
	    
	    Frame "TEXT" "CinematicDialogueText" INHERITS "EscMenuTitleTextTemplate" {
	        Width 0.6,
	        SetPoint TOPLEFT, "CinematicSpeakerText", BOTTOMLEFT, 0.0, -0.004,
	        FontColor 1.0 1.0 1.0,
	    }

    }
NazarPunk #22 - 7 месяцев назад 0
pro100master, а почему тогда сразу не взять фрэйм MODEL?
Frame "MODEL" "ScoreScreenBackground" {
	BackgroundArt "UI\Glues\ScoreScreen\ScoreScreen-Background\ScoreScreen-Background.mdl",
	SetAllPoints,
	LayerStyle "NOSHADING",
}
Неработает оно ничерта.

На CinematicScenePanel последняя надежда, его я ещё не проверял.
pro100master #23 - 7 месяцев назад 0
NazarPunk, потому что не знаеш как он работает.... SetAllpoint значит на все экран растягивает и модель который загружает из указаный путь файла текстур. Который вы видите фон после победы игры. он там отрисован целиком как и загрузчик модель с текстурами....
NazarPunk, просто тренируйся =) Тот платформер модель с текстурами сделално.
NazarPunk #24 - 7 месяцев назад (отредактировано ) 0
потому что не знаеш как он работает.... SetAllpoint значит на все экран растягивает
Если вы такой знаток, то скажите почему именно на этот фрэйм не работает BlzFrameClearAllPoints()?
просто тренируйся =)
Просто отличный совет и как он поможет мне в решении поставленного вопроса?
Тот платформер модель с текстурами сделално.
А это здесь вообще причём?
pro100master #25 - 7 месяцев назад 0
Вопрос: BlzFrameClearAllPoints()?
Ответ: www.hiveworkshop.com/threads/ui-positionate-frames.315860
Вопрос: Просто отличный совет и как он поможет мне в решении поставленного вопроса?
Ответ: Ошушение что ты ни разу fdf не создавал под свой настройку моделя...
А последный то что невозможное возможно. старайся!
если не сможеш то завтра я тебе скину пример как починят комп!
NazarPunk #26 - 7 месяцев назад (отредактировано ) 0
Ошушение что ты ни разу fdf не создавал под свой настройку моделя...
Если бы создавал, то не завал бы вопросов, логично? А если бы вы хотели помочь, то вместо всей этой писанины уже бы пример сбросили и вопрос был бы закрыт.
то что невозможное возможно. старайся!
Только давайте без розовой мотивационной лапши. Каким образом мне нужно стараться, чтоб получить ответ на поставленный вопрос?
Koladik #27 - 2 месяца назад 0
NazarPunk, Есть какие-то подвижки в вопросе? Как я понял, вопрос пока решен только для особых моделей.
pro100master #28 - 2 месяца назад 0
Влад59, Береш модель где имеет камера просмотр таких навалом лица моделя с камерой в модели который ставляли камеру это и есть будет выводить во фрейм. А простые модели без камер не будет работать!
GetLocalPlayer #29 - 2 месяца назад 0
Влад59:
Как я понял, вопрос пока решен только для особых моделей.
Мы можем отобразить модель на экране, но только модель, в составе которой (в файле самой модели) присутствует камера. Пример такой модели - модель портрета юнита. Но мы можем их только отобразить. Мы не можем их масштабировать, вращать, изменять и т.д. То есть решения на данный момент нет.
Единственно возможный костыль - создать спец. эффект перед игровой камерой идентичный модели персонажа, со всеми вытекающими недостатками данного способа.
pro100master #30 - 2 месяца назад 0
GetLocalPlayer, что можно через анимации манипулировать left right со скоростью. Так как ясно что такое не получается проигривать анимацию в модели сколько бы не провал лишь сработал когда у анимки есть диалог. К примеру когда вы войска отдаете приказ у аватар начинает говорить а после чего молчит все это и есть манипуляции анимации.
Koladik #31 - 2 месяца назад 0
GetLocalPlayer, pro100master, Спасибо за ответы! Понятно, что требование камеры это, по сути, для стандартных моделей требование дополнительной костыльной модели с камерой(-ами).
Но в этом меня удивляет такой факт: Когда мы импортируем модель без отдельного портрета, то у юнита можем лицезреть на месте портрета импортированную модель с совершенно непредсказуемых ракурсов (точнее с ракурса камеры портрета юнита выбранного перед этим). Но когда я пытаюсь провернуть такой же "дурацкий" эффект вручную то получаю просто черный экран, даже если размер фрейма я выбрал небольшой.
Hate #32 - 2 месяца назад (отредактировано ) 1
вопрос очень актуален

кароче
модель которую мы хотим отобразить, нужно сначала отредактировать
на всякий случай, нужно удалить все камеры внутри модели
сделать все материалы незатененными
сделать глобальную анимацию, в которой используя имеющуюся рут кость (к которой прикрепляются все остальные кости), либо, сделав новую рут кость и прикрепить старую к ней, повернуть модель сначала на 90 градусов вправо относительно лица, затем "назад" на спину на 90, так что бы если вы включили позицию камеры сверху, модель была прямо перед вами
сделать в той же глобальной анимации скейлинг на рут кости на 1 от оригинала в 100
в самой игре, сделать фрейм по типу спрайта использовав и наследовав вар3лого
new_Frame = BlzCreateFrameByType("SPRITE", "justAName", GAME_UI, "WarCraftIIILogo", 0)
настраивать размер можно через
BlzFrameSetScale(new_Frame, 0.15)
учтите что модель может быть все еще огромна для экрана, так что используйте минимальные скейлы, убедитесь что она есть где то на экране
BlzFrameSetSize(new_Frame, 0.35,0.35)
BlzFrameSetAbsPoint(new_Frame, FRAMEPOINT_CENTER, 0.4, 0.3)
задав размер, можно менять положение на какое угодно
BlzFrameSetModel(new_Frame, "war3mapImported\\myModel.mdx", 0)
прописывать нужно модель как обычно, двойными слешами и с путем как обычно в импорте
BlzFrameSetSpriteAnimate(new_Frame, 3, 0)
воспроизводит анимацию модели по индексу, узнать их можно сконвертировав модель в MDL и открыв через блокнот посмотреть какая анимация в списке, начиная с нуля сверху вниз, последняя цифра в функции скорее всего зациклить ли анимацию, не тестил.
сама модель воспроизводит постоянно Stand 1