Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Записи блога, опубликованные MasterGH

  1. MasterGH
    CT таблица для составления регулярных выражений 4-х функций
     
    string.match (s, pattern [, init]) string.gmatch (s, pattern) string.gsub (s, pattern, repl [, n]) string.find (s, pattern [, init [, plain]]) Функция string.gsub может принимать в аргумент функции "repl" таблицу (тогда будет замена по ключам значений из таблицы ) или в аргумент "repl" может попадать некоторая другая функция с аргументом найденного слова (тогда будет вызов этой другой функции при каждом захвате символа или слова). Более подробное в документации Lua 5.3
     
    Еще несколько ссылок с практическим руководством
     

    Lua Regular expression.CT
  2. MasterGH
    Unity — среда для тренировки искусственного интеллекта. Ниже пример обучения ИИ для игры в гонки.
     
     
    В новой версии Unity много изменений, если кому интересно на официальном сайте много информации по обновлениям
  3. MasterGH
    В версии Unity 2018 довольно много интересного.
     
    1. Это Unity Hub. Та штука, которая позволяет быть в курсе новых версий Unity. 
    2. PackageManager. Покажет пакаджи установленный в проекте.
    3. Pro Builder. Довольно интересный инструмент, который позволяет моделить оркужение в Unity и творить простые локации, здания и создавать примитивы с наложением текстур... там очень много чего, я не не смотрел особо. Это альтернатива террейну. Фишка в том, что мы не являясь художниками (2д, 3д артистами), на Pro Buildere можем вполне сносное сделать окружение в нереалистичном стиле.  И не очень мультяшный и не похожий на реалистичный стиль. В таком стиле в теории можно сделать быстро игру. Встроить туда рекламы и инаппов, ну и если все будет ок, то будет приносить прибыль на маркетах. Важнее продвинуть аппу вверх, на вид, чем сделать её;
    4. У Unity развиваются мощные системы сервисов. Есть поддержка иннпов, рекламы, аналитики, багрепорты (альфа версия), стеки крашей и исключений с характеристиками устройств пользователей. Не все баги там можно увидеть. Google Play консоль ловит больше багов, крашей и ANR (диалоги с "подождите ваша программа что-то долго делает или не отвечает, или будет закрыта").
    5. Запомнился 2d аниматор с ригом. Т.е. риг это склет обычно на 3д модель, а теперь риг можно делать на 2д модели.
    6. Пока больше не помню, что такого интересно... 
     
    В 2017 версии появилась возможность скрипты связывать с отдельными dll сборками. В теории это позволит увеличить скорость компиляции. Например, у нас в проекте на младших версиях Unity на правку уходит 8 секунд компиляции на мощном компе,т.к. все скрипты в одной сборке dll. Пока не тестили эту фичу...
  4. MasterGH
    У меня бывают такие случаи, когда увидишь простой пример кода после которого захочется заняться разработкой какой-нибудь игры. 
    Вот один из таких примеров о том, как сделать подъем и опускание предмета и затем его вращение. Это 5 строчек "таких" и 5 строчек "таких", вот подъем и вращение
     
    На видео код можно применять для левитации предметов и вражеских персонажей, которых  можем поднимать, удерживать и бросать. 
  5. MasterGH
    В игровом движке может быть следующая архитектура
     
    Менеджер сцен
        Список сцен
            Сцена1
              Менеджер игровых объектов
                Список игровых объектов
                    Игровой объект1
                    Игровой объект2
                    Игровой объект3
            Сцена2
              Менеджер игровых объектов
                Список игровых объектов
                    Игровой объект1
                    Игровой объект2
                    Игровой объект3
            Сцена3
              Менеджер игровых объектов
                Список игровых объектов
                    Игровой объект1
                    Игровой объект2
                    Игровой объект3
            
    Сцены могут подгружаться по одной или несколько сразу и выгружаться.
    Каждый игровой объект содержит менеджер поведений
     
    Игровой объект
        Менеджер проведений
            Список игровых проведений
                Поведение1
                Поведение2
                Поведение3

    Поведения есть стандартные от игрового движка и есть пользовательские, которые пишут программисты.
    Стандартное поведение Transform нахождение в пространстве может быть установлено по умолчанию у всех игровых объектов.
    Поведение Transform хранит позицию, углы, масштаб, а также методы перемещения, вращения и другие.
     
    Если представить себе иерархичную древовидную структуру, то именно по ней игровые объекты могут находиться друг в друге. Как папки файлового браузера. Transform позволит узнать является ли игровой объект родителем, дочерним по отношению к другому игровому объекту.
     
    Система событий позволяет отправить событие по иерархии вглубь, из глубины или конкретному игровому объекту. Поведения могут содержать функции, которые принимают событие и реагируют на него. Например, я отправил игровому объекту событие "по иерархии вглубь" о том, что в такой-то точке есть сигнал бедствия. Поведения, которые приняли это событие могут обработать его и направить ботов "спасателей" в эту точку.
    Поведения содержат функции игрового движка. Некоторые из них могут быть как: Update(), Start(), Enable(), Disable(), FixedUpdate()
     
    Update - срабатывает перед кадром отрисовкой. Time.DeltaTime дельта времени между кадрами
    FixedUpdate - также как и Update(), только это перед "кадром физики".
    Start(), OnEnable(), OnDisable() - первый запуск, включение и выключение поведения.
     
    Игровые объекты могут содержать строковый тег и номер слоя. Игровые объекты по слоям могут быть видны камере, могут взаимодействовать по физике. Слоем может быть номер или битовая маска.
  6. MasterGH
    Точка входа в работу читов на Cheat Engine на следующем видео будет начинаться с активирующего скрипта. Таблицу с читами по принципу активирующего скрипта я покажу на видео. В нем будет об общем принципе написания таблицы на CE и расширении её с большим количеством опций + фильтр свой/чужой через функцию commonalities + вынос адреса начала структуры + запись по оффсетам от начала структуры и т.п.
     
    "Активирующий скрипт" — главный скрипт, который вытаскивает адрес начала структуры игрока и помещает его в зарегистрированную метку.
    Также активирующий скрипт содержит однобайтовые регистрируемые метки читов, по которым происходит запись по offsets от начала структуры. По меткам другие скрипты записывают однобайтовые значения 1 или 0.
    Характерно для активирующего скрипта большой размер, много регистрируемых однобайтовых меток и активируется он до запуска читов, чтобы метки успели зарегистрироваться и их "увидели" другие скрипты. 
     
    Руководство. Как запустить так называемый активирующий чит до активации каких-либо читов автоматически.
     
  7. MasterGH
    Конечно не секрет, что типы данных не правильно определяются. Вот пример для 50-ти адресов
     
    Слева как определил данные CE. Справа как определил их я по логу ниже

    Понравились данные с размером в 1 байт, привлекают в нимание. Как только я переключил на ноль или 1, то персонаж перестал двигаться и не реагировал на движение.
     
    Лог инструкций
     
    Пытаюсь по логам определить алгоритм для Lua, чтобы скрипт сам ставил тип и смещение. Конечно есть сюрпризы, когда регистр перезаписывает сам себя и еще куча опкодов. Чтобы получить такой лог мож попробовать этот скрипт. Он черновой
     
     
  8. MasterGH
    Охота на структуры и удивительное путешествие в мир структур в L4D2
     
    1. Игру L4D2 в оконный режим
    2. Установка плагина (позже)
    3. Установка VEH отладчика, иначе вылеты
    4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию

    Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт...
     
    5. Делаем сигнатуру любой инструкции при работе  с патронами на всякий случай, если игра вылетит.
    server.dll,83 BE 14 14 00 00 00 7F 4D 6. Переходим в код и ищем проскакивающие адреса на инструкции. Там один адрес нашего  пистолета. Клик на него и переносим адрес начала будущей структуры в окно Dissect Window.  Можно не создавать структуру (отказываемся). Кликаем "Scanner" (он будет на всех окнах dissrct data)
     

     
    7. Далее побежало сканирование.

     
    В игре можно что-то делать, можно ничего не делать. Долго ждать..
     
    Меняю опции. Чувствительность как была так и осталась минимальная (это время ожидания прерывания на адресе умноженное на коэфициент чувсвительности и на 100 мс).  Размер структуры меняю, до 1100

     
    Наконец ~30 секунд дождался без вылетов (иногда бывают,  возможно из-за VEH). Появился результат

     
    Самые интересны это байтовые и float значения. и инструкции чтения. Их определит можно пока только по логам...
     
    Меняю первый байт на 1 и пистолет стал очень быстро стрелять.

     
    Ради чего это все и делалось, чтобы похожие адреса искать...
     
    Если сравнить дефолтную расструктуризацию, она слева

     
     
    Логи (для меня и для желающих) по определению типа по опкодам
     
    Плагин выложу позже. Надо еще доработать и потестить.
     
    Вот к примеру float распознал как Pointer и там где fst тоже по +42C тоже фигня. Это ошибки. Это быстро поправить, но могут быть еще ошибки.

     
    Не менее интересны еще вложенные структурки, которые удается раскрыть (не все). Вот одна из них и усеяна параметрами, которые можно покрутить

     
    Вложенные структуры пока отдельно можно создавать в окнах, чистить сканером, потом подставлять их в основную структуру по имени. В общем пока рано об этом писать.
     
    Больше всего меня волнует польза, т.е. что можно с этим сделать. Пока только сразу вышел на скорострельность. Еще шесть параметров покрутил байтовых, ничего не дало. Надо еще попробовать выводить только смещения, которые работают на инструкцияъ чтения, а не "чтении и записи". Запись скорее всего не нужна. Значения просто активно перезаписываются  в структуре. А вот оставлять смещения,  с которыми работает только "чтение" скорее всего даст куда больше вероятности найти параметр настройки.
  9. MasterGH
    Наткнувшись на тему вспомнил, что  не все написал. В прошлом посте блога рассматривал бряк через DBVM.  К сожалению, та версия dbvm из поста блога пропускала очень много инструкций и практически смысла нет её юзать.  Например она определяла 16 инструкций, когда их было несколько тысяч, т.е. например 500 оффестов и на каждой по 10 инструкций. По DBVM надо, конечно, писать Дарк Байту, но желания нет.
     
    Так вот. Не только с DBVM можно ставить бряки на участок памяти.  Есть еще тип  брейкпоинтов page exceptions. О нем давно-давно известно и он как на ладони, но почему-то я пропустил его, когда искал оффсеты в структурах
     

     
    С ним можно работать с lua и без. Ловит огромное количество инструкций. Желательно мощное железо, т.к. игра скорее всего будет очень тормозить по 2-5 fps. Но на короткий запуск сойдет. 5 секунд и достаточно для снятия логов. На пару действий в игре тоже сойдет: выстрел или пермещение персонажа, прыжок или вообще ничего не делаем просто снимаем логи.
     
    1) способ поставить бряк из окна памяти. Подопытная программа "Tutorial-x86_64.exe"

     

     

    Здесь видно, что размер 720 байт
     
    Логи из окна инструкций CE 
     
    2) Способ через Lua (подробнее в документации)
    debug_setBreakpoint(structure_address, sizeMemory, bptAccess, bpmException, onBreakpoint)  
    P.S. Я написал про два способа установки брейкпоинта на множество адресов без DBVM. Вручную можно ставить такие брейкпоинты, но дальше уже кропотливый просмотр на предмет того чем это может помочь. Это может помочь определить типы данных и помочь прикинуть размер структуры, а также найти активные оффсеты. Можно на Lua автоматически определять активные offsets по базовому адресу структуры и эту структуру создать и заполнить в dessectData. Если будет время напишу скрипт.
  10. MasterGH
    Пример лога снятия данных с брейкпоинта на структуру 0x1000 за 10 секунд.
    В структуре по смещению 0x2C0  находится здоровье персонажа. На начало этой структуры и был поставлен брейкпоинт .
     
    Ниже будет большой кусок опкодов, который работает со структурой. Можно посмотреть в каком порядке опкоды исполняются и с какими смещениями, насколько далеко они друг от друга. Некоторые смещения рядом с известными смещениями могут заинтересовать.  Одинаковые опкоды в определенном порядке, но по разным RIP тоже могут заинтересовать. Switch-case могут заинтересоваь в виде cmp [x]. число. Инструкции чтения из структуры больше интересуют, т.к. они могут более вероятно, на что-то влиять - из них читается и для чего-то это нужно. 
     
     
    Причем последовательность инструкций идет в порядке вызова, но RIP всегда уникальный (RIP не дублируются). Здесь RIP, т.к. CE 64 разрядный
    Если последовательность к данным структуры примерно сохраняется, то можно обратить внимание на обращение к адресам в структуре рядом со здоровьем по смещению 2с0: до обращения к адресу здоровья, во время и после. Я выделил их стрелками. Эти смещения могут быть связаны со здоровьем

     
    Интересные моменты могут быть с так называемыми switch-case операциями. Можно пытаться их подменить

  11. MasterGH
    В этой записи блога не будет чего-то, что показало бы "вау, это что-то новое и есть результат". Все сырое и результат пока мне только снится — быстрый поиск условий и включение, и выключение ветвей по этим условиям. Мыслю я не инструкциями, не группой инструкций, а ветвлениями кода и условиями, которые их запускают. Проще 20 ветвлений по 5 окон, чем тонна инструкций... Жаль пока теория, практики с результатом нет.
     
    Рисунок. На нем слева прототип, справа текущий сырой вариант
     
    1) ставим брейкпоинт на адрес патронов
    2) от него расплетаются ветви кода от каждого хита, от каждой инструкции, и по ретам ветвление выходит из рутины
     
    Кружи означают ret-ы. Клик на круг будет переходлм в дизассемблер
    Стрелки будут показывать входы и выход связанные с соседними рутинами (поиск общих адресов будет стрелками)
     

     
    На экране справа вариант без стрелок, т.к. не успел еще их отладить. 4 ветки трассера по ретам из рутины связанные с адресом патронов, выстрелами.
    Потом я продолжал стрелять, перезаряжаться, выкидывать и поднимать оружие. В итоге собрал 20 ветвлений по ретам от инструкций связанные с патронами
     
     

     
    Как видно, довольно все еще сырое, но видно, что все 20 ветвлений по ретам сформировались до корневого цикла.
     
    Потом можно будет, я надеюсь, увидеть связи между этим ветвлениями, когда я прикручу стрелки. По кружкам кликать и переходить в дизассемблер и смотреть условия выше. На условии искать другие адреса, которое запускает ветвь кода. На адресах опять делать ветвления (новое окно с ветвлениями о ретам)... На практике будет получаться более двух таких окон (для патронов). Нужно будет искать адреса связанные с условиями в новом окне.
     
     
  12. MasterGH
    В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь.

    Цель: скрафтить без компонетов по нажатию кнопки
     
    Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll
    Открываем файлик и смотрим на классы связанные с крафтом
     
    Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem
       
    Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количества вещей  и удаляю лишний код. Под сполерами оригинальный и модифицированный код
     
    Визуальное сравнение
     
    Модифицированный код
     
    Оригинальный
     
    Изменяем весь класс или метов в этом окне
     
    Если выводит ошибки при компяляции, то скачиваем IlSpy и его код вставляем в код в dnSpy. Или качаем DnSpy 3.2.0 или ранее
     
    Изменения сохраняем в модуль, запускаем игру и крафтим.
     
    Получить все рецепты (не проверял правда, попробуйте если хотите)
     
    Вещи не ломаются. Убрать отнятие "здоровья" у вещи
     
     
  13. MasterGH
    Сложность: 1/5.
    В этом видео рассматривается способ взлома игры "Удаление инструкций" (noping).
    С помощью этого способа игровое значение не будет перезаписываться игрой, потому что в игре удаляется инструкция записи значения.
     
     
  14. MasterGH
    Связь точек линиями и связь через метод описанный в статье
     
    Пример1. Слева линии, справа работа алгоритма
     

     
    Пример2. Скриншот из pdf документа с разным значением коэфициента
     

     
    Пример3. С альфа и без альфа канала
     
     
    Ссылка на статью.
    Часть оригинала bundles_infovis.pdf
     
    Где можно применить? Пока не придумал, но впечатлило.
  15. MasterGH
    Вступление
     
    В CE выделим участок кода и функцию
    Sub eax,edx - вычитание и наиболее значимее чем запись и чтение.
    После декомпиляции
    Если выделили две инструкции
     
    Обращать внимание будем на математику, логику, условия и потом на чтение и запись.
    В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"
     
     
    Как поставить декомпилятор
    1. С форума Cheat Engine качаем архив
    2. Распаковываем в папку с Cheat Engine
    3. В настройках открываем плагин cesmartdec.dll
    4. Идем на инструкцию, выделяем функцию 
    5. Декомпилируем на первой выделенной инструкции из всех выделенных
     
  16. MasterGH
    Обычно, дается 4 аппаратных брейкпоинта на адреса памяти. Их можно включать одновременно  и найти инструкции, которые в данный момент срабатывают. Так можно определить тип данных у адресов и найти инструкции. По инструкциям найти смещения внутри дизассемблированной инструкции. По смещениям визуально определить структуры в структурах. Расструтуризовать структуру в dessect data и найти много интересных параметров для читов. Вручную с 4мя бряками делать очень хлопотно. 
     
    Начинается все с установки огромного бряка на структуру из туториала CE.

     
    Логи
     
    По логам видим, что какие-то инструкции обращаются и скорее всего обращаются к нашей той самой структуре. Проверим так ли это и заодно увидим к каким другим структурам идет обращение
     

     
    Видим, что одна из инструкций действительно обращается к нашей структуре и далеко за пределам диапазона 4 брейкпоинтов. Т.е. это действительно огромный такой брейкпоинт на всю структуру.
    Также видим, что инструкция отработала по другим 4 структурам и это могли быть враги  и друзья игрока.
    Также видим, что тип данных автоматически неверно определился в окна DesectData и мы можем его скорективать - это будет 1 байт

     
    Вот так можно проводить ручную расструктуризацию. Кропотливо по байтикам на весь размер структуры выставлять коментарий и правильный тип данных - не все типы данных могут подцепиться и при экспериментах с изменением значений могут быть глюки в игре или даже вылеты. После того как вся структура изучена, можно сделать множество читов, которых нет ни в одном трейнере, если их еще не сделали.
  17. MasterGH
    Вдохновение появилось после просмотра видео @Xipho по Ultimap
    Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA.
    Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать.
     
    Пока из подсказок я нашел это и это
     
    Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен не из ultimap, а из tracelog)
       
    Адрес1 - Tutorial-i386.exe+2578F - 29 83 AC040000        - sub [ebx+000004AC],eax" или адрес 0x00402B77
    Адрес2 - Tutorial-i386.exe+16DBED - 89 45 FC              - mov [ebp-04],eax или адрес  0x0056DBED
     
    И вот думаю, как  скрипт ниже переделать, чтобы сначала вывести текстовый маршрут, а потом и хотя бы одну ветвь кода. Т.е. поднимаясь вверх по иерархии вызовов нужно остановиться до Адреса2.
     
     
    Пока просто вывод от стартовой функции без условий
     
    Как будет время попробую доделать...
     
    p.s. Ну ничего так idc скрипты. Много всего, но смысл тот же, что и в CE Lua у некоторых функций. Еще не разобрался как Python подключить к IDA, пока на idc скриптах.
    Будет интересно еще посмотреть эту же задачу на Hydra и Radare, ну и в CE (в новой версии появилось окно диаграмм)
     
  18. MasterGH
    Legacy of Kain: Defiance
     
    Это старая PC игра выпущена в районе 2003-2004 годах, когда я еще учился в школе в классе 11-ом.
    В самом конце игры была сложная миссия сражения с боссом, никак не получалось её пройти.
     
    Кстати из этой игры есть персонаж на аватаре у пользователя с форума Cheat Engine
     
    Не мог пройти, как не пытался. То ли руки не из того места, пройти очень хотелось. Было у меня немного журналов игровых и там я много раз видел программу MTC. Казалось, что она очень сложная для понимания. Просто помнил о ней и не пользовался.
     
    Так вот игру пройти не мог и решил все-таки MTC научиться пользоваться. С помощью МТС я впервые сделал чит на HP и прошел игру. После этого я переломал все игры, которые у меня были, изучил в этой программе все что можно, хотя с большим трудом это все давалось. Потом появился Интернет. Узнал про Artmoney и другие сканеры. Кстати 9 мая разработчики обещали новую версию Artmoney.
     
    В общем с Legacy of Kain: Defiance и МТС, и началось увлечение взломом игр
  19. MasterGH
    1. WebSite-Watcher позволяет отслеживать изменения на веб-страницах в том числе по по регулярным выражениям. Можно отслеживать изменения на сайтах Cheat Engine и других. Форум отслеживать смысла особого нет. Проще подписаться на обновление и почтовый клиент поставить.
    2. Программы тестирования и автоматизации под разные ОС:
        Sikuli — открытая кросс-платформенная визуальная среда создания сценариев-скриптов
        AirTest IDE — почти как Sikuli и более того, китайские разработчики были вдохновлены Sikili и решили взять из него многое и использоваться  в QA тестировании. 
    3. Автоматический скрывать значков на рабочем столе AutoHideDesctopIcons
    4. LightShot - быстро делаем скриншоты и заметки к ним. Можно еще использовать SnagIt, он еще и видео может снимать
    5. f.lux — софтина регулирующее цветовую температуру компьютерного монитора
    6. VerseQ — лучший на мой взгляд клавиатурный тренажер. Есть плагины тренировки на языки программирования
    7. Scanner — показывает график в виде секторов о данных на жестком диске
    8. ProcessExplorer, ProcessMonitor, WinScanner, API Monitor... все по системе
    9. Возможно понравится XYplorer как замена или дополнение к файловому браузеру
    10. NotePad ++ и sublime_text - на мой взгляд хорошие редакторы текста, может быть даже одни из лучших
     
    Как-то раз нужно было поставить пробелы между китайскими иероглифами в гугл таблице (все для игры на Unity), чтобы в игре разрядить текст и он не был мелким. На notepad++ это выгладило так

  20. MasterGH
    1. Нашел адрес патронов
    2. Поставил брейкпоинт
    3. Выкинул из рук Калаш с этими патронами
    4. Увидел инструкцию, которая срабатывает когда что-то выкидываешь.
     
    Решил зацепиться за эту инструкцию.
     
    Либо спавн до инструкции, либо после.
    Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали (маркеры слева на сриншоте снизу).
    Поставил кнопкой бряки на все инструкции ветвления
     
    Снимал бряки, когда в игре ничего не делал по F5
    Затем, когда прерываться перестал. Оказался на том месте на скриншоте. Там уже идет ветвление, когда выкидываешь.
    Сделал трейслог из рутины на этой инструкции и второй — в рутину, которая срабатывала постоянно, когда ничего не выкидывали.
     
     
    Получается что-то типа этого условия
    cmp [[edi+00048704]+10],[[edi+00048704]]
     
    Если предмет из рук не выкидывается на сцену, то условие истины и происходит прыжок. Если оружие было викинуто, то в правой части другое значение. Затем левая и правая где-то дальше обнулятся.
    ------------------
    Что я хочу сделать. Разобраться с поиском условий по ветвлениям, которые изменяют [[edi+00048704]+10] и [[edi+00048704]], делать это по аналогии как было описано выше. Для начала, для спавна не запускать поток на его функции, а поменять данные, которые проверяют условия (где-то по рутине), чтобы предметы сами из рук выкидывались. Пока так.
  21. MasterGH
    Опубликованная в веб формате книга на официальном сайте.
    Язык английский
     
    Перейти
     
    Оглавление книги
     
    Книга о приемах программирования больших проектов, в которых огромное количество строк кода. Основная проблема, когда ты уже что-то написал и надо добавить в уже существующий проект внушительный функционал или же наборот его поменять, или убрать. Хватаешься за галову и думаешь, что проще написать проект заного. Автор из числа тех программистов, которые оставляют свой опыт и знания (есть донат). Порой бывает информация более полезной в блогах чем где-либо, редко бывает в виде книг.
     
    Про автора книги знаю очень мало, кому надо можете погуглить.
  22. MasterGH
    Был вопрос на форуме о том, как узнать, а куда смотрит игрок и как нарисовать линию в экранных координатах.
    Я не нарисую отрезки в окне игры в экранных координатах, но могу отобразить точки одного отрезка для одного глаза 2д-панельками в экранных координатах (хотя визуально, у Unity экранные координаты связаны с 3д координатами по масштабу пикселя на метр на сцене). Для наглядности все же в окнах сцены будут отрезки в 3д-координатах.
     

     
     
     
    Чтобы посмотреть функции операторов такие как умножение, сложение и свойства normalized, и переписать код на C++ можно декомплировать .net библиотеку C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll через ILSpay. Например, там есть расчеты умножения кватерниона (X,Y,Z,W) на эйлеровы углы (X,Y,Z), нормализация, сложение. Библиотеку это можно взять из Unity игр или установив движок Unity.
     
    Адреса позиции и углов обычно находятся рядом друг с другом.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.