0304実習


Property
C#では、Propertyでget setを簡単に設定して使用できます.
public int Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value;
            }
        }
        
宣言
 student.Age = 13;
            student.Name = "로버트 할리";
            student.Name = "김철수";

            Console.WriteLine("저의 이름은 " + student.Name + "이고, 나이는 " + student.Age + "살 입니다.");
実行
ソース:https://blog.hexabrain.net/153
readonlyとconstの違い
const
コンパイルタイプの定数です.(コンパイル時にcont変数の値を取得します.)
組み込みデータ型(整数、実数、Enum、String)のみ使用可能です.
変数宣言と同時に値を割り当てる必要があります.
メモリ割り当て位置はスタックメモリです.ただし、静的宣言を行うと、Heap Memoryに保存できます.
readonly
運転時定数(exeまたはdllを使用して変数の値を取得します.)
作成と同時に初期化することなく、すべてのデータ型に使用できます.
ただし,ジェネレータ段階では,1回の割当てでしか初期化できない.
メモリの割り当て先はHeap Memoryです.
ソース:https://holjjack.tistory.com/95
region
#region#endregionを使用すると、コードを簡単に作成できます.
ショートカットをすべてオン/オフ:CTRL+M+L
長い部分をDefalt,Properties,Constructor,methodなどの意味で地域化する.
Serializable
Jsonを使用するにはシリアル化が必要なので、クラスシリアル化を行います.
publicとして宣言されたメンバーはシーケンス化されており、private変数はserializableとして宣言されたときにUnity Inspectorで変更され、GameObject Prefabをtxtとして開いたときに確認および変更できます.
シーケンス化は、オブジェクトフィールドに格納されている値をメモリに格納できるように変更します.
シリアル化するクラスの上に[シリアル化可能]と宣言します.
メモリに格納できるフォーマットは、Stream、BinaryFomatterクラスを使用して格納できます.
シリアル化したくないフィールドがある場合は[NonSerialized]と宣言します.
[Serializable]
class MyClass
{
    public int MyFiled1;
    public int MyFiled2;

    [NonSerialized]
    public int myField3;  // 이 필드만 직렬화가 안됨

    public int myField4;
}
ソース:https://qzqz.tistory.com/254
Interface
インタフェースで表現される理由は多形性である.クラスは1つしか継承できませんが、インタフェースは複数を継承できます.したがって、他のクラスでも使用できると思う場合は、インタフェースを作成します.
パラメータ作成インタフェースにより、継承されたすべてのクラスのインスタンスを取得できます.
UML Dependancy
UML作成時にメソッドからのみクラスをパラメータとして取得する場合、クラスは関連付けではなく依存依存依存性として表示されます.
この場合、クラスは関連付けられていませんが、関数の実行時にのみ関連付けられます.
抽象と仮想
メソッド宣言でabstractまたはvirtualを使用すると、すべてのサブクラスがメソッドを上書きできることを示します.
両者の違いはabstractは絶対にbodyを定義できないがvirtualはbodyを定義できることである.
Coroutine
UnityがCoルーチンを使用するのは,動的環境で非同期アクティビティを作成するためである.Updateでwhile文を切り替えると、実行が続行され、リソースが食べられますが、Coルーチンを使用すると、一定時間(例では1秒)ごとに実行されるか、フレームが停止して実行されます.
Unityダイナミックゲーム
Unityでダイナミックゲームを作成する場合、Unity画面でGameObjectを生成してコードを貼り付ける方式で作成するのは難しい.したがって、Script環境でGameObjectを作成し、Unityのプレフィックスを使用してGameObjectを作成および制御します.
関連コード
public class Tester : MonoBehaviour
{
    [SerializeField]
    int a = 5;
    public int b = 5;

    [SerializeField]
    GameObject prefab;

    private void Awake()
    {
        StartCoroutine("SimulationCoroutine");
    }

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log(a);

        var obj = Instantiate(prefab);
        obj.transform.SetParent(transform);
    }
    int frameCount = 0;
    // Update is called once per frame
    void Update()
    {
        Debug.Log($"FrameCount : {frameCount++}");
    }


    public IEnumerator SimulationCoroutine()
    {
        int turn = 0;
        while(true)
        {
            Debug.LogError($"turn : {turn++}");
            yield return new WaitForSeconds(1.0f);
        }
    }
}
疑問点
シリアル化はいつ使用しますか?
boxing UnBoxing?