ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】〈UnrealC++入門〉➀ BPで作った関数をC++ノード化してみよう ~BPでの実装から基本的なUFUNCTION~

目次

 

はじめに

今回はBPで組んだ関数をC++化する内容です。

BPがある程度理解できたがC++はちょっと、、という人に向けて書いています。

ゲームでよく使うであろう”周囲のアクタから一番近いものを取得するノード”を作ってみたいと思います。

 

UEC++環境構築については、いろんな人が解説しているので説明しません。

また、コードが書けてビルドができる状態であればコードエディタは問いません。

docs.unrealengine.com

 

投稿者の環境は以下の通りです

・Windows11

・Rider2022.3.1

・UE5.1.1

解説

C++化するBPの実装

まずはこれからC++で作る関数をBPの実装で作っていきましょう。

コードを書くときにBPと見比べながら作っていくと理解が早まります。

”周囲のアクタから一番近いものを取得する”のような機能はどこからでも使いたいので、ブループリント関数ライブラリで作ります。

 

名前をFindNearestActorBPにして実装を書いていきます。

ローカル変数にDistanceFromNearestActorNearestActorを作ります。

 

スフィアトレースを使ってRadius内のアクタ群を取得します。

 

距離を測ってDistanceFromNearestActorより小さい≒距離が近いかを判定します。

 

近い場合は変数を更新します。

 

適当なアクタで呼んでみて取得できていたら完成です。

 

C++化していこう

なぜC++化するのかというと、C++で書けばもっと良くなるのに!!というポイントがいっぱいあるからです。

例えば

・BPではForEachLoopが遅い。

・Actors to Ignoreに線つなげないといけないのがめんどくさい。

・結果を実行ピンで分岐させたい

C++からでも使いたい

などなど、、

ここからはC++でノードの基本的な作り方とうまみを伝えていければと思います。

1. .hと.cppを生成する

C++のはじめの一歩です。BPを右クリックして作るのと同じようにC++の一歩はここからはじまります。コードエディタからも作れますが、あくまで入門向けなのでアンリアル上から作ってみましょう。

ツールバーからツール→新規C++クラスを選択します。

 

今回作りたいのはブループリントファンクションライブラリを継承したいので選びます。名前はSampleBlueprintFunctionLibraryにしました。

 

できると2つのコードが生成されます。

ざっくりとした説明ですが、

.hとついているコードに関数の名前や引数、戻り値、表示のルールを決めます。

.cppには.hで書いた関数の中身を書いていきます。

 

SampleBlueprintFunctionLibrary.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

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

/**
*
*/
UCLASS()
class USampleBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()

};

 

SampleBlueprintFunctionLibrary.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "SampleBlueprintFunctionLibrary.h"

 

2. .hに関数をつくってみる

ブループリントで+を押して関数を作ったようにコードでも関数を作っていこうと思います。

 

以下のように書きましょう。

UEC++の関数にはUFUNCTIONというマクロを付ける必要があります。

かっこの中にはブループリントからどのようにアクセスできるかの(BlueprintCallable,カテゴリを設定します。

どこからでもアクセスできるというstaticと取得できたかの可否が知りたいのでbool型を返すようにしています。

UCLASS()
class USampleBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()

public:

UFUNCTION(BlueprintCallable, Category="CustomFunction")
static bool FindNearestActor();

 

詳しく知りたい場合はこちらから

docs.unrealengine.com

3. .cppに基本的な実装を書く

.cppはイベントグラフの中身という認識がとっつきやすいかと思います。

bool を返してほしいのでreturn trueします。

#include "SampleBlueprintFunctionLibrary.h"

bool USampleBlueprintFunctionLibrary::FindNearestActor()
{
return true;
}

 

これで常にTureを返すノードができました。プロジェクトをコンパイルして確認してみましょう。

 

検索すると、、ありました!

 

このようにBool型を戻り値に持つノードが作れました。

 

次回はこのノードに機能をどんどんつけていきます。

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる