関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2020.05.13UE4UE/ C++
執筆バージョン: Unreal Engine 4.24 |
みなさん、MathExpression 使ってますか? 公式ドキュメントにもあるように、MathExpressionには以下のような特徴があります:
今回は、この中でも、「一部の関数を使える。」にフォーカスしてみようと思います。 改めて公式ドキュメントを読んでみると 「コード化された関数ライブラリにあるブループリント純粋関数は、すべて利用できます。」 と書かれています。これはどういうことでしょうか? エンジンコードを探してみると、MathExpression で使用できる関数かどうかは、以下のような条件があるようです:
と、いうことは、UBlueprintFunctionLibrary を継承した C++ クラスで、static で BlueprintPure な関数を作成して ブループリントで使えるようにすれば、MathExpression でも自作関数を扱えそうです。 一方で、UE4標準の関数でも、DisplayName に “()” を含む関数は、MathExpression では使えないようです… (どなたかエスケープ方法などご存じでしたら教えてください!) 例えば、”Lerp” 関数は使えますが、 “Lerp (Vector)” 関数はエラーになります。 KismetMathLibrary.h 上での定義名である、VLerp でもダメなようです。
※関数名の大文字小文字は区別されないようです。 そこで、オリジナルのラッパー関数を作成して、VLerp を MathExpression で扱えるようにしてみましょう。 UBlueprintFunctionLibrary を継承した MyFunctionLibrary クラスを作成し、VLerp という static 関数を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#pragma once #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "Kismet/KismetMathLibrary.h" #include "MyFunctionLibrary.generated.h" UCLASS() class MATHEXPRESSION_API UMyFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintPure, BlueprintCallable, Category = "MyMath") static FVector VLerp(FVector A, FVector B, float Alpha) { return UKismetMathLibrary::VLerp(A, B, Alpha); } }; |
これをビルドすると、MathExpression で VLerp という関数が使えるようになります。
このように、C++ 限定ではありますが、自作の static な BlueprintPure 関数を作ることで、MathExpression で使うことができるようになります。 プロジェクトでよく使う計算などは、このようにして MathExpression でも扱えるようにしておくと便利そうですね。 ぜひご活用ください!