Unityに関連する記事です

学習内容


 ここでは、レンダラーのテストを行っていきます。
レンダラーとは、Unity上にオブジェクトを描画するためのコンポーネントです。

 コンポーネントにはオンオフを切り替える情報があり、この情報は、インスペクター上での切り替えの他、
スクリプトを通じて制御をすることが可能になっています。

 今回は、Cube ゲームオブジェクトにアタッチされている MeshRenderer コンポーネントの制御をスクリプトを通じて行い、
ゲーム実行中でボタンを押すごとに、Cube のゲームオブジェクトの MeshRenderer コンポーネントの制御によって
Cube が表示されたり、非表示になったりすることを確認していきます。


スクリプト用のフォルダの作成


 今後いくつかのスクリプトを作成していくことになりますので、それらを分類して管理するために
Unity内にスクリプト専用のフォルダを用意して、管理しやすくしましょう。

 Project内Assetsの中で右クリックをし、[Create] => [Folder]を選択し、名前を「Scripts」に変更し、それをダブルクリックして開きます。
Assets以下にScriptsフォルダが生成されれば大丈夫です。


フォルダの作成



スクリプトの作成


 開いたScriptsフォルダは空のフォルダになっていますので、このフォルダ内で右クリックをしてメニューを開き、[Create] => [C# Script] を選択します。

 新規のスクリプトが作成されますので、名前を[RendererTest] に変更します。
 
 大文字小文字は区別されますので、もしも変更したり、修正したい場合には、このスクリプトファイルの上でF2キーを押すとRenameが可能です。
あるいはファイルの上で右クリックで[Rename] を選択しても大丈夫です。

 作成した RendererTest スクリプトファイルをダブルクリックして、Visual Studio を開き、スクリプトを以下のように記入します。
プログラムの学習において、コピー&ペーストは厳禁です。ご自分で書くことにより、コードを書く力と読む力を養います。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// レンダラーのテスト用クラス
/// クラスにコンポーネントを取得する、コンポーネントのオン/オフを行う
/// </summary>
public class RendererTest : MonoBehaviour
{    
     private MeshRenderer meshRenderer;

     void Start()
    {
        // meshRendererコンポーネント用の変数をprivateで宣言した場合には、スクリプトをアタッチしているゲームオブジェクトからコンポーネントの情報を取得する必要がある
        meshRenderer = GetComponent<MeshRenderer>();
    }

    void Update()
    {
        // ボタンを押す度にMeshRendererコンポーネントのオン/オフを切り替える
        // オンならそのコンポーネントは有効 オフなら無効
        // 操作したいコンポーネントが代入されている[変数]を使う = アクセスできる
        if (Input.GetKeyDown(KeyCode.D)) {
            meshRenderer.enabled = !meshRenderer.enabled;
        }
    }    
}


コメントアウトとサマリー


// (半角のスラッシュ2つ) は、コメント用の目印です。コメントアウトともいいます。この後ろに書かれる文字はコードとして認識されません
書く場所に制限はありません。積極的に活用して、「どのコードでは何を処理しているのか」をコメントして残しておくようにしましょう
/// (半角スラッシュ3つ)を続けて書くとSummary(サマリー)が作成されます。
こちらは書く場所に制限があります。サマリーとは「概略」という意味合いです。
このスクリプトでは、コードの始まる前の部分にサマリーを用意し、
「このクラス(スクリプト・ファイル)ではどのような処理を行っているのか」を
ファイルを開いたときにすぐにわかるようにしています。
サマリーはメソッドを書き終わったあとに書き込むようにします。そうすることで自動的にサマリーの書式をVisualStudioが作成してくれます。


エラーの確認とゲームの実行


 すべて書き終わったら、 [ファイル] → [すべて保存] (あるいは、shift + ctrl + s キー)をしてセーブをします。
セーブした時点で、記述したコードがコンパイルされます。そのため、エラーが出ると、UnityのConsoleに赤いエラーアイコンとメッセージが表示されます。

 エラーがなく、無事にコンパイルが通れば、このスクリプトをゲームオブジェクトに追加することが出来ます。
 ヒエラルキーにあるCubeオブジェクトにドラッグ&ドロップします。
Cubeオブジェクトを選択し、右側のインスペクターを確認しましょう。
ドラッグ&ドロップが成功していれば、CubeのコンポーネントとしてRendererTestクラスが新しく追加されているはずです。

 このように、ドラッグ&ドロップを利用してオブジェクトに外部からコンポーネントを追加することを「アタッチする」といいます。
今後、「〇〇のオブジェクトに△△をアタッチする」といった記述があれば、それはドラッグ&ドロップをして、
オブジェクトにコンポーネントを追加することであると覚えておいてください。

 ゲームを実行して、Dボタンを押してみましょう。Cubeが表示されたり、非表示になったりすれば、ここでのRendererのテストは成功です。


スクリプトを書き換える


 変数の宣言時の修飾子を private から public に変更し、属性情報も付与してみます。

 public 修飾子で宣言した変数は、インスペクター上に表示されるようになります。
その場合、Start メソッド内において GetComponent メソッドを活用して取得していた MeshRenderer コンポーネントの情報を
事前にインスペクター上からドラッグアンドドロップして登録しておくことが出来るようになります。

 まずは処理を書き換えてみましょう。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// レンダラーのテスト用クラス
/// クラスにコンポーネントを取得する、コンポーネントのオン/オフを行う
/// </summary>
public class RendererTest : MonoBehaviour
{    
    [Header("レンダラー(描画)のオン/オフ用")]   // Header属性を設定することでインスペクター上に"文字列"が表示される
    public MeshRenderer meshRenderer;        // ☆ (竸瑤僚ぞ子を変更し、属性情報を上段に記載する

    //private MeshRenderer meshRenderer;       // ☆◆.灰瓮鵐肇▲Ε箸垢

     void Start()
    {
        // meshRendererコンポーネント用の変数をprivateで宣言した場合には取得する必要がある
        //meshRenderer = GetComponent<MeshRenderer>();   // ☆ public 修飾子に変更したので、スクリプトで取得する必要がなくなるため、コメントアウトする
    }

    void Update()
    {
        // ボタンを押す度にMeshRendererコンポーネントのオン/オフを切り替える
        // オンならそのコンポーネントは有効 オフなら無効
        // 操作したいコンポーネントが代入されている[変数]を使う = アクセスできる
        if (Input.GetKeyDown(KeyCode.D)) {
            meshRenderer.enabled = !meshRenderer.enabled;
        }
    }    
}

 修正箇所は、☆ 銑になります。変数の宣言部分と Start メソッド内の処理のコメントアウトです。

 Update メソッドの修正はありません。

 修正が完了したら、スクリプトのセーブを行い(ctrl + shift + s キー同時押し)、Unity とスクリプトの同期を行います。
エラーが発生している場合には、スクリプトの見直しを行ってください。


アサインを行う


 ヒエラルキーにある Cube ゲームオブジェクトを選択し、インスペクターを確認します。
RendererTest スクリプトの内容を確認してください。public 修飾子に変更した変数が表示されているはずです。
また、Header 属性の機能により、変数の上部に日本語のコメントも表示されています。

 この状態になったら、インスペクターから、この変数に対して、必要な情報をドラッグアンドドロップして登録することが出来ます。
登録できる情報は、ヒエラルキーにあるゲームオブジェクトか、プレファブのゲームオブジェクトのみになります。

 インスペクターに表示されている変数に対して、ヒエラルキーにある Cube ゲームオブジェクトをドラッグアンドドロップして、
そのゲームオブジェクトにアタッチされているコンポーネントの情報を変数に登録することをアサインといいます。


ゲームを実行する


 アサインが完了したら、ゲームを実行します。
処理の内容自体は変わりませんので、以前と同じように、ボタンを押すことで Cube の表示/非表示が切り替われば制御成功です。


別のゲームオブジェクトにスクリプトをアタッチする


 作成したスクリプトは、1つのゲームオブジェクト専用ではありません

 そのため、Cube にアタッチしている RendererTest スクリプトを、別のゲームオブジェクトにアタッチした場合においても、
同じように制御を行うことが出来ます。これがスクリプトのメリットの1つです。

 Plane ゲームオブジェクトにも MeshRenderer コンポーネントがアタッチされているため、
今回の RendererTest スクリプトは、Plane ゲームオブジェクトにアタッチしても正常に機能します。

 ヒエラルキーにある Plane ゲームオブジェクトに RendererTest スクリプトをドラッグアンドドロップしてアタッチし、
その後、インスペクター上に表示されている RendererTest スクリプト内の変数に、Plane ゲームオブジェクトをドラッグアンドドロップしてアサインしてください。

 ゲームを実行して、同じように機能するか、ボタンを押して確認してみてください。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます