[第12回] クラスの基本的な使い方を学ぶ|Unityで学ぶC#入門


「Unityで学ぶC#入門」の連載第11回は「アクセス修飾子の使い方を学ぶ」でした。

第12回の今回はクラスの基本的な使い方を学びます。

いよいよオブジェクト指向プログラミングの肝であるクラスの考え方について学びます。

クラスはプログラミングを学ぶにあたってとても重要な考え方の一つです。

クラスキャッチ画像

クラスとは

クラスとは、特定オブジェクトの設計図のことです。

↓クラスイメージ図

オブジェクト指向イメージ

これによって、自分が使用したい機能をあらかじめクラス(設計書)として準備しておいて、いつでも使用できるようにすることができます。

クラスに関しては説明をどれだけ聞いても理解しづらい部分があります。

ここではクラスの定義方法を簡単にご紹介したあとに、複数の例を使用してクラスの使い方をできるだけ理解していただけるようにご紹介していきます。

クラスの定義

まずはクラスの定義方法からご紹介します。

クラスは以下のように定義します。

いたってシンプルなことがわかると思います。

クラスの中身には以下のようなものを記述します。

  • メンバー
  • コンストラクタ
  • メソッド

以上のようなことを含めて定義すると、一般的に以下のように定義します。

ここからそれぞれについて説明していきます。

メンバー

メンバーはそのクラスで使用する変数のことです。

特に難しく考える必要はありません。ただの変数です。基本的にこの変数はプライベートな変数として定義されます。

理由はこれらの変数が不用意に変更・アクセスされることを防ぐためです。

アクセス制御についてはこちらをご参考ください。

プライベートな変数であるということは、これらの変数は定義されたクラス内でのみ値を変更・参照する必要があります。

そこでコンストラクタやメソッドが用いられます。

コンストラクタ

コンストラクタはこのクラスが呼び出されたときに実行される処理です。

コンストラクタも難しく考えられがちですが、特別難しいものではありません。

後ほど例を参考に詳しく解説していきます。

メソッド

メソッドは特定の処理を実行するものです。

これを利用することで、メンバーの値を参照したり、変更したりすることができます。

メソッドに関しても後ほど例をあげて詳しくご紹介していきます。

メソッドについてはこちらをご参考ください。

インスタンス生成

クラスの定義と同じように重要なことの一つがインスタンス生成です。

インスタンスとは設計したクラスの実体のことです。

つまり、設計したクラスを利用するためにはインスタンスと呼ばれる実体を生成する必要があります。

インスタンス生成は以下のように記述します。(インスタンスを生成したいクラス(Human)とそのクラスを呼び出すスクリプト(Main))

↓インスタンスを生成したいクラス

クラスの使用例

ここからクラスについて理解が進むように複数の例を使用して解説していきます。

数学の基礎的な計算を行うシステム

数学の基礎的な計算を行うシステムをクラスを使用して作成していきます。

まずはとてもシンプルな作りのシステムで基本的な使い方を確認します。

このシステムの大まかな概要は以下の通りです。

計算クラスイメージ
計算システム概要

計算クラスでは簡単な四則演算を行うメソッドを作成して、メインクラスで呼び出して使用します。

プログラムは以下の通りです。

Calcクラス実行結果
実行結果

Calcクラスはとてもシンプルな構造のクラスで、2つの整数を引数として四則演算を行うメソッドを持ったクラスです。

このクラスをMainクラスの9行目のように記述することで定義することができます。

↓Main.cs 9行目

これは、Calc型の変数calcを定義するという意味です。

ここで定義したcalcに実体を持たせるためにインスタンス生成を15行目で行います。

↓Main.cs 15行目

つまり、int型の変数xを定義したり、String型の変数nameを定義することと変わりなく定義することができます。

このことからわかるように、クラスというのは自分で好きなように準備できる型という認識もできるかもしれません。

個人情報を登録するシステム

