нереальный engine4 — сделать собственный код C ++ для проекта в UE4

привет @ все

Я новичок в UE4, поэтому, если я сделаю что-то ужасное, скажи это мне. Я счастлив всему, чему могу научиться

Вопрос: возможно ли сделать Blueprint из обычного класса C ++? … это должно … с правом включает в себя …
потому что я создал класс C ++ «Graph» для университета, и мне нравится внедрять его в игру в качестве основы Skill-Tree.
Это должно быть «UCLASS (Blueprintable)», чтобы сделать его простым и понятным для чтения. А также Native, конечно же, я занимаюсь сборкой мусора для системы 🙂

Код такой:

#include <iostream>
#include <list>

template<class T>
class Graph
{public:
T element;
std::list<Graph<T>*> childs;
std::list<Graph<T>*> parents;
Graph();
Graph(T);
~Graph();
Graph<T>* makeNewChild(T);
bool pushChildtoParent(Graph<T>*);
Graph<T>* makeNewChild(Graph<T>*);
bool deleteChild(Graph<T>*);
bool makeParent(Graph<T>*);
T getElement();
bool leaf;
};

template<class T>
Graph<T>::Graph()
{
leaf = true;
element = nullptr;
}

template<class T>
Graph<T>::Graph(T element) : element(element)
{
leaf = true;
}

template<class T>
Graph<T>::~Graph()
{
if(!leaf)
{
for (auto it = childs.begin(); it != childs.end();)
{
// wenn das kind nicht mehrere Väter hat, denen ich es nicht weg nehmen will
if ((**it).parents.size()<2)
{
delete *it ++;
}
else{
(**it).parents.remove(this);
it ++;
}
}
}
if (!(*this).parents.empty())
{
for (auto it = parents.begin(); it != parents.end(); it++)
{
//alle Väter vergessen dieses Kind, damit es ohne folgen beseitigt werden kann
(**it).deleteChild(this);
}
}
}

template<class T>
T Graph<T>::getElement()
{
return (*this).element;
}

template<class T>
bool Graph<T>::deleteChild(Graph<T>* tokill)
{
for (auto it = childs.begin(); it != childs.end(); it++)
{
if( (*it)==tokill){
childs.erase(it);
return true;
}
}
// Error code hier einfügen
std::cout<<"Leider dieses Kind nicht gefunden. Error main2.h at line 61"<<std::endl;
return false;
}

//eingane der zu setzende Vater. Wenn setzen des Vaters gelingt, wird er in die Liste der Väter aufgenommen

template<class T>
bool Graph<T>::makeParent (Graph<T>* newParent){
if ((*newParent).pushChildtoParent(this)){
parents.push_back(newParent);
return true;
}
else{
//Error code hier einfügen
std::cout<<"das Erzeugen dieses Kindes bei dem Vater war nicht möglich. Error main2.h at line 76"<<std::endl;
return false;
}
}

template<class T>
bool Graph<T>::pushChildtoParent(Graph<T>* inTree){
childs.push_back(inTree);
leaf = false;
return true;
}

template<class T>
Graph<T>* Graph<T>::makeNewChild(T inValue)
{
Graph<T>* contain = new Graph<T>(inValue);
childs.push_back(contain);
(*contain).parents.push_back(this);
leaf = false;
return contain;
}

template<class T>
Graph<T>* Graph<T>::makeNewChild(Graph<T>* inTree)
{
childs.push_back(inTree);
(*inTree).parents.push_back(this);
leaf = false;
return inTree;
}

Или я должен переписать его без шаблона?
Конечно, я уверен, что тип T будет «Skill *»

Я думаю, что на этом этапе Blueprints приложат усилия для того, чтобы развить баланс между навыками и так далее, лучше, быстрее и проще в обращении.

Было бы неплохо, если бы вы могли помочь мне в этом вопросе 🙂

С уважением
ОО

0

Решение

Я обнаружил, что самый простой и надежный способ использовать «чужой» код c ++ в UE4 — это создать некоторый прокси-сервер UCLASS, который использует ваш пользовательский класс c ++ и сам может вызываться чертежами. Причиной этого является то, что UE4 имеет свой собственный способ работы в C ++, например Вы должны использовать «TArray» вместо «list» и «UE_Log» вместо «stdout».

Поэтому я бы предложил следующее:

  • Создайте новый класс C ++, который расширяет UObject (или AActor, если вы хотите поместить его на уровень):

Создать новый класс C ++

  • включить свой собственный график в новый класс
  • Добавьте к вашему классу аннотированные методы UFUNCTION (BlueprintCallable, …), которые вызывают и манипулируют графом (а также конвертируют в и из UE4 и необработанных типов C ++, если это необходимо)
  • (Необязательно) Создайте новый план, расширяющий ваш новый класс C ++ для добавления функций через редактор чертежей.
  • Теперь вы можете использовать свой новый класс в других проектах
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]