Unityノベルゲームの作り方3 ボタン処理とUIビュー遷移処理を実装 | Unity入門の森 ゲームの作り方

Unityノベルゲームの作り方3 ボタン処理とUIビュー遷移処理を実装

Unity ノベルゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事では「恋愛ホラーノベルゲーム」の作成を通じて、基本的なUIの作成方法を紹介していきます。

前回までで、UnityでアセットをインポートしてUI画面を作りノベルゲームのタイトル画面を作成してきました。

Unity ノベルゲームの作り方2 フォントアセットの作成と画像素材のインポート
この記事では「恋愛・ホラー風ノベルゲーム」をUnityで0から開発していきます。今回は第2回目です。前回、プロジェクトの作成を行いCanvasやカメラオブジェクトの設定、そして真っ白な背景画面に文字を表示するところまで作りました。今回はさら...

今回は複数のUI画面を行き来する遷移処理を実現できるよううにコードを書いていきます。

ここからコードエディタを使用していくので、まだお持ちでない方は「VisualStudio」や「VSCode」をインストールしておきましょう。


【Line登録者限定のプレゼントもあるよ!】

Unity C#スクリプトを作ってみよう スクリプトの構造も解説

まずは基本的なスクリプトを作成してみましょう。

C#スクリプトの作成

先に前回作成した「00_Title」シーンを開いておきます。次に「00_Title」フォルダの中にある「Script」フォルダ(なかったら作成しておきます)、の中に右クリック「Create→C#Script」で新しいファイルを作成「TitleView」という名前にします。

そのファイルをダブルクリックすると任意のコードエディタでコードが開きます。

まずは開いた状態ではこのようになっています。

はじめてUnity C#を書く人向けにこのスクリプトで出てきたキーワード文などを解説しながら進めていきます。既にわかっている人は読み飛ばしつつ進めてください。

