初投稿です。Unity初心者の私がstaticが何者なのか分からなくなったので忘れないように記しておきます。
間違っていたら指摘していただけると嬉しいです
Staticとは何ぞ?
Staticは静的と訳されています
クラスのメンバーを定義する時に下記のようにstaticを付けることでstatic 型名 フィールド名
(例: static float Sin)
その変数は静的変数・静的メソッドになります
静的って何だよ
静的とは、静的メンバー(クラスやオブジェクトの持つ変数や関数)の宣言に使用します。
静的メンバーは、特定のオブジェクトではなく、型自体に属するメンバーです。
少なくとも
・静的である=>動かなく値は固定=>(constのような)定数
という事ではないです。自分は脳内でこのように勝手に変換してしまってハマっていました。
じゃあ何をやっているの?
staticはそのクラスが持つ変数やメソッドで有ることを示します。
動かせないお弁当箱を置いておくようなもので中身を見たり中身を入れ替えたり出来ます。
Unityではいちいちインスタンスを取得してからアクセスしていましたが、
インスタンスを取得せずアクセスできるようになります。
静的クラス
下記のようにstaticを付けることでstaticとして宣言され、staticメソッドのみが含まれますpublic static class Math
publicstaticclassMath//静的クラス{publicstaticreadonlyfloatPI=3.14f;publicstaticfloatCircumferenceLength(floatdiameter){returndiameter*PI;//直径から円周を返す雑メソッド}//static(静的クラスでは)が無いのでエラー//静的クラスでインスタンスのメンバーを宣言することはできません。と言われるpublic/*static*/intAbs(floatval){return(int)Mathf.Abs(val);//絶対値にしてintで返すメソッド、なおエラーを吐く}}
静的フィールドとメソッド
この例では、新しい従業員の名前と ID を読み取り、従業員数のカウンターを 1 つインクリメントして、新しい従業員の情報と従業員数を表示します。
usingUnityEngine;publicclassNAKAMA_Manager:MonoBehaviour{publicvoidStart(){varemployee1=newEmployee("一般人",5);Employee.AddEmployee();Debug.Log($"NAME: {employee1.name}");Debug.Log($"HP: {employee1.hp}");Debug.Log($"Employee数: {Employee.employeeCounter}");//Employeeクラスにアクセスvaremployee2=newEmployee("パチュリー",30000);Employee.AddEmployee();Debug.Log($"NAME: {employee2.name}");Debug.Log($"HP: {employee2.hp}");Debug.Log($"Employee数: {Employee.employeeCounter}");}}publicclassEmployee//従業員{publicstringname;//インスタンスされる度(newされる度)に生成される変数)publicinthp;//インスタンスされる度(newされる度)に生成される変数)publicEmployee(stringname,inthp){this.name=name;this.hp=hp;}publicstaticintemployeeCounter;//クラスが持つ変数publicstaticintAddEmployee(){employeeCounter++;returnemployeeCounter;}}
まとめ
・クラスのメンバーを定義する時にstaticを付けると静的宣言、静的メソッドになる
・静的メンバーは、特定のオブジェクトではなく、型自体に属する
・Unityではインスタンスを取得せずともアクセスできるようになる
参考にしたサイト
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/static