Ладно, я тут кликбейтнул слегка, извините. Сразу скажу, что сомневаюсь, что эта информация может быть кому-то полезна, возможно, это всё уже давно найдено и описано, но мне такая инфа на глаза не попадалась (хотя, если честно, я и не искал). Вдруг, это пригодится юным мечтателям, желающим конвертировать экранные координаты в мировые))0
Точно могу сказать, что тема не новая: с этими багами я столкнулся год назад, но забил. Короче, пусть будет, надо же что-то в блоге писать, пока его не отобрали.
Баги связаны с выводом 3д модели на экран через фрейм типа SPRITE.
Вкратце:
  • Если в модели есть событийные звуки, то они заспавнятся в центре карты. Игроку они слышны только если территория разведана.
  • Если в модели есть PopcornFX эффекты, то они не отображаются на фрейме, но спавнятся в центре карты. Это видно при неуменьшении масштаба, установки его в пределах 0.1 — 1. Чтобы хорошо разглядеть можно использовать модели без меша или включать внутримодельную камеру без уменьшения масштаба спрайта. И что интересно: если навестись курсором в место спавна эффекта, то можно обнаружить, что кнопки мыши на этой точке не работают. Клики насквозь не проходят, даже колёсико не крутится.
Ниже пруфы.

ЗВУКИ

Прикладываю видос с двумя примерами. Громкость поднял в видеоредакторе, так что берегите ушки.

Код с объяснениями:

--Здесь я запускаю дефолтный эффект NagaDeath, с событийным звуком бульканья в анимации Birth. Создаю в таймере, 
--так как анимация нонлупинговая.
--При подведении игровой камеры к центру карты слышим всплеск
	TimerStart(CreateTimer(), 1.5, true, function()
		nagaspawn = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
		BlzFrameSetAbsPoint(nagaspawn, FRAMEPOINT_CENTER, 0.2, 0.3)
		BlzFrameSetSize(nagaspawn, 0.01, 0.01)
		BlzFrameSetModel(nagaspawn, "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath", 1)
		BlzFrameSetScale(nagaspawn, 0.001)
		BlzFrameSetVisible(nagaspawn, true)
		BlzFrameSetSpriteAnimate(nagaspawn, 0, 0)
		print("spawn")
	end)


--А вот здесь проверяю кодоя. Для наглядности я оставил у него только анимации, где он барабанит, 
--и переимпортировал в карту, поэтому путь нестандартный
--Ситуация со звуком такая же, как и с нагой
	kodo = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
	BlzFrameSetAbsPoint(kodo, FRAMEPOINT_CENTER, 0.2, 0.3)
	BlzFrameSetSize(kodo, 0.01, 0.01)
	BlzFrameSetModel(kodo, "kotobeast_oneanim.mdx", 1)
	BlzFrameSetScale(kodo, 0.00088)
	BlzFrameSetVisible(kodo, true)
	BlzFrameSetSpriteAnimate(kodo, 2, 1)
--

Видео:

POPCORNFX ЭФФЕКТЫ

Код с объяснениями:

--Продолжаем мучать эффект наги, но в этот раз не уменьшаем масштаб. Видео получилось очень наглядное: 
--эффект НЕ НА ЭКРАНЕ в заданных координатах, а В ЦЕНТРЕ КАРТЫ
--
	TimerStart(CreateTimer(), 1.5, true, function()            
		nagaspawn = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
		BlzFrameSetAbsPoint(nagaspawn, FRAMEPOINT_CENTER, 0.2, 0.3)
		BlzFrameSetSize(nagaspawn, 0.01, 0.01)
		BlzFrameSetModel(nagaspawn, "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath", 1)
		--BlzFrameSetScale(nagaspawn, 0.001)
		BlzFrameSetVisible(nagaspawn, true)
		BlzFrameSetSpriteAnimate(nagaspawn, 0, 0)
		print("spawn")
		DestroyFrame(nagaspawn)
	end)
--

--Используем модель стандартного вирма, но не уменьшая масштаб. В аргументе id камеры указан 0 (то есть нулевая камера из модели), но это 
--не обязательное условие, я сделал это именно для наглядности, так как при стандартной камере мы просто ничего не увидим за огромной тушкой. 
--В центре карты появился эффект ледяного дыхания, хотя на самом спрайте он не отображается
--
	Frame01 = BlzCreateFrameByType("SPRITE", "Frame01", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0) 
	BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_TOPLEFT, 0.35, 0.4) 
	BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_BOTTOMRIGHT, 0.6, 0.15) 
	BlzFrameSetModel(Frame01, "units\\undead\\FrostWyrm\\FrostWyrm", 0) 
--


--Вот ещё такой вариантец. Подправил портрет вирма (снёс задний фон), переимпортировал и использовал модельную камеру 
с оригинальным масштабом. Попкорны всё там же. Результат на скриншоте
--
	Frame01 = BlzCreateFrameByType("SPRITE", "Frame01", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0) 
	BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_TOPLEFT, 0.35, 0.4) 
	BlzFrameSetAbsPoint(Frame01, FRAMEPOINT_BOTTOMRIGHT, 0.6, 0.15) 
	BlzFrameSetModel(Frame01, "wyrm_portrait", 0) 
--

Видео:

Нотариально заверенный скриншот:

P.S.

Если это лютый баян, и всем известно, то почему вы мне не рассказали? извините за кринж и слоупочество.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
32
1 год назад
Отредактирован Берги
1
Нет не баян, это почти никто не использовал просто, чтобы юзать модельки и использовать тип фрейма "SPRITE".
Я от них отказался в своё время по причине "не возможности воспроизведения конкретных анимаций", возможно либо не умел либо на тот момент функция BlzFrameSetSpriteAnimate не работала.
Да это критично, да баг есть, возможно сами разрабы не проверяли даже, но как говорится, всегда есть альтернативы для анимации фреймов, например последовательная смена бекдропа, либо же самодельные спрайты по тому же принципу. Либо ручками удалить звук из моделей и загрузить модели обратно без звука и воспроизводить звук самостоятельно
2
23
1 год назад
Отредактирован Makeba
2
по причине "не возможности воспроизведения конкретных анимаций"
O rly?
Тут 4 спрайта по 5 аним в каждом.
BlzFrameSetSpriteAnimate работает, но там принцип работы идиотский. Есть 5 индексов от 0 до 4, при использовании которых из модели подтянутся анимации с именами birth, death, stand, morph, morph alternate соответственно.

Вообще, sprite интересная штука. При использовании спрайта с внутримодельной камерой он начинает взаимодействовать с портретным фреймом на уровне отображаемых моделей. То есть, они как бы рендерятся в одном трёхмерном пространстве, и могут перекрывать друг друга, в зависимости от своего расположения внутри координат mdx. Я даже хотел это изучить поподробнее, но вспомнил, что реф мёртв, и охладил своё трахание.
Загруженные файлы
0
32
1 год назад
0
Да сейчас всё уже работает, ещё на момент, когда рамки фреймов со стима стали тащить уже работало.
О наконец-то ты карты анимировал
0
23
1 год назад
0
Да я ещё в прошлом году, просто
вспомнил, что реф мёртв, и охладил своё трахание
Загруженные файлы
0
32
1 год назад
0
Ничего он не мёрт, пока комьюнити что-то делает
Чтобы оставить комментарий, пожалуйста, войдите на сайт.