【Unity/UE】Unity C# と Unreal C++ の比較(随時更新)

Unity

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 {名前空間名}
{
    {戻り値の型名} {関数名}()
    {

    }
}

その他

参考教材

参考記事

お問い合わせ

    タイトルとURLをコピーしました