Unreal Engine 4
http://uengine.ru/forum/

Помогите пожалуйста
http://uengine.ru/forum/viewtopic.php?f=19&t=8540
Страница 1 из 1

Автор:  Maxonyx [ 08 сен 2017, 00:47 ]
Заголовок сообщения:  Помогите пожалуйста

Я знаю что обычно к таким просьбам относятся с негодованием, но не могли бы вы мне помочь написать на си блок для блюпринта, мне каждый код дается с таким трудом :/ и в итоге ничего не работает =) Мне нужен блок который будет экзекать локальную функцию в блюприте по имени не задавая никаких параметров. тоесть тупо блок с водом имени который запускает функцию. я не представляю как это сделать, пытался найти солюшен на гитхубе и на форумах поддержки, но ничего не вышло.

Автор:  Noob256 [ 08 сен 2017, 10:37 ]
Заголовок сообщения: 

300$/час

Автор:  Maxonyx [ 08 сен 2017, 14:53 ]
Заголовок сообщения: 

там дела на 2 минуты максимум если ты знаешь движок. Так что твое заявление смотрится не то что не остроумно, а предельно глупо.
Могу тебя за 300$ в час научить нормально шутить, обращайся.

Блок с вводными данными я сам создал, мне просто нужно узнать как вызвать локальную функцию в бп по имени. Я думал этот форум как раз для подобных вопросов создан, я ошибся?

Автор:  Noob256 [ 08 сен 2017, 15:57 ]
Заголовок сообщения: 

function f(name)
if name = "ggg" then ggg()
end

это конечно не готовый код, но понять что делать можно...

Автор:  Snake [ 08 сен 2017, 18:12 ]
Заголовок сообщения: 

эм... а "стандартный запуск" функции по имени(!) в блуепринтах не? не используем принципиально?
Изображение

Автор:  Snake [ 08 сен 2017, 18:27 ]
Заголовок сообщения: 

ну если сильно прям не устраивает таймер то вот его нужный фрагмент:

https://github.com/EpicGames/UnrealEngi ... y.cpp#L246

Код:
UFunction* const Func = Object->FindFunction(FunctionFName);

Автор:  Maxonyx [ 08 сен 2017, 21:52 ]
Заголовок сообщения: 

Спасибо большое ребята.

Автор:  Maxonyx [ 11 сен 2017, 10:34 ]
Заголовок сообщения: 

Что-то у меня плохо получается =( Вроде собирается и даже работает, но как то через задницу.
Callfunctionbyname.h
Код:
#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "CallFunctionByName.generated.h"


UCLASS()
class PS1_API UCallFunctionByName : public UBlueprintFunctionLibrary
{
   GENERATED_BODY()

public:
   UFUNCTION(BlueprintCallable, meta=(DisplayName = "Call Function by Name", DefaultToSelf = "Object"), Category="Custom Functions")
static bool CallFunctionByName(UObject* Object, FString FunctionName);

      
};


callfunctionbyname.cpp
Код:
#include "CallFunctionByName.h"

bool UCallFunctionByName::CallFunctionByName(UObject * Object, FString FunctionName)
{
    FName const FunctionFName(*FunctionName);
    if (Object)
    {
        {
        UFunction* const func = Object->FindFunction(FunctionFName);
        if(func && func->ParmsSize == 0)
            {
            FTimerDelegate Delegate;
            Delegate.BindUFunction(Object, FunctionFName);
            Delegate.Execute();
            return true; // Worked.
            }
    return false; // Didn't Work.

        }
    }
    return false; // Didn't Work.
}

Автор:  Maxonyx [ 13 сен 2017, 12:50 ]
Заголовок сообщения: 

Парни? Есть какие нибудь соображения?

Автор:  Maxonyx [ 18 сен 2017, 03:43 ]
Заголовок сообщения: 

Вот короче работает все норм без таймеров:

Код:
#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "CallFunctionByName.generated.h"


UCLASS()
class PS1_API UCallFunctionByName : public UBlueprintFunctionLibrary
{
   GENERATED_BODY()

public:
   UFUNCTION(BlueprintCallable, meta=(DisplayName = "Call Function by Name", DefaultToSelf = "Object"), Category="Custom C++")
static bool CallFunctionByName(UObject* Object, FString FunctionName);

      
};


Код:
#include "CallFunctionByName.h"

bool UCallFunctionByName::CallFunctionByName(UObject * Object, FString FunctionName)
{
   FName const FunctionFName(*FunctionName);
   if (Object)
   {
      {
      UFunction* const func = Object->FindFunction(FunctionFName);
      if(func && func->ParmsSize == 0)
      {
         Object->ProcessEvent(func, nullptr);
         return true; // Worked.
      }
      }
   }
   return false; // Didn't Work.
}

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/