読者です 読者をやめる 読者になる 読者になる

PaperSloth’s diary

Unity(C#)、UE4(Blueprint/C++)についての記事を書いたり日常のことをつぶやきます。

UE4で学ぶ初めてのプログラミングその1

こんちは!


今回はUE4を使ったプログラムのお話です。
UE4は触ったことがあるけど、プログラムがいまいち分からない人向けの情報と
そうでない人にもたまーーーに役に立つ情報が発信できればと思います。


主なツールとしてUE4を使用しますが、ちょくちょく脱線もする予定です。
たまに出る役に立ちそうな情報はTipsとして紹介しようと思います。

初心者だよーという人はBlueprint編だけサラッと眺めていただければと思います。


開発環境
Windows10
UE4.14.3
Visual Studio 2015

目次

Hello World (概要, C言語編)
Hello World (Blueprint編)
Hello World (Unreal C++編)



Hello World (概要, C言語編)

先ず、プログラムなどの新しい環境に触れる際や大抵のプログラミング言語の入門書では
"Hello World"と出力してみることを例題とすることが多いのです。
「世界一有名なプログラム」といっても過言ではないかもしれません。

有名なプログラミング言語Cではこのように書きます。

// HelloWorld.c

#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello World!\n");
    return 0;
}

実行結果
f:id:PaperSloth:20170117214142p:plain



さて、本題のUE4ですが
UE4.14.3時点ではプログラミング環境が主に2種類あります。
・Blueprint
Unreal C++

それぞれにメリット・デメリットがありますが、
ここでは簡単にビジュアルスクリプト、テキストで記述するプログラミング言語とだけ認識していただければと思います。

Blueprint
- ノードを繋ぐことでプログラミングできるビジュアルスクリプト
- Level Blueprint, Class Blueprint, Animation Blueprintなどがある

Unreal C++
- C++11, 14をベースとしたテキストベースのプログラミング言語





Hello World (Blueprint編)

先ずは新しくBlueprintを作成します。

親クラスにActorを選択しています。
クラスとは何かというのはまた別の機会に説明するとして、
ようは新規にBlueprintを作成してActorを選択したという状態です。
f:id:PaperSloth:20170117215841p:plain

※Tips

親クラスはクラスBPを開くと右上に"Parent Class"として表示されます。
f:id:PaperSloth:20170117220540p:plain


さて、新規に作成されたBPのEvent Graph上には図のように3つの赤いノードがあると思います。
これらの赤いノードはEventと呼ばれるもので、
「何かが起きた」時に呼び出されるものです。

Blueprintでのプログラミングは
Eventが発生 → 処理を行う
というのが基本となっています。
f:id:PaperSloth:20170117220800p:plain
・BeginPlay
- このActor(BP)が生成された時に一度だけ実行されます。
Level上に配置している場合はそのLevelが読み込まれた最初の一回だけ呼び出されます。

・Tick
- このActor(BP)が存在する間、毎ループ呼び出されます。

・ActorBeginOverlap
- このActor(BP)が他のActorと重なった時に呼び出されます。
今回はあたり判定を持たないので、割愛。


Hello Worldを作成した結果は以下のようになります。
f:id:PaperSloth:20170117221447p:plain


作成したBPをレベル上に配置して確認してみましょう。
以下のような結果(左上にHello World!と出る)になるはずです。
f:id:PaperSloth:20170117221902p:plain


同様にTickに接続してみると
f:id:PaperSloth:20170117222224p:plain


Hello World!が出力され続けて、以下のようになると思います。
f:id:PaperSloth:20170117222244p:plain

※Tips

PrintStringにはTipsがいっぱい。
1. Duration = 0とすることでログが連続して大量に画面上に出なくなる。
f:id:PaperSloth:20170117222714p:plain

2. MetaでDevelopmentOnlyとなっており、関数定義側でも#if プリプロセッサ命令で弾かれている。
よって、ShippingBuildでは呼び出されない。

3. Networkに対応したゲーム制作の場合Prefixに
ClientではClient :
ServerではServer :
と追記される




Hello World (Unreal C++編)

Unreal C++を触るということは、ある程度UE4を理解されていると思いますので、ざっくりでいきます。

BP同様にAActorを継承して作成します。

先ほどの延長戦上の話になりますが、PrintStringの定義箇所
Engine/Source/Runtime/Engine/Classes/Kismet/KismetSystemLibrary.h
Engine/Source/Runtime/Engine/Private/KismetSystemLibrary.cpp

UFUNCTIONのMeta情報など、学べることが何気に多い関数です。
一度見てみることをオススメします。

コード

void AHelloWorldActor::BeginPlay()
{
    Super::BeginPlay();

    GEngine->AddOnScreenDebugMessage( (uint64)-1, 2.f, FColor::Cyan, TEXT( "Hello World!" ) );
}

Unreal C++側ではよくUE_LOGの方が使われると思いますが、
今回はPrintString同様に画面に描画するためにAddOnScreenDebugMessageを使用しました。
また、PrintString内でもAddOnScreenDebugMessageを使用されています。





今回はHello Worldを出すという簡単な内容にまとめてみました。
次回はもうちょっとちゃんとした説明ができるようにがんばります。


以上です!


ではまた!