Гайд Как создать кастомные чамсы | RUST/Unity games

Участник
Статус
Оффлайн
Регистрация
18 Май 2023
Сообщения
654
Реакции[?]
173
Поинты[?]
4K
Я хз, но просте репост с юц(нерекламанаркошопа)

Некоторое время назад я хотел сделать пользовательский шейдер, но не смог из-за того, что не знал, с чего начать. Возможно, этот учебник уже есть (и лучше описан), но неважно. На это у меня ушло около 2 часов, потому что у меня нет мозгов, и я подумал, что смогу помочь некоторым из вас (хотя все это уже есть в открытом доступе).
Шаг 1:

Пожалуйста, авторизуйтесь для просмотра ссылки.
(должна быть той же версии, что и Rust). После загрузки создайте новый проект с этой версией Unity.​

Шаг 2:

Чтобы разобраться с этим, мы загрузим плагин для последующего создания AssetBundle. Вы можете следовать этим шагам или просто заглянуть на
Пожалуйста, авторизуйтесь для просмотра ссылки.
для получения дополнительной информации.​

  • Откройте Unity [Package Manager] в вашем проекте (меню: Windows > Package Manager).
  • Нажмите кнопку + (Добавить) в левом верхнем углу окна.
  • Выберите Add package from git URL...
  • Введите
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    в качестве URL-адреса и нажмите кнопку Добавить.

Шаг 3:

Здесь вы создадите новый 3D-проект, создадите .mat, .shader и протестируете шейдер. Однако если вы не знаете, с чего начать, просто посмотрите видеоурок или скачайте мой пример проекта который
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
На этом изображении вы увидите, что на вашем .mat должен быть установлен AssetBundle, если это не так, просто создайте новый и убедитесь, что оба ваших .shader и .mat установлены на него.​
testimg.PNG
СВОЙСТВА ШЕЙДЕРА:

Это свойства, которые можно жестко задать в шейдере, если вы его редактируете или изменяете во время рисования шейдеров. В качестве примера ниже в коде set_shader вы можете сделать что-то вроде этого:

Код:
material->SetColor(Str(L"_Color"), Color(RGB_RAINBOW.Value.x, RGB_RAINBOW.Value.y, RGB_RAINBOW.Value.z, 1.f));
material->SetColor(Str(L"_Color2"), Color(RGB_RAINBOW.Value.x, 0, 0, 1.f));
Вы также можете сделать что-то подобное для таких свойств, как zTest:
Код:
material->SetInt(Str(L"_ZTest"), 8);

  • Для цветов в моем примере мы используем _Color (для видимого цвета) и _Color2 (для невидимого цвета).

  • Для zTest мы используем Less для видимого и Greater для невидимого, вот все свойства + пояснения.
  1. Меньше = Рисуйте геометрию, которая находится перед существующей геометрией. Не рисуйте геометрию, которая находится на том же расстоянии, что и существующая геометрия, или позади нее.
  2. LEqual = рисовать геометрию, которая находится перед существующей геометрией или на том же расстоянии от нее. Не рисовать геометрию, которая находится позади существующей геометрии.
  3. Это значение по умолчанию.
  4. Equal = Рисовать геометрию, которая находится на том же расстоянии, что и существующая геометрия. Не рисуйте геометрию, которая находится перед или за существующей геометрией.
  5. GEqual = Рисовать геометрию, которая находится позади или на том же расстоянии, что и существующая геометрия. Не рисуйте геометрию, которая находится перед существующей геометрией.
  6. Больше = Рисовать геометрию, которая находится позади существующей геометрии. Не рисуйте геометрию, которая находится на том же расстоянии или перед существующей геометрией.
  7. NotEqual = Нарисовать геометрию, которая не находится на том же расстоянии, что и существующая геометрия. Не рисовать геометрию, находящуюся на том же расстоянии, что и существующая геометрия.
  8. Всегда = Проверка глубины не производится. Рисуется вся геометрия, независимо от расстояния.
Существует множество других флагов, с которыми можно повозиться, но пока этого достаточно.

Шаг 4:

Ну что ж, пришло время, давайте откроем браузер assetbundle, нажав Window->AssetBundle Browser.
Открыв его, нажмите "Build" и запишите путь к сборке, потому что этот файл нам понадобится позже. Затем снова нажмите "Build" внизу и дождитесь сборки, как только она завершится, можете закрыть Unity.
Шаг 5: Рендер и чтение нашего шейдера
Следующий шаг довольно прост, но, чтобы не вызывать нареканий, я опускаю некоторые моменты. Эти вещи просты и в основном сводятся к созданию правильных методов/полей для работы шейдера.​
Вам нужно найти пакет активов, который вы создали с помощью unity, и переименовать его в whateveryouwouldlike.assets. После этого просто бросьте файл .assets в папку с файлами rust (в ту же папку, что и RustClient.exe и т.д.). Теперь сделайте так, чтобы приведенный ниже код работал для вашего чит-кода, а затем переименуйте шейдер + набор активов. ВАЖНО если вы поместите .shader/.mat в другую папку в проекте unity, вы должны знать директорию для него и настроить соответствующим образом; Пример:​
Код:
shader = Renderer::LoadAsset(asset_bundle, L"assets/nameofurshader.shader");
Код, который я использую для рендеринга шейдера:
Код:
if (Visuals::Players::Chams)
        {
            static uintptr_t asset_bundle = 0x402402;
            static uintptr_t shader = 0;
            if (asset_bundle == 0x402402) // literally is just saying if asset_bundle == 0x402402 then set the actual one
            {
                asset_bundle = Renderer::LoadAssetBundle(L"nameofurassetfile.assets");
            }
            shader = Renderer::LoadAsset(asset_bundle, L"assets/nameofurshader.shader");

            auto multimesh = player->playerModel()->_multiMesh();
            if (multimesh)
            {
                auto mainRendList = multimesh->get_Renderers();
                for (int idx = 0; idx < mainRendList->size(); idx++)
                {
                    Renderer* renderer = mainRendList->value(idx);
                    if (mainRendList)
                    {
                        Material* material = renderer->get_material();
                        if (material)
                        {
                            if (shader != material->get_shader())
                            {
                                material->set_shader(shader);
                            }
                            //material->SetInt(Str(L"_ZTest"), 8); // hard coded in my shader so i dont need this
                            material->SetColor(Str(L"_Color"), Color(RGB_RAINBOW.Value.x, RGB_RAINBOW.Value.y, RGB_RAINBOW.Value.z, 1.f));
                            material->SetColor(Str(L"_Color2"), Color(RGB_RAINBOW.Value.x, 0, 0, 1.f));
                        }
                    }
                }
            }
        }
Я мог пропустить некоторые шаги/ошибиться, это мой первый большой пост на UnknownCheats(не реклама), так что не знаю. Если у вас есть вопросы, не стесняйтесь писать мне, также я бы рекомендовал использовать это дерьмо только с взломанным ржавчиной или как они его называют... никогда не тестировал в реальности. Пример проекта, который я добавил, это просто самый базовый проект, и я бы рекомендовал изменить дизайн, чтобы соответствовать вам! Мои чамсы радужные и двигаются в зависимости от материала, установленного для них. Вот они без заданного материала
image_2022-10-05_033828055.png

Пожалуйста, авторизуйтесь для просмотра ссылки.


данная тема отлично подойдет к большинству игр на юнити, например EFT
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
18 Май 2023
Сообщения
654
Реакции[?]
173
Поинты[?]
4K
Сверху Снизу