【Unity連載】GetComponentを具体例付きで解説



GetComponent()とは

GetComponent()はその名の通り、コンポーネントをゲットできるメソッドです。終わり。

。。。これじゃあ味気ないですね。

この記事では、実際にC#でスクリプトを書いてGetComponent()について解説していきます!


コンポーネントとは

そもそもGetComponent()のコンポーネントって何なんでしょう?

これはズバリ下のやつです!!!
これや

これや

これです

見たことありますよね?(笑)
そうです「Inspector」タブにあるやつです。

「Inspector」について復習したい方はこちらの記事を参照

【Unity連載】おさえておきたいインスペクタービューの使い方

この「Inspector」の値を変更するとオブジェクトの場所が変わったり、色が変わったりと、オブジェクトに様々な変化をもたらすことができました。
例えば、「Transform」の中にある「position」の「x」を0から1に変更すると下の様にオブジェクトが移動をします。


そしてあるところに、「これを手動でポチポチうごかしていくのではなく自動で動かしてやろう!」と思った人がいたわけです。
そこで登場するのがC#で書いたスクリプトです。
C#で書いたスクリプトをオブジェクトにペタッと貼り付けることでそのオブジェクトはスクリプトの指示に従って動きます。


実際に使ってみる

さて、いよいよここから実際にスクリプト上でGetComponent()を使いながら説明していきます。
今回のスクリプトでは、オブジェクトが、静止している状態から、動き出し、少しづつ速度が上がっていくというスクリプトを書きます。

ここで、速度というパラメーターをプログラムで触る必要が出てきました。速度というパラメーターは、コンポーネントの中にある「Rigidbody」の「Velocity」で操作することができます。因みに、「RigidBody」は上のコンポーネントの画像の3枚目です。

「Rigidbody」について復習したい方はこちらの記事を参照

【Unity連載】Rigidbody(物理演算)の使い方② -velocity-

ほらここ!!!
ここで「RigidBody」というコンポーネントにスクリプトで触る必要が出てくるわけなんですよ!

その役割を果たしてくれるのがGetComponent()なのです。
以下のスクリプトにおいては8行目に記述されています。
8行目で「Rigidbody」を取得したことで10行目で現在のオブジェクトの速度を入手したり、17行目でスクリプト上の値をオブジェクトの速度に反映したりすることができるわけです。
この8行目がなかった場合、スクリプトは、「Velocityって言われても何のことだか分かんないよ!」となってしまうのです。

    //スクリプト上で「RigidBody」を触るための橋渡しをする変数を定義
    Rigidbody rid;
    //速度の変数定義
    Vector3 vel;
    void Start()
    {
        //コンポーネント「Rigidbody」を変数「rid」を通してスクリプト上で触れるようにした
        rid = GetComponent<Rigidbody>();
        //オブジェクトの現在の速度を入手
        vel = rid.velocity;
    }
    void Update()
    {
        //変数「vel」のx軸における速度を毎フレーム毎に0.01増加
        vel.x += 0.01f;
        //変数「vel」の値をオブジェクトの速度に反映させる
        rid.velocity = vel;
    }
上の「Start」・「Update」がよくわからないよ!という方はこちらの記事を参照

【Unity連載】UnityとC#におけるメソッド一覧


おまけ

上の例を見て、コンポーネントをスクリプトで操作するためにはGetComponent()が必須なのかと思われた方がほとんど(てか全員?)かと思いますが、実はGetComponent()が不要なコンポーネントも存在します。
それがこちら!「Transform」です!因みに、上のコンポーネントの画像の1番目です。
「Transform」はオブジェクトの移動のためによく操作されるコンポーネントで、その使用頻度の高さから(←たぶん)、いちいちGetComponent()しなくても、いきなり操作することができます。

以下のスクリプトでは「Transform」の値を少しずつ変えることで静止しているオブジェクトを等速直線運動させます。
この様に、GetComponent()をしていなくても、6行目で現在のオブジェクトの座標を入手したり、13行目でスクリプト上の値をオブジェクトの座標に反映したりすることができます。

    //座標の変数定義
    Vector3 pos;
    void Start()
    {
        //オブジェクトの現在の座標を入手
        pos = transform.position;
    }
    void Update()
    {
        //変数「pos」のx軸における座標を毎フレーム毎に0.01増加
        pos.x += 0.01f;
        //変数「pos」の値をオブジェクトの座標に反映させる
        transform.position = pos;
    }

 

  • このエントリーをはてなブックマークに追加

PAGE TOP