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

Принятый ответ

вопрос очень актуален

кароче
модель которую мы хотим отобразить, нужно сначала отредактировать
на всякий случай, нужно удалить все камеры внутри модели
сделать все материалы незатененными
сделать глобальную анимацию, в которой используя имеющуюся рут кость (к которой прикрепляются все остальные кости), либо, сделав новую рут кость и прикрепить старую к ней, повернуть модель сначала на 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
26
5 лет назад
0
DGUI не предлагать.
А как ты фреймы тогда сделал? DGUI размещает модельки перед камерой игрока, чтобы казалось, что они являются частью интерфейса. У тебя иначе?
0
29
5 лет назад
Отредактирован nazarpunk
0
А как ты фреймы тогда сделал?
BlzCreateFrameByType() и дальше по накатанной. Скриншот кстати из инвентаря на DGUI, я его для наглядности прикрепил.
0
26
5 лет назад
0
8gabriel8:
DGUI не предлагать.
А как ты фреймы тогда сделал? DGUI размещает модельки перед камерой игрока, чтобы казалось, что они являются частью интерфейса. У тебя иначе?
это как бы на последних патчах новые нативки на создание нормального интерфейса
0
10
5 лет назад
0
0
24
5 лет назад
Отредактирован prog
0
Есть нативка BlzFrameSetModel. К сожалению, вращать и масштабировать не выйдет т.к. идет привязка к камере в модели, до которой вроде как невозможно добраться имеющимися способами. И фрейм вроде как нужен правильный для этого.
0
29
5 лет назад
0
noyl, вы вопрос читали? Создавать фрэймы я умею.
Есть нативка BlzFrameSetModel
Нативку я нашёл, но не к каждому фрэйму она применима.
И фрейм вроде как нужен правильный для этого.
Написал парсер фрэймов, чтоб каждый не открывать. Скорей всего, нужен фрэйм с типом MODEL, например
Frame "MODEL" "ScoreScreenBackground" {
			BackgroundArt "UI\Glues\ScoreScreen\ScoreScreen-Background\ScoreScreen-Background.mdl",
			SetAllPoints,
			LayerStyle "NOSHADING",
		}
Как будет время, буду тестировать и отпишусь о результатах.
3
29
5 лет назад
Отредактирован nazarpunk
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
Начало положено, будем копать дальше.
Загруженные файлы
0
32
5 лет назад
0
Это как то делали с уберсплатами, мб покадровая анимация?
0
29
5 лет назад
0
Это как то делали с уберсплатами, мб покадровая анимация?
Да нет, берётся фрэйм и в него вставляется модель из кампании.
0
32
5 лет назад
0
NazarPunk, раньше это было, задолго до мемхака и патчей близзардов.
0
29
5 лет назад
0
раньше это было, задолго до мемхака и патчей близзардов.
Нативки для создания своего интерфейса?
0
32
5 лет назад
0
NazarPunk, нет, просто трекабли и камеры, но так делали древа талантов как в диабле и системы выбора персонажей и экипировки.
0
26
5 лет назад
0
quq_CCCP, а где можно посмотреть такую систему с трекаблями? А то уже очень давно про них слышал, но единственный пример был отвратительно убог.
0
26
5 лет назад
0
8gabriel8:
quq_CCCP, а где можно посмотреть такую систему с трекаблями? А то уже очень давно про них слышал, но единственный пример был отвратительно убог.
например
1
23
5 лет назад
1
вы на хайве читаете хоть?
Все по палочками... а для модель нужен тип Модель и наследуй и в игре триггерно даем путь
например как создать бар www.hiveworkshop.com/threads/ui-creating-a-bar.316254
врашать нельзя а масташ можно...
0
29
5 лет назад
0
вы на хайве читаете хоть?
А вы по своим ссылкам ходите? Там ниразу не сказано ка взять например units\human\HeroMountainKing\HeroMountainKing.mdx и отобразить поверх стандартного интерфейса.
а для модель нужен тип Модель и наследуй и в игре триггерно даем путь
Вы сами пробовали? Попробуйте, вас ждёт много интересного.
0
23
5 лет назад
Отредактирован pro100master
0
NazarPunk, мда! я уже выкладывал
Вот файл
Загруженные файлы
0
29
5 лет назад
Отредактирован nazarpunk
0
мда! я уже выкладывал
Если вы имеете ввиду этот комментарий, то модель не поверх стандартного интерфейса. А если заменить модель на вышеуказанную можно увидеть много чего интересного.
Притом изменить размеры фрейма с моделью никак нельзя.
Загруженные файлы
1
23
5 лет назад
1
NazarPunk, потому что начни уже fdf ковырято как раз он и отвечает наследование фрейма поверх создание..
NazarPunk, там он стоит после наследование оригинала GAME UI на весь экран 100% ширину и высоту..
0
29
5 лет назад
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) на размер фрэйму вообще наплевать.
0
23
5 лет назад
Отредактирован pro100master
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,
	    }

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

На CinematicScenePanel последняя надежда, его я ещё не проверял.
0
23
5 лет назад
0
NazarPunk, потому что не знаеш как он работает.... SetAllpoint значит на все экран растягивает и модель который загружает из указаный путь файла текстур. Который вы видите фон после победы игры. он там отрисован целиком как и загрузчик модель с текстурами....
NazarPunk, просто тренируйся =) Тот платформер модель с текстурами сделално.
0
29
5 лет назад
Отредактирован nazarpunk
0
потому что не знаеш как он работает.... SetAllpoint значит на все экран растягивает
Если вы такой знаток, то скажите почему именно на этот фрэйм не работает BlzFrameClearAllPoints()?
просто тренируйся =)
Просто отличный совет и как он поможет мне в решении поставленного вопроса?
Тот платформер модель с текстурами сделално.
А это здесь вообще причём?
0
23
5 лет назад
0
Вопрос: BlzFrameClearAllPoints()?
Ответ: www.hiveworkshop.com/threads/ui-positionate-frames.315860
Вопрос: Просто отличный совет и как он поможет мне в решении поставленного вопроса?
Ответ: Ошушение что ты ни разу fdf не создавал под свой настройку моделя...
А последный то что невозможное возможно. старайся!
если не сможеш то завтра я тебе скину пример как починят комп!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.