Unityで作る3D脱出ゲームの作り方を紹介している記事その13です。
僕が所属しているオンラインサロンの
先生である嶋津さんが作成された動画を
見ながら勉強した内容について、
「3D脱出ゲームの作り方」
としてまとめている記事になります。
その13となるこの記事では、
「パスワードクリアの実装をする方法」
についてお伝えしています。
参考となる動画はこちらです。
【Unity3D】脱出ゲームの作り方 # 13パスワードクリアの実装
今回使用する宝箱の素材はこちらです。
Udemyの場合は
セクション7の61
「宝箱のOpen」
セクション7の62
「ギミッククリア時の宝箱のOpen」
の内容です。
この動画で勉強すること
▶︎パスワードギミックをクリアした時の処理を作成する。
目標1
パスワードクリア時に開ける宝箱オブジェクトを用意する。
=>宝箱の素材をダウンロードしてインポートする(Chest)
=>Chestを画面に配置して、プレハブ化を解除する。
=>ChestにAnimationコンポーネントをつける。
目標2
宝箱が開くアニメーションを動かす処理を作る。
=>C#スクリプトを作成する(Chestスクリプト)
=>宝箱を開ける関数を作成する。
=>UnityエディタでChestのAnimation設定を行う。
目標3
パスワードをクリアした時に宝箱を開ける処理を作る。
=>Passwardスクリプトの編集をする。
=>UnityEventの設定をする。
Chestスクリプトのコード
パスワードクリアの実装を
行うために作成したChestの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chest : MonoBehaviour
{
public void OPen()
{
GetComponent<Animation>().Play();
}
}
Passwardスクリプトのコード
パスワードをクリアした時に
宝箱を開ける処理を実装するために
編集したPasswardスクリプトの
コードは以下となります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class Passward : MonoBehaviour
{
// 正解すると、外部の関数を実行する(UnityEvent)
public UnityEvent ClearEvent;
// 正解の数値
[SerializeField] int[] correctNumbers = default;
//現在の数値:PasswardButtonのNumberを見ればいい
[SerializeField] PasswardButton[] passwardButtons = default;
// クリックするたびに現在のパネルの数値と正解を比較
// 一致するならクリアログ
//クリアした時に実行する関数
public void CheckClear()
{
if(IsClear() == true)
{
Debug.Log("クリア");
ClearEvent.Invoke(); //クリアイベントを発動する
}
}
//クリアしているか判定する関数
bool IsClear()
{
// 正解しているかどうか
// =>1つでも一致しなければfalse
// =>全てのチェックをクリアすればtrue
for(int i=0; i<correctNumbers.Length; i++)
{
if (passwardButtons[i].number != correctNumbers[i])
{
return false;
}
}
return true;
}
}
パスワードクリアの実装で勉強したことのまとめ
3D脱出ゲームの作り方その13
「パスワードクリアの実装」で
勉強した内容についてのまとめです。
・パスワードクリアの処理を実装
するには、まずクリアした時に
開くオブジェクト(宝箱など)を用意します。
・次に宝箱が開くアニメーションを
設定するためにC#スクリプトや、
Animationなどの用意をします。
・そしてパスワードをクリアした時に
宝箱が開くアニメーションを実行
するようにスクリプトを編集し、
Unity Eventなどを設定します。
今回の内容を実践してPlayボタンで
実行します。
パスワードの数字を正解の1234に
合わせると宝箱が開くようになりました。
以上で「パスワードクリアの実装」
の目標は達成です!