Unityで作る3D脱出ゲームの作り方を紹介している記事その30です。
僕が所属しているオンラインサロンの
先生である嶋津さんが作成された動画を
見ながら勉強した内容について、
「3D脱出ゲームの作り方」
としてまとめている記事になります。
その30となるこの記事では、
「パスワード入力の実装と宝箱を開ける処理の方法」
についてお伝えしています。
参考となる動画はこちらです。
【Unity】ライブで教材制作!脱出ゲーム制作の残りを終わらせるぞ!パート2
このページでお伝えしている内容は、
動画の最初から36分位までの内容になります。
Udemyで学習されている方は、
セクション14の105〜108までの
内容となります。
この動画で勉強すること
▶︎パスワード入力の実装と正解時に宝箱を開ける処理について学ぶ。
目標1
パスワードギミックのパネルUIを作成する。
=>LeftChestを一度削除して、RightChestをコピーする
=>RightChestとLeftChestのBox Colliderの位置を修正する
=>LeftChestのZoomCameraを用意する
=>RightChestの方にあるZoomCamera(SubCamera)を複製して位置を調整する
=>名前をそれぞれLeftSubCameraとRightSubCameraに変更する
=>LeftChestにLeftCameraを渡してあげる
=>LeftChestのPanelの下についているKeyを削除する
=>Panelのサイズを大きくする
=>Panelの下にCubeを作成して配置する
=>Cubeのサイズを調整する
=>Cubeに3DのTextMeshProをつける
=>テキストを数字の0に変更してサイズと位置を調整する
=>CubeにEvent Triggerをつける
=>Event TriggerをPointer Clickで設定
=>Cubeを複製して横に4つ並べる
目標2
パスワードギミックのボタンをクリックした時に数字が変わるようにする。
=>C#スクリプトを作る (PasswordPanel)
=>C#スクリプトを作る (DialNumber)
=>DialNumberスクリプトにコードを書く(ボタンを押すと数字が増える処理など)
=>Cube4つを選択してDialNumberスクリプトを付ける
=>Cube4つのEvent Triggerを設定する
=>Cube4つのInspecterでスクリプトの欄にTextMeshProを設定する
=>文字の表示修正を行う(RotationのYを180に)
=>DialNumberスクリプトにコードを書く(数字が10になった時に0に戻す処理)
目標3
パスワードが正解か判定する処理を作る。
=>PasswordPanelスクリプトにコードを書く(パスワードが正解かの判定を行う処理)
=>Cubeの名前をDialButtonに変更する(それぞれ0~3の番号を付ける)
=>Panelの名前をPasswordPanelに変更する
=>PasswordPanelのEvent TriggerとBox Colliderをリムーブコンポーネントする
=>PasswordPanelのInspecterにDialButtonを4つ登録する
=>4つのDialButtonのEvent Triggerを増やして設定する
目標4
パスワードが正解した時に宝箱を開ける処理を作る。
宝箱に鍵を使った時の処理を改めて作成する
=>C#スクリプトを作成する(KeyPanel)
=>KeyPanelスクリプトにコードを書く
=>Chestスクリプトのコードを編集する(Open関数)
=>鍵の宝箱にKeyPanelスクリプトを付ける
=>Event Triggerを改めて設定
=>InspecterでRightChestを入れてあげる
パスワードが正解したら宝箱を開ける処理を作成する
=>PasswordPanelスクリプトのコードを編集する
=>PasswordPanelのInspecterでLeftChestを入れてあげる
PasswordPanelスクリプトのコード
パスワードギミックを実装するために
作成したPasswordPanelスクリプトの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PasswordPanel : MonoBehaviour
{
//正解と一致しているか管理するためのもの
[SerializeField] Chest chest = default; //正解時に開ける宝箱を設定する
//正解の数字
int[] correctAnswer = { 3, 0, 1, 1 };
//ユーザの入力
[SerializeField] DialNumber[] dialNumbers = default;
public void OnClickButton()
{
if (CheckClear())
{
// 宝箱を開ける
//Debug.Log("クリア!");
chest.Open();
}
}
//正解とユーザの入力を確かめる
bool CheckClear()
{
for (int i = 0; i < dialNumbers.Length; i++)
{
if(dialNumbers[i].number != correctAnswer[i])
{
return false; //一致しない場合
}
}
return true;
}
}
DialNumberスクリプトのコード
パスワードのボタンを押した時の
処理などを実装するために作成した
DialNumberスクリプトのコードは
以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class DialNumber : MonoBehaviour
{
[SerializeField] TMP_Text numberText = default; //表示するためのもの
public int number = 0; //数字
//クリックされると数字を増やす
public void Onclick()
{
number++; //numberに1を足す
if(number > 9) //numberが9を超えたら0に戻す
{
number = 0;
}
numberText.text = number.ToString(); //数字をテキストに反映して表示する
}
}
KeyPanelスクリプトのコード
鍵の宝箱の処理を実装するために作成した
KeyPanelスクリプトのコードは
以下となります。
#25カメラのズーム機能を参考に
した場合は、宝箱が開いた時に
RedTileを表示させるようにしています。
そのためChestスクリプトに
書いていたコードを追加しています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KeyPanel : MonoBehaviour
{
[SerializeField] Chest chest = default; //開ける宝箱を設定する
[SerializeField] GameObject redTile = default; //#25カメラのズーム機能を参考にした場合のみ記述
//クリックされた時に、鍵を持っていれば、宝箱を開ける
public void OnClick()
{
// keyアイテムを選択していたら
if (ItemBox.instance.CheckSelectItem(Item.Type.Key))
{
ItemBox.instance.UseSelectItem();
redTile.SetActive(true); //#25カメラのズーム機能を参考にした場合のみ記述
//宝箱を開ける
chest.Open();
}
}
}
Chestスクリプトのコード
今回編集したChestスクリプトの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chest : MonoBehaviour
{
// 開ける=アニメーション
[SerializeField] Animation anim = default;
public void Open()
{
anim.Play(); //アニメーションを再生する
}
}
パスワード入力の実装と宝箱を開ける処理の作成で勉強したことのまとめ
3D脱出ゲームの作り方その30
「パスワード入力の実装と宝箱を開ける処理の方法」
で勉強した内容についてのまとめです。
・パスワード入力を実装するには、
まず最初にパスワードパネルの
UIを作成します。
・次にパスワードのボタンを
クリックした時の処理を行うために
C#スクリプトを作成してコードを書きます。
・パスワードボタンの処理が
実装できたら、
次は入力したパスワードが
正解しているかどうかを
判定する処理を作成します。
そのためにC#スクリプトを作り
コードを書きます。
・そして最後にパスワードが
正解した時に宝箱を開ける
処理を作成します。
以上で、パスワード入力の実装と
正解した時に宝箱を開ける処理を
実装することができました。
「パスワード入力の実装と宝箱を開ける処理の方法」
の目標は以上で達成です!