Giter Site home page Giter Site logo

dorofiykolya / unrealdotnet Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mrkriv/unrealdotnet

0.0 2.0 0.0 128.72 MB

C# plugin for Unreal Engine 4

License: Apache License 2.0

C# 71.08% Batchfile 0.01% ANTLR 0.17% C++ 27.64% Objective-C 0.54% C 0.56%

unrealdotnet's Introduction

UnrealDotNet

UnrealDotNet - это плагин для Unreal Engine 4 позволяющий исполнять код на языке С#.

Помимо вызова статических методов из с++/Вlueprint, плагин позволяет взаимодействовать с объектами движка и наследоваться от таких классов как AActor, ACharacter, USceneComponent и т.д. Поддерживается переопределение виртуальных методов и работа с событиями, такими как OnComponentEndOverlap. Плагин позволяет перезагружать сборки c# без перезапуска движка.

Демонстрация работы (видео довольно старое):

Не используйте это в продакшене!!!

Настроенный проект

Скачать настроенный проект Win64 UE 4.20 + dotnet 2.1.8

Настроить самому

  1. Скачиваем этот проект
  2. Скачиваем и устанавливаем net core runtime
  3. Копируем папку с coreclr.dll (примерно в C:\Program Files\dotnet\shared\Microsoft.NETCore.App\..\ в Plugins\UnrealDotNet\Binaries\Win64\dotenet_clr)
  4. Каким либо образом находим Newtonsoft.Json.dll и кидаем в Plugins\UnrealDotNet\Binaries\Win64\dotenet_libs
  5. Собираем HotReloadUtilit из проекта Plugins\UnrealDotNet\Source\SharpUtilites.sln
  6. Проверяем что Plugins\UnrealDotNet\Source\UnrealEngineSharp\NativeManager.cs:17 правильное имя С++ сборки
  7. Компилируем GameLogic.sln
  8. Запускаем DotUnrealExample.uproject

Поддерживается версия движка 4.20. Однако плагин легко переносится на другие версии движка. Для перехода на другую версию необходимо заново сгенерировать обертки при помощи CodeGeneretor. После этого возможно придётся отредактировать CodeGenerator.json и HeaderScanList.txt для отключения компонентов вызывающих проблемы.

!!! На данный момент компиляция проекта вне редактора сломана, и придётся в ручную копировать папки и использовать бубен.

Roadmap

Реализовано:

  • Создание C# классов, наследованных от AActor
  • Горячая перезагрузка C# кода
  • Отладка C# кода
  • Вызов статичных методов из C++ и Blueprint
  • Вызов простых методов C++ и Blueprint из C#
  • Компиляция для Win64

Частично реализовано:

  • Переопределение виртуальных методов
  • Взаимодействие с классами UE4
  • Взаимодействие со структурами UE4
  • Взаимодействие с перечислениями UE4
  • Взаимодействие со свойствами объектов UE4
  • Редактирование публичных свойств из редактора UE4

Описание работы

Взаимодействие с с++ происходит при помощи P/Invoke, для этого на основе заголовочных файлов движка генерится куча export методов в с++ и c# библиотека UnrealEngine.dll для вызова этих методов. Для большинства наследников UObject создаются manage классы. Они необходимы для корректного наследования от этих классов в c#. Так же создаются копии перечислений и структур для работы с движком. Кроме того плагин поддерживает работу с событиями. Генерацией этих оберток занимается CodeGeneretor.

Схема взаимодействия

Плагин использует среду выполнения net core clr, на данный момент поддерживается только Win64. При запуске движка выполняется загрузка CLR в приложение, далее в него загружаются управляемые сборки.

Для каждого объекта в c# создается обертка, содержащая только адрес реального объекта и его тип. Все обращения к свойствам или методам являются P/Invoke вызовами. При создании экземпляра manage класса происходит создание объекта в ue4 и его обертки в c#.

unrealdotnet's People

Contributors

mrkriv avatar

Watchers

James Cloos avatar Mykola Dorofii avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.