投稿記事

2023年 07月の記事 (2)

yosita/たんすかい 2023/07/18 21:01

【脱出ゲーム】Unity簡易スライダーギミックの実装と宴連携

本日は脱出ゲームで使えそうな
Unityの簡易スライダーギミックの実装例です。
開発中の為、ギミックを解くと人形が獲得できるようになっています。

ギミックの解答とキャラの会話は全て宴から取得しています。
開発中の為、演出などは一部調整中です。

基本的にUIの設定は割愛しますがUnityのスライダーをほぼ初期設定で使っています。
Handleのアイコンは素材を設定しています。
inspectorの設定例です。


動画のように4つのスライダーをそれぞれ用意しています。
左から1、2、3,4のスライダー値を赤、黄色、オレンジ、紫、の4つのスライダーで持っています。
そして、スライダーのOn Value Changeで都度スクリプトを実行させて値を確認し、判定させています。スクリプトは以下です。
    [SerializeField] Slider slider0;//red
    [SerializeField] Slider slider1;//yellow
    [SerializeField] Slider slider2;//orange
    [SerializeField] Slider slider3;//purple
    [SerializeField] GameObject sliderGroup;
    public void SliderGetValue()
    {
        //SLiderGroup0
        //SLiderGroupのnameでいくつ目のSliderGimmicKかを判定
        int SliderGimmickNum = int.Parse((sliderGroup.name).Substring(11, 1));

        //宴から回答を取得
        string Answer = EscapeParamUtageGet.instance.SliderGimmickAnswer(SliderGimmickNum);
        Debug.Log("答え"+ Answer);

        int Anser0Int = int.Parse((Answer).Substring(0, 1));
        int Anser1Int = int.Parse((Answer).Substring(1, 1));
        int Anser2Int = int.Parse((Answer).Substring(2, 1));
        int Anser3Int = int.Parse((Answer).Substring(3, 1));

        if (slider0.value == Anser0Int && slider1.value == Anser1Int && slider2.value == Anser2Int && slider3.value == Anser3Int)
        {
            //正解
            Debug.Log("正解");
            GimmickSucess();

        }
        else
        {
            Debug.Log("不正解");
            GimmickFailureScenario();
        }

    }

宴からは下記関数でスライダーギミックの解答を取得しています。

    public string SliderGimmickAnswer(int SliderGimmickNum)
    //SliderGimmickの答えを返す
    {
        //SliderGimmick0_Answer"
        string Answer =
        Engine.Param.GetParameterString("SliderGimmick" + SliderGimmickNum+ "_Answer");

        return Answer;

    }

宴の設定値ですがParamシートの指定は下記です。


答えは2344です。 SliderGetValueの中のint.Parseで
「2」(赤)「3」(黄色)「4」(オレンジ)「4」(紫)の解答として
IF文判定しています。宴を除ければ基本的にはスライダーのsliderxx.valueで
値を取得しているだけなのでかなりシンプルにスクリプトを書けます。

ギミック正解、不正解時にシナリオを再生させていますが
そちらは別の機会に紹介します。

宴のアセットは下記です。

本日は以上となります。少しでも参考になれば幸いです。

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

yosita/たんすかい 2023/07/02 12:02

宴から日時場所のUIを制御する方法

今日は宴から日時場所のUIを表示する方法を紹介します。


上記スクショの左上が該当の箇所です。
ミステリー推理ゲームだと日時や場所の表示が頻繁に必要な為、
シナリオ内(キャラのセリフや地の文)ではなくシステムとして表示させています。
4月5日が日時、駅前が場所の例です。
宴公式サイトのSendMessageByNameの使い方を参考にしています。

①専用のUIを設定します。


TimePlaceUIが日時場所のUIのオブジェクトです。
画像とテキストのオブジェクトなどを設定します。
Canvas-System UIの配下に設定しています。
②スクリプトを作成します。(UtageTimePlaceController.csとしました)
void ShowTimePlaceUI(AdvCommandSendMessageByName command)
{
    TimeText.text = command.ParseCellOptional<string>(AdvColumnName.Arg3, "arg3");// 日時を入れる
    PlaceText.text = command.ParseCellOptional<string>(AdvColumnName.Arg4, "arg4");// 場所名を入れる
    TimePlaceUI.SetActive(true);
}
void HideTimePlaceUI()
{
    TimeText.text = "";
    PlaceText.text = ""; 
    TimePlaceUI.SetActive(false);
}

UtageTimePlaceController.txt (931.00B)

ダウンロード

スクリプトは添付しています。

③SendMessageByName用のオブジェクトを作成します。

④RecieveUtageTimePlaceUIのオブジェクトに①のUIオブジェクトとテキストを設定します。
RecieveUtageTimePlaceUIは常にアクティブにする必要があります。

⑤宴のマクロを設定


マクロの設定は任意ですが宴のシナリオ内の可読性を上げる為に
マクロ化を推奨します。
⑥シナリオ内で呼び出します。

宴のExcel記述は
Command,時間場所表示
Arg1,4月5日14時
Arg2,駅前
表示終了は
Command,時間場所非表示
とかなりシンプルにしています。

宴のアセットは下記です。

本日は以上となります。少しでも参考になれば幸いです。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索