21Oct

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

Самый прямой путь к "успеху" был бы использовать uGUI (собственно как у нас и сделана вся верстка в игре). Самый кривой путь - использовать UI Toolkit (пока это не продакшен-реди решение).

Но для первого варианта нужно было бы писать код постоянно (т.е. захотим добавить или переверстать страницу - придется привлекать программиста, художника, верстальщика и прочих людей).

Поэтому я предложил вариант сделать автоматическую верстку из html. Т.е. на вход нам дают html-верстку + css, а дальше оно само верстается (некий аналог UI Toolkit, но с обрезанной функциональностью и с возможностью добавлять любые свои теги, которые бы рисовали префабы вместо себя).

Что мне понадобилось:

https://html-agility-pack.net (парсер для DOM)

https://github.com/TylerBrinks/ExCSS/tree/master (парсер для CSS)

https://github.com/hcesar/HtmlAgilityPack.CssSelector (css-селекторы для DOM)

Дальше все оказалось довольно просто.

Мы заводим массив структур

public struct Node {
     public string tag;
     public string @class;
     public GameObject source;
}

По этому массиву мы будем проходить для каждой ноды и искать нужный префаб, который соответствует конкретному объекту dom (сначала мы ищем по принадлежности класса и тега, а потом уже по тегу).

В итоге получилось что-то такое:

Код (который написан почти в одном файле в стиле "я у мамы программист"):

HTML.zip

Read More