LoginSignup
0
0

More than 3 years have passed since last update.

【Unity】Getcomponentがめんどくさいのでpublic staticで爆速でコードを書く。

Last updated at Posted at 2020-11-21

public staticに至った経緯

Unityでゲームを作っているときにほぼ必須のGetcomponent。
自分はスクリプトの変数違うスクリプトから取得したいときによく使うのですが、毎回GetComponent<>()とかを使って、<>←これの中にはクラス名をいれて...などとしていては、とても面倒ですし他にやり方がないものか、と思っていたら、シングルトン1であるならば、public staticで直接他のスクリプトから変数を取得できるやり方があるらしいです。

書いてみた

SingletonScript.C#
public class Player : MonoBehaviour
{
  public static Player player;  //public staticして、クラスの名前を書いて、適当な変数(ここではplayerとする)を宣言
  public int playerHp = 100;
  void Start(){
    player = this;
  }
}

このスクリプトのplayerHpを他のスクリプト(ここでは敵スクリプト)から取得したい場合、

プレイヤーの体力変数が欲しい敵.C#
public class Enemy : MonoBehaviour
{
  void Start(){
    Player.player.playerHp--;//クラス名.変数名.変数で、Playerクラスの変数を取得できる。Playerで宣言したこと(int playerHp等)がplayerに入っているイメージ
  }
}

スクリプトの内容は、Startが呼び出されたときにplayerHpから1引くという処理になります。
この場合、Playerの中身が入っているplayerの中のplayerHpを取得したいので . ←をつけています。
ただ、class Playerのスクリプトにplayer = this;という記述があります。
これは何なのかというと、playerという変数をインスタンス化しているようです。もともとPlayerというクラスで宣言したことは設計図のような状態なので、他のスクリプトがその設計図を取得したい場合はインスタンス化をする必要があり、thisという自分自身のインスタンスを表すものをplayerに代入して、設計図からインスタンス化をさせているわけですね。

注意点

public staticはとても便利ですが、似ているクラス名(enemy1 enemy2など)をpublic staticしてしまうと、いざ使ってみようと思った時に検索候補で訳がわからなくなってしまうので、クラス名は間違えにくい名前を付けましょう。

終わり

拙い記事ですが読んでいただきありがとうございました。


  1. シングルトンとはクラスのインスタンスが一つだけになるように設計すること 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0