(関連記事:Unity C#スクリプトの構造 スクリプトの作成と実行方法)

Unity C#スクリプトの構造 スクリプトの作成と実行方法
前回はUnityとC#について簡単に解説しました。前回の記事↓今回の記事ではいよいよ実際にUnity上ではじめてのプログラミングに挑戦です!Unity C#スクリプトを作成・実行していきましょう!C#スクリプトを作成してGameObject...

using

まずは最初の「using 〇〇」が3行並んでいる部分。

ここはUnity C#の機能を使うための宣言です。”「〇〇」部分の機能を使いますよ”という表示です。

この「〇〇」の部分を「名前空間(namespace)」と言います。自分で作成することもできますし、最初に追加した「UniTask」などを使用するためにもここに追加します。

今はおまじない的に「using」という記載をしておくと簡単に使用できる機能があると覚えておきましょう。

次に「public class TitleView : MonoBehaviour」です。

public (private)

まずは「public」です。これは後に続くもの、今回の場合は「class」を「他のクラスに公開する」という意味です。逆に公開しない場合は「private」という記載になります。

実際の使用方法はこれから解説していきますが、この「public」「private」は何度も出てくるので公開、非公開というところだけ覚えておきましょう。

class

次に「class」です。クラスとも呼ばれます。これは一つの設計図のようなもので「関数や変数を一つにまとめておくもの」と思っておきましょう。

この次の「TitleView」はクラスに付けられた名前です。

: MonoBehaviour

その後「:」の記号によって後に続く「MonoBehaviour」を「継承する」という意味になります。継承も後ほど解説していきますが、簡単にいうと「MonoBehaviour」の機能を持たせたまま派生したクラスを作成しています。

MonoBehaviour」というのはUnityで使用できる基本的な機能をまとめたもので、UnityでC#スクリプトを作成すると自動的につきますが、無くすことも可能です。

この「MonoBehaviour」があることにより中の関数「Start()」「Update()」がUnityらしい機能を持つことになります。

Start(), Update()

Start()」はゲーム開始時(正確に書くと最初にアクティブになった時)に一度だけ自動的に実行される関数です。

Update()」はゲーム実行中に1フレーム毎に実行され続ける関数です。

関数というのは、処理をひとまとまりにしたものです。この二つの関数は先に解説した「MonoBehaviour」を継承していると、記載しておくだけで勝手に実行されます。

本来のC#では関数を作成し、その関数を呼び出して実行する手順を踏むことで処理が行われます。

// …

飛ばしてしまいましたが「// Start is called before the first frame update 」と書いてある部分があります。この「//」はコメントです。

処理には影響しない部分で説明などを記載します。初期に記載したこの行は関数の説明なので消してしまって構いません。

自分でコードを書いていく時に何の処理をしてるかなどコメントを書いておくと後からスクリプトを見直す時や修正するときにわかりやすくなります。

より詳しくスクリプト構造を学びたい方へ

Unity入門の森ではUnity C#の文法を詳しく扱ったプログラミング入門講座を用意しています。

関連記事:「初心者でも挫折しないUnity C#プログラミング入門講座

Unity C#プログラミング入門講座 初心者でも挫折しない
Unity C#スクリプトの初心者向けプログラミング入門講座です。 初心者でも挫折せずにUnityC#スクリプトの書き方が身に付きます。 Unityを用いたゲームプログラミングに必須の知識を一歩一歩身に付けていきましょう。

ここまで軽く触れてきた内容も含めつつ、Unity C#プログラミングをより深く学べます。

では独自のコードを記載して処理を作成していきましょう。

Unity C#で処理を作成

では、作成したファイルに処理を追加します。まずは下記と同じように記載してみましょう。

コメント部分は削除しました。 

追加したのは「Start ()」関数内にある「Debug.Log( “Start!!” );」、「Update()」関数内の「Debug.Log( “Updata!!” );」です。

これはUnityのConsoleウインドウにログを出す関数を実行しています。文字の後ろの「( )」内を引数とよび、関数に値を渡すことができます。

そして「” “」で囲まれる部分は、「文字列(string型)」として扱われます。

今回の場合「Debug.Log」という関数にそれぞれ「Start!!」「Update!!」という文字列を渡し、実行することでUnityのコンソールにその文字が出力されます。

Debug.Log( “〇〇” ) : Unityのコンソールウインドウに「〇〇」部分のログを出力する

できたら、Unityに戻ります。

今の段階で再生しても何も起こりませんので、作成したスクリプトをゲームオブジェクトに設定していきます。

TitleViewスクリプトをオブジェクトにアタッチ

ここまで解説を交えながら「TitleView.cs」というスクリプトを作成してきました。これを「TitleView」というゲームオブジェクトに設定します。

やることは簡単で、作成したスクリプトをProjectウインドウからHierarchyの「TitleView」のゲームオブジェクトにドラック&ドロップするだけです。

(ウインドウの位置は画像を撮る用に調整しているので多少見た目が異なります。ご了承ください)

ちゃんとドラッグ&ドロップできると、「TitleView」のInspectorの「RectTransform」の下に「TitleView(Script)」というのが増えているかと思います。

これでこのゲームオブジェクトにスクリプトを取り付けることができました。この操作を「アタッチ」と言います。

また、Inspector画面の下にある「AddComponent」を押してスクリプトを選択したり、Inspectorの下の空いている部分にドラッグ&ドロップすることでも同じようにアタッチできます。

これで実行準備ができましたので、Unity上部にある再生マークを押して再生してみましょう。

左から「再生」「一時停止」「コマ送り」です。

再生するとコンソールに「Start!!」が一回、「Update!!」が再生中繰り返し出てくるのがわかると思います。これで処理が実行されていることが確認できました。

(上部の「Collapse」を選択すると、上記のように同じログを一つにまとめて繰り返しの数を表示するように変更できます。これを入れていない場合は「Start!!」の下にずらっと「Update!!」が並んでいきます。)

Unity C#で関数を作成してみよう

次に関数を作成します。

「Start()」「Update()」に記載したログは消してしまって構いません。まずは下記と同じように記載してみましょう。 

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

Inspectorから値の設定

ここまでできたら、Unityに戻ります。

先ほど「SerializeField」をつけて「viewList」という変数を作成しました。Hierarchyで「TitleScene」を選択しInspectorの「TitleScene」を見ると「ViewList」という項目が増えています。

ここで、「+」ボタンを押して要素を2つに増やし「SplashView」と「TitleView」をドラッグ&ドロップします。このとき左側に「Element 0 」と書かれています。これがインデックスと同じ数値になっていますので、上に「SplashView」を入れておきましょう。

設定したら、再生してみます。

すると自動的に「SplashView」のみ表示されたかと思います。

ビュー切り替え処理の作成2

続いて下記のようにコードを追記・修正します。

これから先このようにコードに追記していく際には「・・・」と書いて既にあるものを省略し、追加・変更部分をメインで記載していきます。

まずは下にある関数から見ていきます。 

返り値に「IEnumerator」という型が指定されています。

これはコルーチンを使用する時の返り値で、今はおまじない的に覚えておけば問題ありません。

コルーチンを使用するときは、返り値を「IEnumerator」にする。

関数の内容はまず「yield return new WaitForSeconds( 3f );」です。

これもおまじないで大丈夫です。この部分で”後に続く処理を指定秒数「3秒」待ってから実行する”と言う意味になります。もちろん秒数は指定できます。

yield return new WaitForSeconds( 秒数 ); 秒数待ってから以降の処理を実行する

待った後は「Test_ChangeView( 1 );」の実行です。今度は引数を「1」にして「TitleView」を表示します。

では、Unityに戻って再生しましょう。

開始後少ししたら自動的にタイトルが表示されたかと思います。

コルーチンはこのように秒数待つ、もしくは何かの値が指定の値になるまで待つという処理を実現できます。

最初にインポートしたUniTaskはこのような処理をコルーチンの代わりに行います。

では今回はここまでにしましょう。次はSceneを遷移していきます。シーンの遷移はスクリプト以外にも少し設定の変更が必要になるので次回はその部分から解説していきます。

次回の記事:

Unityノベルゲームの作り方4 シーン遷移とフェードイン・フェードアウト処理の実装
この講座ではUnityでの基本的なUIの作成方法マスターしながら「恋愛・ホラー風ノベルゲーム」を開発していきます。今回は第4回目です。前回はスプラッシュ画面からタイトルへのシーン遷移処理を通して、基本的なUnity C#コードの書き方を解説...

Unity ノベルゲームの作り方講座へ戻る >>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました