
UnityLearn Scripting Tutorials -Statics-日本語
UnityLearnのチュートリアルを日本語に翻訳したものです。
素人の翻訳なので間違いがあると思います。
間違いを見つけた人はコメントでおしえていただけると嬉しいです。
日本語訳
変数やメソッドなどの静的メンバはクラスのすべてのインスタンスに渡ったって共有される要素です
さらに静的メンバはインスタンスを仲介せずダイレクトにクラスのオブジェクトにアクセスできます。
通常メンバ変数はそれぞれのクラスのオブジェクトに帰属します
どのクラスのオブジェクトも同じ変数を持っていますが、それぞれに独自の値を持ちます
しかし、static変数を使うとそれぞれのクラスのオブジェクトは同じ値と共に同じ変数を持ちます
したがって、staticな変数の値を一箇所でを変更すると他すべての場所で値が変更されます。
インスタンス化されたenemyクラスのオブジェクトの数を知りたいとしましょう。
これを行う簡単な方法はenemyCount というstaticメンバ変数を使うことです
staticというキーワードをメンバの宣言に入れることで、それを静的(static)にすることができ、インスタンスではなく、クラス自体に帰属する値にできます
そうすれば、enemyオブジェクトが作られるたびに、変数をインクリメントするだけです。
すべてのオブジェクトは同じ変数を増加させるので、その変数はenemyがいくつ作られたかの情報を持ちます
このstatic変数にアクセスすることはかなり簡単な作業です
ここにGameクラスがあり、いくつかのenemy クラスをインスタンス化しました
何個のenemyクラスが作られたかを知るためにはstatic変数である、enemyCount変数に
クラス名+.(ドット演算子)
を用いてアクセスするだけです。
今回の場合は、enemyCountの値は3です
このプロセスはGameObjectコンポーネント意識したスクリプトでも働きます
例えば、1つのシーン内で幾つのPlayer が作られたか知りたかったら、Player script component を作ります。
そのスクリプト内では、static な playerCount変数を宣言し、Start() のメソッドでインクリメントします
これで、このスクリプトがアタッチされGamaObjectが生成されると、playerCountの合計値が増加します。
ほかのScript component ではこのstaticな変数(playerCount)に スクリプトの名前+ドット演算子 でアクセスできます。
このようにstatic変数、staticメソッドはクラスの固有のものであり、特定のオブジェクトのものではありません
Utilities(ユーティリティ) クラスを使ったこのとても簡単な例は、クラス内部にあるstaticなAdd()メソッドを呼び、2つの値の和を得ます
Add()メソッドが静的メソッドであることは、前にあるstaticキーワードから分かります
そして、ほかのクラスからAdd()メソッド
クラス名+ドット演算子( . )
で呼ぶことができます
staticメンバを使うときは、このオブジェクトをインスタンス化する必要はありません
あなたはすでに、気づかずstaticメンバを使っていると思います。
unityで“Input”を使っているときを考えてみてください。
Input.GetAxis(), Input.GetKey(), and Input.GetButton()
このようなメソッドはすべてstaticメソッドです。
これらがstaticであることは、Inputクラスを使うときインスタンス化する必要がなかったことからわかります。
実際、unityには様々なユーティリティと機能を提供するために、多くののstaticメソッドが用意されています。
覚えておくべき重要なことは、非staticメンバはstaticクラス内に含むことが出来ない、ということです。
staticメンバはクラスに帰属し、非staticメンバはインスタンスに帰属することを覚えて置いてください。
また、クラス全体をstaticにすることもできます。
<終>
———————————————-
Summary
・static修飾子で定義されたメンバは静的メンバとります。
・静的メンバはインスタンスを仲介せずダイレクトにクラスのオブジェクトにアクセスできます。
・静的メンバを使うと、インスタンス化されたコンポーネントの数の集計、データの共有ができるようになります。
・静的メソッドは、クラスのインスタンス化を省略し、コードをシンプルにします。
———————————————————————
そのほかの日本語訳の記事はこちらから。