次に個人情報を登録するシステムをクラスを使用して作成していきます。

具体的に以下のような処理を行うことができるシステムを作成します。

  1. 名前とアドレスを入力
  2. 登録ボタンを押して情報をシステムに登録
  3. プリントボタンを押してコンソールに登録された情報を出力

先ほどの計算を行うシステムに比べてかなり大きめですが、こちらの方がよりクラスの利用目的が明確です。

このシステムの大まかな概要は以下の通りです。

個人情報管理システムイメージ
個人情報登録システム概要

入力情報を管理するInputManagerクラスと登録された情報を管理するInformationListクラスをMainクラスで扱います。

また、個人情報はInformationクラスとしてあらかじめクラス定義しておきます。

では下準備から始めていきましょう。

UI作成

まずはじめに入力フォーマットを作成します。

ヒエラルキーウィンドウのCreateからUI→InputFieldを選択してください。

InputField作成
InputField作成手順

これによってCanvasの下にInputField、それとは別にEventSystemが作成されました。Canvasとは入力フォームやボタンのようなUIを扱うために必要なオブジェクトです。EventSystemはキーボード入力やクリック入力などの処理を扱うために必要なオブジェクトです。

ここではこの両方について詳しく解説はしませんが、どちらも外部からの入力を扱うために必要なものだと認識しておいてください。

次に作成したInputFieldを編集します。

ヒエラルキーウィンドウでInputFieldを選択して、名前を「InputName」、Positionの値をそれぞれ0に変更してください。

InputField編集
InputField編集

次にInputField内のテキストの値を編集します。

ヒエラルキーウィンドウのInputField→Placeholderを選択して、textの中身を「Enter Name…」に変更してください。

InputField内テキスト編集
InputField初期テキスト編集

ここまで編集すると以下のような入力フォーマットが完成します。

InputField編集結果
InputField編集結果

次にアドレスを入力するためのフォーマットも作成します。

先ほど作成した入力フォーマットを複製して、名前を「InputAddress」、PositionのY座標を「-40」、初期テキストを「Enter Address…」に変更してください。

アドレス入力フォーマット作成
アドレス入力フォーマット作成

最終的に以下のようになっていれば問題ありません。

入力フォーマット最終形
入力フォーマット完成形

次にボタンを作成します。

ボタンは登録ボタン(Register)とコンソール出力ボタン(Print)の2つを作成します。

登録ボタンから作成します。

ヒエラルキーウィンドウのCreate→UI→Buttonを選択してください。次に名前を「Register」、Positionの値をX=0,Y=-40、Register下のTextを「Register」に変更してください。

登録ボタン作成
登録ボタン作成方法

これで登録ボタンが完成しました。

次にコンソール出力ボタンを作成します。

先ほど作成した登録ボタンを複製して、名前を「Print」、PositionをY=80、Print下のTextを「Print」に変更してください。

コンソール出力ボタン作成
コンソール出力ボタン作成方法

最終的に以下のようになっていれば問題ありません。

UI最終結果
ボタン完成形

スクリプト作成

スクリプトを作成していきます。

Informationクラス

Informationクラスは個人情報そのものです。このInformationクラスをInformationListクラスで複数管理するイメージです。

Informationクラスイメージ
Informationクラス

プログラムは以下の通りです。

メンバーは「name」、「address」の2つです。

この2つにコンストラクタを使用して値を渡します。つまり、インスタンス生成時に値を受け取って代入することでInformationインスタンスを生成します。

また、16,17行目の「this.〇〇」とは自分自身のメンバーを指定するときに使用するもので、コンストラクタの引数と区別して扱うことができます。

InformationListクラス

InformationListクラスは先ほど作成したInformationクラスを管理するクラスです。

InformationListイメージ
InformationListイメージ

プログラムは以下の通りです。

