1変数で複数の値を持ったものを作る(ちょー基礎編)

Unityを使っている時、1対多のデータを扱いたいときがあったのでやり方をメモ。今回は構造体を用いてやります。

構造体ってなんぞ?

解釈は人それぞれですが構造体って簡単に言えば変数を1つにまとめたものです。
普通の配列とかと違っていろんな型とか突っ込むことができます。

使い方

[System.Serializable] //これを書くとinspectorに表示される。
public struct CharaStatus
{
public string Name;
public int HP;
public float MP;
public Sprite CharaImage;
}
void Start(){

}

例えばキャラクターのステータスを管理したいなら上記のように書くと管理することができます。
これをクラスで宣言すれば(書けば)OK

 public CharaStatus Player;

実行結果
struct

ちなみにこれをPlayerだけでなく複数のキャラクタ―のステータスを管理したいってときは

 public CharaStatus[] Chara; //CharaStatus型の配列「 Chara」を宣言

ってすればいいし、

ArrayChara

途中でキャラクターが減ったり増えたりするかもってときはListにすればOK

using System.Collections.Generic;  //Listを使うならこれを書いておくこと
public class hoge : MonoBehaviour {
    public List<CharaStatus> Chara; //CharaStatus型のリスト「Chara」を宣言

    [System.Serializable] //これを書くとinspectorに表示される。
    public struct CharaStatus
    {
        public string Name;
        public int HP;
        public float MP;
        public Sprite CharaImage;
    }
--------------------省略-----------------------
}

ちなみに上から下にかけてどんどん処理が重くなっているので、多用は禁物。
配列やListは大体Microsoftの公式リファレンスがつかえるので使わない手はないよね

アクセス方法

StartやUpdateなどの関数内で宣言した構造体+.+変数名でその変数にアクセスできます。

StructArrow

配列も同様に要素数を書いてあげれば同様にアクセスすることができます。

まとめ

今回例としてキャラクターのステータスを管理する構造体を書きましたが、構造体を使ってキャラクターのステータスを管理するというのは必ずしも正義ではないので気を付けてください。
UnityはdictionaryがInspectorで表示できないし、1対多を管理したいときなどはこの方法を使うといいかもしれません。

参考サイト

Unity Answers Dictionary in inspector

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中