ほのぼのといろいろなことをかいていくブログ

プログラミングの忘備録や趣味についてなどほのぼの書いていきます!

Unityでpublicなメンバ変数をInspectorで編集できないようにする方法

当分はUnity関係の内容になりそうです・・・。
ということでUnityの内容!
基本的なことからコツコツといきます!

publicなメンバ変数をInspectorで編集できないようにしたい

設計的にはpublic変数だがInspectorで編集できないようにする方法がありました!
調べたらふつーに出てきました!!

UnityのAttribute(属性)の1つである「HideInInspector」というのがありました。

Test.cs

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
    [HideInInspector]
    public int publicVariable_A = 0;

    public int publicVariable_B = 1;

    void Start ()
    {
    }
    void Update ()
    {
    }
}

f:id:isshi-777:20160817234920p:plain

おお~!
「publicVariable_A 」はInspectorに表示されていない!

ふむふむ!!!

UnityのInspectorでアタッチしたC#ファイルの変数を編集する方法

ブログを開設して最初の記事です!
今自分の中で熱いUnityについての個人的な忘備録から始めようと思います!

少し触ったことはあるのですがとりあえず基礎から見直して少しずつ進歩できたらなと・・・

UnityのInspectorでのアタッチしたC#スクリプトの基本的な表示

表示される項目の確認

とりあえず下記のC#スクリプトを空のGameObjectにアタッチしてみる。
Test.cs

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
    private int privateVariable = 0;

    public int publicVariable = 0;

    void Start ()
    {
    }
    void Update ()
    {
    }
}

f:id:isshi-777:20160815210148p:plain

public変数のみ表示された!


UnityのAttribute(属性)の1つである「SerializeField」

設計ではPrivate変数なんだけどInspectorでお手軽に編集したい時には
UnityのAttribute(属性)の1つである「SerializeField」を使うとInspectorにPrivate変数が表示されて編集できる。
Test.cs

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
    [SerializeField]
    private int privateVariable = 0;

    public int publicVariable = 0;

    void Start ()
    {
    }
    void Update ()
    {
    }
}

f:id:isshi-777:20160815211719p:plain
Private変数も表示された!

Protected変数も表示できる

抽象クラスの作成
ATest.cs

using UnityEngine;
using System.Collections;

public abstract class ATest : MonoBehaviour
{
    [SerializeField]
    protected int protectedVariable = 0;

    void Start ()
    {
    }
    void Update ()
    {
    }
}


ATest.csを継承したクラス。
Test01.cs

using UnityEngine;
using System.Collections;

public class Test01 : ATest
{
    [SerializeField]
    private int privateVariable = 1;

    void Start ()
    {
    }
    void Update ()
    {
    }
}

f:id:isshi-777:20160815213513p:plain


Test02.cs

using UnityEngine;
using System.Collections;

public class Test02 : ATest
{
    [SerializeField]
    private int privateVariable = 2;

    void Start()
    {
    }
    void Update()
    {
    }
}

f:id:isshi-777:20160815213531p:plain


両方表示された!!!

「SerializeField」ってあるけど「Serialize」ってなに?

検索してみた・・・
シリアライズとは|serialize|シリアライゼーション|serialization - 意味/定義 : IT用語辞典

●Serialize[シリアライズ]
→ソフトウェア内部で扱っているデータを丸ごと、ファイルで保存したりネットワークで送受信することができるように変換すること。

●Deserialize[デシリアライズ]
→ファイルに保存されているシリアライズされたデータや、ネットワークを通じて送られてきたシリアライズされたデータを、
 ソフトウェアで扱うことのできる元のデータ形式に復元すること


ふむふむ・・・ふむふむ・・・
(セーブデータ的な感じ?・・・)


とりあえず今回はここまでです。
ほのぼのこんな感じで続けられたらと思います。


誤解して書いている事柄などがあればご指摘ください!