UnityユーザーのためのUEブループリント入門
コードとビジュアル両方のスクリプトを比較してゲームエンジンを学びます

5. ゲームプログラミング

UnityはVisual StudioやVisual Studio Code(VSCode)、またはテキストを使ってソースコードを書きますが、Unreal EngineのブループリントはUnreal Engine標準のUnreal Editor上でノードを繋げてプログラミングをします。
  • プログラムの作成
  • プログラムの初期状態とそれぞれの意味
  • プログラムを動かしてみる
  • アクタ(GameObject)を動かしてみる

5. Unityゲームプログラミング

5.1 プログラムの作成

プログラムの作成は、Projectウィンドウで
Create > Script
を選択します。こちらから作成するとUnityで扱えるようにMonoBehaviourを継承したひな形のスクリプトが作成されます。
スクリプトとはプログラムが書かれているファイルです。スクリプトの名前は日本語全角文字を使わないようにしてください。
Unityではインストール時にVisual Studioをインストールするかを聞かれますので、Visual Studioを使ってプログラムを作成することはできますが、著者はVisual Studioを使わずVScodeを使ってプログラムを書いています。Visual Studioを使うと、起動時は重いのですが、入力候補やデバッグ作業の補助ツールが充実しているので、これは好みでよいと思います。VScodeでもUnity用やC#用の入力候補のプラグインを追加することで補助機能が使えます。

5.2 プログラムの初期状態とそれぞれの意味

プログラミング言語はC#になります。試しにtestという名前のスクリプトを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour{
    void Start(){

    }
    void Update(){

    }
}
using
最初からいろいろな機能が用意された状態でプログラミングできるようになります。
C#の機能を使用することができます。
using System.Collections;
using System.Collections.Generic;
Unityの機能を使用する
using UnityEngine;
class
C#はオブジェクト指向型のプログラミング言語です。クラスは設計図です。
testという名前の設計図が作成されています。
継承とは、元々ある設計図を元にするという意味です。MonoBehaviourはUnityが作ってくれた設計図です。
Unityで使用するための枠組みがMonoBehaviourとして用意されているということを意味しています。
public
「アクセス修飾子」で説明します。
publicは、他のファイルからアクセス可能にすることを示します。
public class test : MonoBehaviour
範囲
{}が範囲を表します。
public class test : MonoBehaviour{
 ....
}
コメント
コメントは作成者が追加する一言メモです。コメントに書かれた内容はUnityは無視します。
/* 

~この間は全てコメントになる~ 

*/ 
// これは一行コメント
メソッド
メソッドは1つ1つの機能で、StartとUpdateはメソッドです。
メソッドは自分でも作成することができます。
また、StartとUpdateはMonoBehaviourによってUnity側が呼ぶ特別な意味を持つメソッドです。
  • Start : この設計図がゲーム内で実体化+有効の両方を満たす時Unity側から1回だけ呼ばれる
  • Update : 有効な時にゲーム中毎フレームUnity側から呼ばれる

デバッグ

Debug.Log(""); //ログを表示する命令
Console > ログを表示するウィンドウ

5.3 プログラムを動かしてみる

"ハローワールド"という文字列を表示させるプログラムを書いてみます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour{
    void Start(){
        Debug.Log("ハローワールド");
    }
    void Update(){

    }
}

5.4 GameObjectを動かしてみる

CubeのTransformのPositionを毎フレームXに1を足して動かすプログラムを書きます。
Vector3.rightは(1,0,0)のことを指します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour{
    void Start(){
    }
    void Update(){
        transform.position += Vector3.right;
    }
}

5. UEブループリント ゲームプログラミング

5.1 プログラムの作成

UE BPによるプログラムの作成はブループリントエディタで完結します。UEのC++を使う場合は、Unityと同じようにVSCodeなどエディタを使ってプログラムを書くことになります。

5.2 プログラムの初期状態とそれぞれの意味

Actorを作成して、そのブループリントエディタを開くと下図のようなノードが表示されます。
using
Unityでいうところのusingはありません。
class
ブループリントクラスは、意味的には"設計図設計図"になります。
UE BPの場合、クラスの作成についてはActor、Pawn、CharactorなどのあらかじめEpicが用意した親クラスを選択するか、自分で作成したクラスを親クラスとして継承するクラスを選択します。コンポーネントの作成についてはレベル上に配置しない場合はActorComponent、レベル上に配置する場合はSceneComponentを選択します。
public
「14 アクセス指定子」で説明します。
範囲
UE BPでは「メソッド内で定義した変数の有効範囲」という、イベントグラフ内のあるノード群の範囲しか使えない変数という設定ができません。変数はブループリントで定義するため、変数の範囲を気にする必要はありません。後に説明するUnity側での「9 関数、メソッド」にでてくる変数のスコープという考え方はありません。
🔗 参考リンク
COLORY GAMES
[UE5] Construction Scriptを意図的に実行する方法
コメント
ショートカットCキーでコメントが作成できます。
関数、イベント(メソッド)
UEには、関数、イベント、マクロ、インターフェースがあります。関数、イベント、マクロ、インターフェースそれぞれの特徴については、「[UEのみ]関数、イベント、マクロ、インターフェースとの違い」で説明します。
  • BeginPlayイベントノード :
  • Tickイベントノード :

5.3 プログラムを動かしてみる

"ハローワールド"という文字列を表示させるブループリントを書いてみます。

5.4 Actorを動かしてみる

CubeのTransformのPositionを毎フレームYに1を足して動かすプログラムを書きます。Xに足すとカメラから奥のほうに移動してしまうのでYに足します。
アクタからCubeをつくります。まずCubeActorという名前のアクタを作成します。
CubeActorをダブルクリックします。
AddComponentボタンを押して、Cube Static Mesh Componentを追加します。
Event Graphタブをクリックします。
CubeActorのブループリントを作成します。CubeActorを示すselfノードからGetActorLocationノードでLocation情報を取得して、進行方向を示したMakeVectorノードと足し合わせて、selfつまりCubeActorの位置情報の更新をSetActorLocationノードのNew Locationピンに足し合わせた結果を入れます。
動かすCubeActorをレベル上に置きます。ActorCubeをレベル上に置くにはLocationのZの値を70にするとFloor上に置くことができます。
レベル上にあるPlayerStartをActorCubeのLocation Xの値よりマイナスの値に、ActorCubeより手前になるように移動しておくことで、playを実行するときにActorCubeがカメラに映るようになります。
playを実行すると、CubeがYに1ずつ移動することが確認できます。