投稿記事

2024年 09月の記事 (2)

yosita/たんすかい 2024/09/23 18:03

【Unity宴】脱出ゲームのズームカメラの設定

脱出ゲームのズームカメラの設定

今回は脱出ゲームでよくあるズームの実装です。


UIにズームカメラの表示をさせたかったのでRenderTextureで対応しています。
動画のズームした後の差分表示(引き出しが開く)はさらに差分イラストを乗せてます。
少々苦戦したので備忘録として残します。手順としては下記です。
環境:Unity2022.3.19f1と宴4


  1. RenderTextureを作成
  2. RenderTexture用のカメラを作成(ズームカメラ)
  3. RenderTextureを表示する為のUIを作成し、RenderTextureをRawImageとして表示
  4. 宴からズームカメラの位置(XY)を指定(SendMessageByName)

①RenderTextureを作成
プロジェクトウィンドウのCreateから作成できます。

②RenderTexture用のカメラZoomCameraを作成(ズームカメラ)


TargetTextureを①で作成したRenderTextureにしました
カメラのオブジェクトは宴で使用しているUICameraをコピーして
作成しています。ズームカメラのSizeで拡大率(どれだけズームするか)などを調整
また、culling maskの設定が重要となり、
今回のZoomCamera用にLayerにレイヤー名Render追加しています。
UICamera→UI,EsapceSYs,Render
ZoomCamera→UI,EsapceSYs
ZoomCameraではRender指定しない culling maskに含めてしまうと
ZoomCameraにZoomCameraが写り意図しない表示となりましたので
注意。

③RenderTextureを表示する為のUIを作成
RenderTextureを表示する為のRawImageの
CaputureUIImage設定


CaputureUIImageの親オブジェクトにCanvasを追加しており
SortingLayerに今回追加したレイヤー名Renderを指定しています。
Canvasを追加しないとInspector→右上のLayer指定だけでは意図した動きをしませんでした。
こちらが嵌まりポイントでした。


④宴からズームカメラの位置(XY)を指定(SendMessageByName)

x位置とY位置を指定しています。

public void SetZoomCameraForUtage(AdvCommandSendMessageByName command)
{
    //Arg3と4の引数を取得
    float posx = command.ParseCellOptional<float>(AdvColumnName.Arg3, 0);
    float posy = command.ParseCellOptional<float>(AdvColumnName.Arg4, 0);
   EscapeZoomCameraObject.transform.position =(posx, posy, -10);
}



アセット

今回はUnity本体と宴とアニメーションはDOTweenを利用しています。

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

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

yosita/たんすかい 2024/09/08 20:38

【Unity宴】キャラクター紹介②と推理結果判定(ParamTbl要素)

本日は開発中の探偵のすすめ【タロット館からの脱出】のキャラクター紹介2人目からです。

キャラクター紹介②高見映司


美貴と同様に視点キャラクター(ワトソン)です。
元は「朝島美奈子の推理日記」のキャラであり探偵のすすめシリーズ本編には初参戦!となります。
名前:高見映司(たかみえいじ)
映司のタロットカードは大アルカナ 愚者です。
(タロット館からの脱出編ではメインキャラにタロットカードがモチーフとして割り当てされています、詳細はゲーム本編にて。)

ステージクリア直前の推理判定(宴のParamTbl要素判定)

今回のゲームでは事件の推理がステージ毎に出てきます。
例えば、ステージ1では
証言当て、証言当て、証拠当て、犯人当ての3つです。
こちらを全て正解するとクリアとなります。
判定方法はいつかあると思いますが、
UserSuiriAnswerTbl{}をこのように設定しています。


今回はC列(Stage)がStage1且つB列(Success)が全てTRUEの場合
正解とする実装をしています。
allCountとtargetcountがイコール場合は全推理正解としています。
この場合のメリットとしては、UserSuiriAnswerTbl{}のレコード行を
あらかじめ決定しなくても判定可能なところです。



    private (int,int) GetStageSuccessCount(string tblName,string stageName)
    {
        int targetcount = 0;
        int allCount = 0;
        AdvParamStructTbl tbl = Engine.Param.StructTbl[tblName];
        foreach (var keyValue in tbl.Tbl)
        {
            //一行分のデータを取得
            AdvParamStruct paramRow = keyValue.Value;
            Debug.Log("paramRow" + paramRow);

            //パラメターを取得
            string StageParm= (string) paramRow.Tbl["Stage"].Parameter;
            bool SuccessParm = (bool) paramRow.Tbl["Success"].Parameter;

            //条件式を書く
            //Stageが指定のステージ名の場合
            if (StageParm == stageName)
            {
                ++allCount;
            }

            //Stageが指定のステージ名で、かつSuccessがtrueの場合
            if (StageParm == stageName && SuccessParm == true)
            {
                ++targetcount;
            }

        }
        return (allCount,targetcount);
    }

アセット

今回は宴のみの機能です。

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

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

月別アーカイブ

記事を検索