[Unity] structをちょっと分かるようになりたい #1


はじめに


普段Unityのゲーム開発でメモリ管理を意識している人からしたら、ビックリするくらい当たり前のような内容しか書いていません。

この記事を読む方はナイフを研がないで、やさしい気持ちで呼んでください。研いでしまう方はブラウザバックを推奨します。

参考にした記事


そもそもメモリ管理を意識したことがない話


structを調べると、ヒープやらスタック、メモリがうんぬんかんぬんという単語がでてきます。

記事を書いてるハムスターは、2年くらいゲーム制作をしてメモリ管理なんて一度も意識したことがないです。ですが、クラス内でメモリ管理の話が
一時期話題になり単語とか一部の内容は知ってるとかはあります。

メモリ管理を考えなくても動作する今の時代が本当に凄いんだろうなぁ…

structってなに…?


クラスと違ってデータをまとめた物をstructと呼び、
structは日本語にすると構造体という呼び方になります。
調べたところ、クラスとの違いは継承できないけどinterfaceは実装出来る。

一部の内容はC#10.0以降だと自分で初期化できたり、空のコンストラクタを記述できるようになるらしいです。

  • クラスとの違い

    • 継承はできないけどinterfaceは実装できる

    • フィールド変数の初期ができない verによる

    • コンストラクタにフィールド変数の初期化が必要 verによる

分かりやすく表が出ている記事を見つけたので引用?です。

クラスと違って、できないことが全体的に多いです。継承自体はできない見たいですが、interfaceの実装はできる見たいですね。

試しにstructを使ってみる


スクリプトを適当に作ってオブジェクトにアタッチします。
ソースコードは以下の通りです!

using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        TestStruct testStruct = new();

        // 数値を増やす
        Increment(testStruct);
        Debug.Log(testStruct.X);

        // 数値を引き数に代入
        Equal(testStruct, 5);
        Debug.Log(testStruct.X);
    }

    private void Increment(TestStruct testStruct)
    {
        testStruct.X++;
    }

    private void Equal(TestStruct testStruct, int num)
    {
        testStruct.X = num;
    }
}

public struct TestStruct
{
    public int X;
}

エディタを実行すると、数値が加算されず0が返ってきます…何で!

structをclassに変更すると、もちろん加算されます。

どうやら参照渡し、値渡し…?が関係しているらしくこの部分をちゃんと理解しないとまずそうです。

記事が大きくなりそうなので、一旦ここまで…
次回に続く

いいなと思ったら応援しよう!