ゲームをプレイするときに見ることができるボタン、テキスト、ドロップダウンなどは何ですか?これらはすべて、ユーザーインターフェイス(UI)と呼ばれるものの一部です。ほとんどのゲームには、プレイヤーがレベルを切り替えて特定のコントロールをアクティブにしやすくするために、ある種のUIがあります(ゲームの一時停止やレベルの再起動など)。ユニティでドジャーを作成する方法を説明する前の記事で、プレーヤーが敗れた場合にゲームを更新するための小さなボタンを作成しました。 このチュートリアルでは、それを次のレベルに引き上げ、ユーザーがゲームを一時停止または再起動し、異なるシーンを切り替えることができます。また、ゲームが一時停止されたときやプレーヤーが死ぬときなど、特定の時間にのみ特定のUI要素を表示する方法についても見ていきます。
ほとんどのゲームには、一時停止メニュー、画面上のゲーム、メインメニューが含まれています。これらは「完成」ゲームに必要ないくつかの要素の一部であるため、3つすべてをドジャークローンに挿入します。さらに、プレイヤーがゲームを開始する前に使用できるコントロールを学習できるように、命令画面を作成します。
完了したゲームは、itch.io.
キーテイクアウト
一時停止、メインメニュー、およびユニティの画面上のゲームを実装することは、重要なUIコントロールとシーン管理を提供することによりゲームプレイを強化します。
「time.timescale」を使用してゲーム状態を制御し、ゲームを一時停止するために0に設定し、1を再開して、効果的な一時停止メニュー機能を有効にします。ゲームが一時停止していることをプレイヤーに伝えるタイトルを作成する必要があります。階層ペインで右クリックしてUI->テキストを選択して、テキストオブジェクトを作成する必要があります。新しく作成されたオブジェクトPauseTextに名前を付けてみましょう
テキストオブジェクトをフォーマットして、ゲーム画面内で見栄えを良くすることができます。テキストオブジェクトのテキストを変更するには、「新しいテキスト」という単語があるテキスト属性の下にあるインスペクターペインをクリックする必要があります。テキスト属性の内部では、一時停止テキストのテキストを「一時停止」に変更できます。ゲームの配色を維持するには、テキストの色を白に変更する必要があります。これは、色のオブジェクト(黒または別の色が選択される場合がある場合)の下をクリックして白を選択することで実現できます。
テキストの配置を調整しましょう。一時停止テキストは、画面上で水平に中央に配置し、ゲーム画面の上部3分の1にある必要があります。一時停止テキストは、rect変換属性の内側のxとyの値を変更するか、Unityエディターの左上隅にあるマウスコントロールの4つの方法矢印を使用することで移動できます。必要に応じて、または必要に応じて、値を変更し、幅と高さの属性のサイズを変更することでテキストサイズを変更することもできます(長方変換の下)。
一時停止ボタンの作成
は、再生ボタン、再起動ボタン、メインメニューボタンの3つの異なるボタンを作成します。再生ボタンはゲームの停止、再起動ボタンがゲームを再起動し、メインメニューボタンはプレイヤーをゲームのメインメニューシーンに戻します。
新しいボタン(階層の右クリック - > ui->ボタン)を作成し、「Playbutton」という名前を付けてみましょう。プレイボタンのタグをshowonpauseに設定して、ゲームが一時停止されたときにのみ表示されるようにする必要があります。次に、再生ボタンのテキストを「再生」に設定しましょう。これは、インスペクターでテキストチャイルドオブジェクトを開くことで実行できます(階層の再生ボタンの横にあるドロップダウンをクリックして、テキストオブジェクトを選択します)。テキストプロパティを「再生」に変更します。プレイボタンを画面の中央に合わせて、一時停止テキストの下にあるようにする必要があります。他の2つのボタンを作成する簡単な方法は、階層の[再生]ボタンを選択し、それを複製する(コマンド / Ctrl D)2回です。新しいボタン「RestArtButton」と「MainMenubutton」という名前を付けることができます。また、新しいボタンのそれぞれに適切なテキストを提供する必要があります。再起動ボタンは「再起動」と言って、メインメニューボタンには「メインメニュー」と書かれているはずです。次に、最後のチュートリアルで作成された更新ボタンを削除しましょう。基本的な一時停止メニューがあることがわかります。ただし、オブジェクトにコードを添付していないため、メニューは何もしません。
Uimanagerスクリプトでアクセスできるコードが作成されたため、Unityに戻ることができます。 Unityの内部では、[再生]ボタンを選択して、Pausecontrolメソッドを添付します。これを行うには、[再生]ボタンを選択し、uimanagerゲームオブジェクトをインスペクターペインのonclick()属性の下のゲームオブジェクトスペースにドラッグできます。 Uimanagerゲームオブジェクトを追加すると、2番目のドロップダウンを使用してPausecontrol関数(uimanager-> pausecontrol)を選択できます。
GameObject<span>[] pauseObjects; </span> <span>// Use this for initialization </span> <span>void Start () { </span> Time<span>.timeScale = 1; </span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause"); </span> <span>hidePaused(); </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>//uses the p button to pause and unpause the game </span> <span>if(Input.GetKeyDown(KeyCode.P)) </span> <span>{ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Debug<span>.Log ("high"); </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>} </span> <span>//Reloads the Level </span> public <span>void Reload(){ </span> Application<span>.LoadLevel(Application.loadedLevel); </span> <span>} </span> <span>//controls the pausing of the scene </span> public <span>void pauseControl(){ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>//shows objects with ShowOnPause tag </span> public <span>void showPaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(true); </span> <span>} </span> <span>} </span> <span>//hides objects with ShowOnPause tag </span> public <span>void hidePaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(false); </span> <span>} </span> <span>} </span> <span>//loads inputted level </span> public <span>void LoadLevel(string level){ </span> Application<span>.LoadLevel(level); </span> <span>} </span>
今すぐプレイをした場合、プレイと再起動ボタンが機能することに気付くでしょう。また、ゲームが再生されている間にPをヒットした場合、ゲームを一時停止して停止することができます。唯一の問題は、メインメニューボタンが機能しないことです。これは、ビルド設定に「Mainmenu」という名前のシーンを追加していないためです。
メインメニューシーンの作成
プレイシーンで作成された一時停止メニューを使用すると、ゲームのメインメニューとして機能する新しいシーンを作成できるようになりました。作成するメインメニューはシンプルで、プレイヤーをプレイシーンに連れて行くプレイボタンのみが含まれています。
最初に、私たちが行った作業が新しいものを開くときに削除されないように、私たちが取り組んでいる現在のシーンを保存する必要があります。新しいシーン(コマンド / ctrl nまたはファイル - >新しいシーン)を作成しましょう。シーンが開いたら、保存して「メインメン」と名付けます。シーンが保存されたので、作業を開始できます。メインカメラゲームオブジェクトを選択し、その背景をプレイシーンと同じ色に変更することから始めましょう(R:0、G:223、B:255)。 このシーンでは、uimanagerスクリプト内のloadlevel()メソッドにアクセスできる必要があります。これは、Uimanagerゲームオブジェクトを作成し、Uimanagerスクリプトを添付して、ボタンに関数を追加できるようにする必要があることを意味します。
空のゲームオブジェクトを作成し(階層を右クリック - >空の作成)、uimanagerに名前を付けます。これで、UimanagerスクリプトをUimanagerゲームオブジェクトに追加できます。「ドジャー」と再生ボタンというテキストを含むシンプルなメニューの作成を開始できます。まず、テキスト(階層の右クリック - > ui->テキスト)を作成し、「titletext」という名前を付けます。 「ドジャー」と言ってテキストを変更し、画面の中央に合わせて、上に向かって少し調整する必要があります。それでは、タイトルテキストの色を白に設定しましょう。
作成および編集されたテキストを使用して、新しいボタンを作成して「Playbutton」と名付けます。再生ボタンの子オブジェクトのテキストを変更して「再生」する必要があります。最後に、uimanagerゲームオブジェクトをボタンのonclick()属性に追加し、loadlevel()関数を選択します。 LoadLevel()関数のパラメーターは、最後のチュートリアルのプレイシーンの名前が何であるかに依存します。 Assets Paneでシーンを見つけることで、プレイシーンの名前を見つけることができます。
ゲームを実行して再生ボタンを押すと、ボタンが機能しないことに気付きます。その理由は、メインメニューボタンがプレイシーンで動作しなかったときと同じです。ビルド設定にメインメヌシーンを追加していません。現在のシーンをビルド設定に追加するには、ビルド設定(ファイル - >ビルド設定)を開き、電流の追加をクリックできます。
ゲームの終了
ゲームが「終了」と見なされるためには、プレイヤーがいつ負けたかを知ることができるように、画面上でゲームを越えて持っている必要があります。また、ゲームにスコアカウンターを追加しますので、プレイヤーはスコアがどれだけ高いかを知るでしょう。
スコアの追加
現在のシーンを保存して、プレイシーンを開く必要があります。プレイシーンを開くと、テキストオブジェクトを作成して「ScoreText」と名付けます。スコアテキストオブジェクトは、画面の上部に整列する必要があります。スコアテキストオブジェクトを選択した状態で、rect Transformプロパティを調べてアンカーメニューをクリックすることで、トップストレッチアンカーを追加できます。また、テキストを中央に配置して白にする必要があります。
空のゲームオブジェクトを作成し、「Bottomborder」と名付けてみましょう。 BoxCollider2Dを下の境界に追加し、Xサイズをカメラの境界をわずかに通り過ぎる多数に設定します。これにより、下部の境界オブジェクトが落ちないように、下部の境界オブジェクトにrigidBody2Dを追加し、重力スケール属性を0に設定できます。プレーヤーのわずかに下にあるボトムボーダーオブジェクトをアラージュして、画面が外れていることを確認できます。
プレーヤーのスコアを設定するには、新しいスクリプトを作成する必要があります。スクリプトフォルダー内に「PointCounter」という名前の新しいC#スクリプトを作成しましょう。 PointCounterスクリプトが作成されたら、IDEとタイプで開くことができます。
GameObject<span>[] pauseObjects; </span> <span>// Use this for initialization </span> <span>void Start () { </span> Time<span>.timeScale = 1; </span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause"); </span> <span>hidePaused(); </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>//uses the p button to pause and unpause the game </span> <span>if(Input.GetKeyDown(KeyCode.P)) </span> <span>{ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Debug<span>.Log ("high"); </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>} </span> <span>//Reloads the Level </span> public <span>void Reload(){ </span> Application<span>.LoadLevel(Application.loadedLevel); </span> <span>} </span> <span>//controls the pausing of the scene </span> public <span>void pauseControl(){ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>//shows objects with ShowOnPause tag </span> public <span>void showPaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(true); </span> <span>} </span> <span>} </span> <span>//hides objects with ShowOnPause tag </span> public <span>void hidePaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(false); </span> <span>} </span> <span>} </span> <span>//loads inputted level </span> public <span>void LoadLevel(string level){ </span> Application<span>.LoadLevel(level); </span> <span>} </span>
さて、スコアテキストを更新する「PointUpDater」という名前のスクリプトを作成しましょう。 IDEとタイプでPointUpDaterスクリプトを開くことができます:
スコアテキストゲームオブジェクトにPointUpDaterスクリプトを追加する必要があります。ボトムボーダーゲームオブジェクトをポイントカウンター値に追加して、スコアを更新できるようにする必要があります。
メニュー上のゲームの作成public <span>int score; </span> <span>// Use this for initialization </span> <span>void Start () { </span> score <span>= 0; </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>} </span> <span>//checks for entering a trigger </span> <span>void OnTriggerEnter2D(Collider2D other){ </span> <span>//checks other collider's tag </span> <span>if(other.gameObject.tag == "Enemy"){ </span> score<span>++; //increments score </span> <span>Destroy (other.gameObject); //destroys other collider's gameobject </span> <span>} </span> <span>} </span>
ゲームを終了するには、プレイヤーが死んだときに表示されるメニュー上にゲームを追加する必要があります。
IDEでPlayerControllerスクリプトを開き、最後の変数宣言の下に追加しましょう。メニューの具体化を開始するには、新しいテキストゲームオブジェクトを作成し、「GameOverText」という名前を付けることができます。テキストは「ゲームオーバー」に設定する必要があり、テキストの色は白である必要があります。画面の中心をわずかに上にするように、テキスト上にゲームを揃える必要があります。このメニューが死んだときにのみ表示されることを確認するには、「showonfinish」という名前の新しいタグを作成し、テキスト上のゲームに追加する必要があります。
次に、再起動とメインのメニューボタンを複製しましょう。ボタンを「FinrestartButon」と「FinmainMenubutton」に変更し、両方のボタンにshowonfinishタグを追加する必要があります。
最後に、IDEでuimanagerスクリプトを開き、編集して、以下のコードのように見えるようにしましょう。public PointCounter pointCounter<span>; </span> <span>// Use this for initialization </span> <span>void Start () { </span> text <span>= gameObject.GetComponent<Text>(); </span> text<span>.text = "Score: 0"; </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> text<span>.text = "Score: " + pointCounter.score.ToString(); </span> <span>} </span>
public bool alive<span>; </span> <span>// Use this for initialization </span> <span>void Start () { </span> alive <span>= true; </span> <span>} </span>
結論
ゲームに簡単なUIを追加しました。プレイヤーは、ボタンを使用して2つのシーンを移動できるようになります。また、モジュラーユニティ開発とドライコーディングの経験を積んでいます(繰り返してはいけません)。スコアテキストを作成した方法は、リサイクル可能になるようにUnityコードを分割する方法の良い例です。
質問?コメント?以下に残してください!
<span>void OnTriggerEnter2D(Collider2D other){ </span> <span>//Checks if other gameobject has a Tag of Player </span> <span>if(other.gameObject.tag == "Player"){ </span> other<span>.gameObject.GetComponent<PlayerController>().alive = false; </span> Time<span>.timeScale = 0; </span> <span>} </span><span>} </span>
UNITYのUIシステムには、Canvasスケーラーと呼ばれる機能が含まれています。 Canvas ScalerのUIスケールモードを「画面サイズのスケール」に設定することにより、UI要素がさまざまなデバイスにわたって一貫したサイズとレイアウトを維持できるようにします。 >
UIをUNITYでテストすることは、Unityエディターで直接実行できます。ゲームビューは、UI要素を含むゲームのリアルタイムプレビューを提供します。プレイヤーが実際のゲームでプレイヤーがするように、ゲームビューでUIと対話することができ、機能をテストして問題を確認できます。 >以上が一時停止、メインメニュー、ゲーム上の画面上のunityを追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。