コンストラクタでは格納できる情報の数を引数として渡します。処理としては、受け取った配列の上限を変数maxに格納、現在の配列の中身の個数(最初は0)を指定、最後にInformation型の配列の長さを指定してインスタンス生成しています。

また、配列に値を格納するためのメソッドと配列の中身を取り出してコンソールに出力するメソッドの2つを記述しています。

情報を受け取って配列に格納するメソッド「SetInformation」では、現在の配列の中身の個数と最大値が同じ場合、これ以上格納できないためエラーを発しています。

格納が可能なとき、Informationsの[number]番目にInformation型の値を格納します。この部分が少し難しく感じるかもしれませんが、Information型の値を新しく作成して、そのまま配列に格納しているだけですので難しく考える必要はありません。

もしよくわからない場合は配列について改めて確認してみてください。

参考記事)配列の使い方を学ぶ

配列の中身を参照してコンソールに出力するメソッド「PringInformations」のfor文の使い方についてよくわからない場合は以下記事をご参考ください。

参考記事)for文を利用したループを学ぶ

InputManagerクラス

InputManagerクラスは入力フォーマットに関する情報を管理するクラスです。

ここで少しUnityの知識が必要になりますが、とても簡単ですのでご安心ください。

InputManagerイメージ
InputManagerイメージ

プログラムは以下の通りです。

8〜20行目で名前とアドレスそれぞれのInputFieldの情報を取得します。

InputFieldクラスはすでにUnityが準備してくれているクラスで、プログラムの先頭で以下のように宣言することで使用することができます。

「using 〇〇;」とすることで、すでに準備されたクラスなどを利用することが可能になります。

また、17,18行目のように記述することで定義したinputNameとinputAddressとUnity上の入力フォーマットをリンクさせます。

「GameObject.Find(”〇〇”)」で実際のUnity上のオブジェクトを探してくれます。探してきたオブジェクトのコンポーネント、ここではInputFieldコンポーネントを「GetComponent<InputField>()」とすることで取得することができます。

ここでは詳しく触れませんが、このようにすることでInputFieldを扱える状態になりました。

メソッドに関して、それぞれのメソッドでそれぞれのInputFieldからテキストを取得してきます。またこれらのメソッドはstring型を返すメソッドです。取得してきたテキスト情報を呼び出し元に返すことができます。

返り値についてよくわからない場合は以下記事をご参考ください。

参考記事)メソッドの使い方を学ぶ

Mainクラス

Mainクラスは今まで記述してきたクラスを扱うコントローラー的なクラスです。

構造はいたってシンプルで、InputManagerクラスとInformationListクラスをそれぞれ作成して、RegisterボタンとPrintボタンが押されたときのメソッドを記述しているだけです。

プログラムは以下の通りです。

Unityではボタンが押されたときに特定メソッドを呼び出すことが可能なため、わざわざここでメソッド化しています。

このMain.csを適当なオブジェクトに取り付けて使用します。

ここでは空のオブジェクトを作成してMain.csをアタッチします。アタッチしたら、それぞれのボタンが押されたときの処理を設定します。以下のGIFを参考にボタンに処理を設定してみてください。

Mainクラスのアタッチ
ボタン処理の設定方法

これで実際に実行できる状態になりました。実行して確認してみましょう。

個人情報管理システム実行結果
実行結果

登録した情報が保存されてコンソールに出力される状態になりました。

それぞれのクラスの詳細説明は省きましたが、今までの「Unityで学ぶC#入門」を進めていただければ理解できるレベルですのでぜひチャレンジしてみてください。

まとめ

いかがでしたでしょうか。

今回はクラスの基本的な使い方についてご紹介してきました。

簡易的な例と具体的な例の2つを中心に解説してきましたが、クラスは実際に自分で何か作成してみて理解できることの方が多いです。

特にUnityを使用することで目に見えて処理を確認することができますので、ぜひ色々なゲームやアプリを作成しながらクラスについて理解してみてください。

 

参考記事)Unityで学ぶC#入門


Furui