Текст подправлен 15.06.2020 (исправлен код настройки материалов) Общение с Ebel натолкнуло на мысль, как можно разнообразить действующие юниты через Мод в К3. Рассмотрим стандартный файл описания объекта юнита, для примера взят знаменосец из мода state_vs_country_plus_16.51 Файл, ..\data\objects\units\flagmanlatepru Нас будет интересовать секция посвященная текстуре юнита, materialproperty. materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty} Mesh[0].DefaultMaterialName = flagmanlatepru Mesh[0].UseableMaterials[0] = flagmanlatepru section.end В секции определена единственная текстура flagmanlatepru. Что мы делаем. Заменяем этот абзац на следующий. materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty} Mesh[0].DefaultMaterialName = flagmanlatepru RandomMaterialName = True Mesh[0].UseableMaterials[0] = flagmanlatepru Mesh[0].UseableMaterials[1] = flagmanlatepru2 Mesh[0].UseableMaterials[2] = flagmanlatepru3 Mesh[0].UseableMaterials[3] = flagmanlatepru4 Mesh[0].UseableMaterials[4] = flagmanlatepru5 section.end Главное в этом блоке это возможность описать целый массив текстур. Плюс активизирована переменная RandomMaterialName. Теперь программа «случайным» образом перебирает текстуры и добавляет их к юниту. Заготавливаем новый набор текстур для знаменосца: = flagmanlatepru2, flagmanlatepru3, flagmanlatepru4, flagmanlatepru5. В текстуре изменен флаг, а картинка самого юнита оставлена прежней. Прописываем новые текстуры в файле units.mat (для мода state_vs_country_plus_16.51 в units_rise18.mat) Пример записи текстуры section.begin {refurl=.\data\materials\ref\refunit.mat} Material.Name = flagmanlatepru2 Material.Texture.image = .\data\materials\units\offdrum18\flagmanlatepru2.dds section.end Запускаем мод и смотрим, что получилось. С новыми знаменосцами отряды будут представлять разные полки и батальоны. Добавим возможность прусскому гусару менять масть коней. Файл ..\data\objects\units\hussarlatepru.prop Нас интересует секция коня гусара autochildrenproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=autochildrenproperty} Enabled = True Mesh[0] : struct.begin Children : struct.begin [0] : struct.begin BaseName = hussarpru_horse DefaultMeshName = hussarpru_horse.mesh Mesh[*] = hussarpru_horse.mesh DefaultMaterialName = horsehussarlateprudip Materials[*] = horsehussarlateprudip struct.end struct.end struct.end section.end Меняем выделенныю строку Materials[*] = horsehussarlateprudip на RandomMaterialName = True Mesh[0].UseableMaterials[0] = horsehussarlateprudip Mesh[0].UseableMaterials[1] = horsehussarlateprudip2 Mesh[0].UseableMaterials[2] =horsehussarlateprudip3 Mesh[0].UseableMaterials[3] =horsehussarlateprudip4 Mesh[0].UseableMaterials[4] =horsehussarlateprudip5 Mesh[0].UseableMaterials[5] =horsehussarlateprudip6 Добавляем новые текстуры коней, прописываем их в в файле units.mat (для мода state_vs_country_plus_16.51 в units_rise18.mat) и запускаем мод Еще раз хочу поблагодарить Ebel за предоставленный материал и консультацию, пожелать ей скорейшего выздоровления. 15 июня 2020 Более сложный вариант. Мы хотим разнообразить выпуск юнитов путем сменой модели (mesh) из списка. Нам понадобятся юниты с одинаковой анимацией. Все примеры берутся из Мод-тест State vs Country Imperia http://www.cossacks3.com/forum/index.php?threads/state-vs-country.30223/page-91#post-89514 Необходимо поменять два файла. 1 Файл описания актера (mesh) Файл, ..\mods\state_vs_country_imperia\data\actors\units\officer19gvarus.actor Жирным шрифтом выделены куски для добавления section.begin {refurl=.\data\actors\ref\refunit.actor} ShaderLODList.List[0].ShaderID = 18 ShaderLODList.List[0].ShaderIDIM = 11 Animations.LoadFromFile = .\data\animations\aaf\officer19gvarus.aaf ActorList.Items[0].Name = officer19gvarus.mesh ActorList.Items[0].LODList.Items[0].MeshObjects.LoadFromFile = .\data\actors\units\officer19gvarus.oss ActorList.Items[1] : struct.begin {refurl=.\data\actors\ref\refunit.actor; refkey=.ActorList.Items[0]} Name = officer19gvarus2.mesh LODList.Items[0].MeshObjects.LoadFromFile = .\data\actors\units\officer19garrus.oss struct.end section.end 2 Файл описания юнита, obj ..\mods\state_vs_country_imperia\data\objects\units\officer18laterusgva.prop Раздел actorproperty actorproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=actorproperty} LODActorName = officer19gvarus DefaultMeshName = officer19gvarus.mesh RandomMeshName = True UseableMeshes : struct.begin [0] = True [1] = True struct.end section.end Раздел Материалов materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty} Mesh[0].DefaultMaterialName = officer19gvarus Mesh[0].RandomMaterialName = True Mesh[0].UseableMaterials[0] = officer19gvarus Mesh[0].UseableMaterials[1] = officer19gvarus01 Mesh[1].RandomMaterialName = True Mesh[1].DefaultMaterialName = officer19gvarus2 Mesh[1].UseableMaterials[0] = officer19gvarus2 Mesh[1].UseableMaterials[1] = officer19gvarus3 section.end На скрине юнит, гвардейский офицер, случайно меняет и mesh, и material
Привет. Большое спасибо за этот урок, который принесет больше разнообразия в единство игры. Однако у меня есть вопрос. Можно ли сделать то же самое с сеткой? Если возможно, если кто-то может объяснить это мне. Потому что вы должны управлять сменой 3D-модели и анимации. заранее спасибо
Исправлен код смены материалов RandomMaterialName = True Mesh[0].UseableMaterials[0] = flagmanlatepru Mesh[0].UseableMaterials[1] = flagmanlatepru2 Смена mesh теоретически прописана в свойствах. На практике пока не получилось.
Добавлено в тему изменение случайным образом mesh http://www.cossacks3.com/forum/inde...-юниты-в-моде-используя-массив-текстур.30443/