Unity C# と Unreal C++ の比較
列挙型の定義
Unity C#
enum {列挙型名}
{
{列挙子名},
{列挙子名}
}
Unreal C++
#pragma once
#include "CoreMinimal.h"
#include "{列挙型名}.generated.h"
UENUM(BlueprintType)
enum class E{列挙型名}:uint8
{
{列挙子名},
{列挙子名}
};
配列の初期化
Unity C#
{型名}[] {配列名} = { {値}, {値} };
Unreal C++
TArray<{型名}> {配列名} = { {値}, {値} };
foreach 文
Unity C#
foreach({型名} {変数名} in {配列名})
{
}
Unreal C++
for ({型名} {変数名} : {配列名})
{
}
構造体の定義
Unity C#
struct {構造体名}
{
public {型名} {メンバ名};
public {型名} {メンバ名};
}
Unreal C++
#pragma once
#include "CoreMinimal.h"
#include "{構造体名}.generated.h"
USTRUCT(BlueprintType)
struct F{構造体名}
{
GENERATED_BODY()
{型名} {メンバ名};
{型名} {メンバ名};
};
構造体型の変数の初期化
Unity C#
{構造体名} {変数名} = new()
{
{メンバ名} = {値},
{メンバ名} = {値}
};
Unreal C++
{構造体名} {変数名} =
{
{値},
{値}
};
動的デリゲートの宣言(引数/戻り値なし)
Unity C#
{アクセス修飾子} delegate void {デリゲート名}();
Unreal C++
{アクセス修飾子}:
DECLARE_DYNAMIC_MULTICAST_DELEGATE({デリゲート名});
動的デリゲートへの関数の登録
Unity C#
{デリゲート} = {関数名};
Unreal C++
//登録する関数は宣言時に「UFUNCTION()」も記述する必要がある
{デリゲート}.AddDynamic(this, &{クラス名}::{関数名});
動的デリゲートに登録してある関数の呼び出し(引数なし)
Unity C#
{デリゲート}();
Unreal C++
{デリゲート}.Broadcast();
仮想関数の定義
Unity C#
// protected か public
{アクセス修飾子} virtual {戻り値の型名} {関数名}()
{
}
Unreal C++
{アクセス修飾子}:// protected か public
virtual {戻り値の型名} {関数名}();
仮想関数のオーバーライド
Unity C#
{アクセス修飾子} override {戻り値の型名} {関数名}()
{
}
Unreal C++
{アクセス修飾子}:
{戻り値の型名} {関数名}() override;
参照渡しを用いた関数の定義
Unity C#
{アクセス修飾子} {戻り値の型名} {関数名}(ref {型名} {引数名})
{
}
Unreal C++
{アクセス修飾子}:
{戻り値の型名} {関数名}({型名}& {引数名});
値を変更されないような参照渡しを用いた関数の宣言
Unity C#
該当なし
Unreal C++
{アクセス修飾子}:
{戻り値の型名} {関数名}(const {型名}& {引数名});
参照渡しを用いた関数の呼び出し
Unity C#
{関数名}(ref {変数名});
Unreal C++
//値渡しと変わらない
{関数名}({変数名});
ポインタ渡しを用いた関数の宣言
Unity C#
非推奨
Unreal C++
{アクセス修飾子}:
{戻り値の型名} {関数名}({型名}* {引数名});
ポインタ渡しを用いた関数の呼び出し
Unity C#
非推奨
Unreal C++
{関数名}(&{ポインタではない変数の変数名});
インターフェースの定義
Unity C#
public interface {インターフェース名}
{
public {戻り値の型名} {関数名}();
}
Unreal C++
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "{インターフェース名}.generated.h"
UINTERFACE(MinimalAPI)
class U{インターフェース名} : public UInterface
{
GENERATED_BODY()
};
class {全て大文字のプロジェクト名}_API I{インターフェース名}
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent)
virtual {戻り値の型名} {関数名}();
};
型推論の変数の初期化
Unity C#
var {変数名} = {値};
Unreal C++
auto {変数名} = {値};
辞書型の変数の初期化
Unity C#
Dictionary<{型名}, {型名}> {変数名} = new()
{
{ {値}, {値} },
{ {値}, {値} }
};
Unreal C++
TMap<{型名}, {型名}> {変数名} =
{
{ {値}, {値} },
{ {値}, {値} }
};
戻り値がジェネリック型の関数の定義
Unity C#
{アクセス修飾子} T {関数名}<T>() where T : {共通の親クラス名やインターフェース名など}
{
// T 型の値を返す処理
}
Unreal C++
{アクセス修飾子}:
template< class T >
T* {関数名}()
{
// T* 型の値を返す処理
}
定数管理クラスの定義
Unity C#
using UnityEngine;
[CreateAssetMenu(fileName = {アセット名}, menuName = "{メニュー名}")]
public class {クラス名}SO : ScriptableObject
{
}
Unreal C++
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "{クラス名}.generated.h"
UCLASS(BlueprintType)
class {プロジェクト名}_API U{クラス名} : public UPrimaryDataAsset
{
GENERATED_BODY()
};
名前空間の定義
Unity C#
namespace {名前空間名}
{
class {クラス名} // struct も可
{
{アクセス修飾子} {戻り値の型名} {関数名}()
{
}
}
}
Unreal C++
namespace {名前空間名}
{
{戻り値の型名} {関数名}()
{
}
}
その他
参考教材
参考記事
- 【UE4 C++】デリゲートの使い方まとめ
- Unity(C#)でのデリゲート/イベントのつかいかた
- 動的デリゲート
- C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう
- C#でポインタは使えるの?unsafeの使い方と基礎知識まとめ
- 宣言 (declaration) と定義 (definition) の違い
- 【C#超入門】ジェネリックを使って関数やクラスを共通化する方法
- C++ジェネリックプログラミング入門