[実験室・備忘録]【UnityでNovelゲームのスケルトンみたいなものを作ってみたい】[6夜目(終わり)]

 さて、最後にテキストボックスの前に「ひより」が配置されている問題について対処します。

 これは腕が四本の解決の時よりも混迷しまして、結果から言えば、画面構成まで巻き戻してCanvasを複数配置しないと対処できなかった??となります。予想してたのとだいぶ違う形で決着したとも言えます。出来たけどそーゆーものなのかなぁ?といった感じ。すっきりしませんでした。

 配置されたモデルが持ってる CubismRenderController とか、コンポーネントを追加してソート出来るかなぁとあがいたんですがこれはうまくいかなくて、検索した時はあんまりピンと来なくてブックマークだけしていた以下の Q&A の内容をそういえば…と思い出してなるほど…解決としています。Q&Aの下の方で、Canvas内の順番で描画の順番をコントロールできないと書いてますね。
[Q&A]
UnityのCanvas内のLive2Dモデルの表示順の変更の方法
UnityのCanvas内のLive2Dモデルの表示順(手前に表示されるのか、奥に表示されるのか)はどのように変更できるのでしょうか?

【メモ】上のQ&Aは結構重要★★★★

 …やっていきましょう。テキストボックスを別のCanvasに移動して、前面にCanvasを表示するように設定します。新規に「CanvasText」をヒエラルキービューに追加してCanvasの下に配置。

 InspectorのCanvasコンポーネントの[OrderLayer]を”2″に。カメラの設定もCanvasと同じに。下のCanvasScalerコンポーネントの設定もCanvasと同じにする。
【メモ】カメラの設定同じにするの忘れやすい。

「CanvasText」をCanvasの下に配置。
白線の部分の設定をする。

 また、CanvasからCanvasTextに「MessageBox」以下をドラッグして移動する際に座標等のパラメータがおかしくなっている場合があるので、それらも移動前の値を改めてセットする。
【メモ】テキストボックスが表示されないとかの場合、座標等を確認。

 以上で、表示がうまくいっているかと思います。一時停止して配置されたモデルのコンポーネント「CubismRendererController」のOrderinLayerの値を3とかにするとボックスの前面に出てきますね。いろいろいじってみると楽しいかも。

テキストボックスの後ろに配置できた。
 今回備忘録用にもう一回作った時は、出てこなかったのですが、キャラクターのパーツの表示順がおかしい([モデルの描画順を正常にする]
モデルの描画順を正常にする | SDKチュートリアル | Live2D Manuals & Tutorials
)時や、作成したモデルを呼び出し元の空のゲームオブジェクト(Hiyori)の中に見かけ上配置したいとかのスクリプトも下の全文で追加してます。適宜試してみてください。

LoadModel関数(InitModel.cs)[全文]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using Live2D.Cubism.Framework.Json;
using Live2D.Cubism.Rendering;
using UnityEditor.Animations;
using UnityEditor;
using Live2D.Cubism.Framework;

/// <summary>
/// Initialize model.
/// </summary>
public class InitModel : MonoBehaviour
{
    Animator animator;  // アニメーター

    public void LoadModel()
    {
        Debug.Log("LoadModelに入った");

        //Load model.
        var path = Application.streamingAssetsPath + "/hiyori.model3.json";
        var model3Json = CubismModel3Json.LoadAtPath(path, BuiltinLoadAssetAtPath);

        var model = model3Json.ToModel();


        // 親子関係を整理して「Hiyori」の子要素に「model(ひより)」を配置する
        model.transform.parent = this.transform;

        var part = model.Parts[13];
        part.Opacity = 0;

        var _hiyoriTransform = model.gameObject.transform;  // 仮の汎用変数に格納
        _hiyoriTransform.position = new Vector3(0, 0, 0); // 初期位置を改めて指定
        _hiyoriTransform.localScale = new Vector3(8f, 8f, 1f);

        // 以下を使うには、using Live2D.Cubism.Rendering が必要になる
        model.GetComponent<CubismRenderController>().SortingOrder = 1;    // 背景より手前になる様に適宜変更
        model.GetComponent<CubismRenderController>().SortingMode = CubismSortingMode.BackToFrontZ;  // ソート

        animator = model.GetComponent<Animator>();  // アニメーションコントローラーの取得
        string aniCon_path = "Assets/hiyori_test/motion/hiyori.controller";
        // RuntimeAnimatorControllerとしてAssetを読み込む[using UnityEditor; が必要に]
        RuntimeAnimatorController runController = (RuntimeAnimatorController)AssetDatabase.LoadAssetAtPath(aniCon_path, typeof(RuntimeAnimatorController));
        animator.runtimeAnimatorController = runController; // AnimationControllerにControllerを追加

        // モーションテスト用 hiyori_m06とhiyori_m08 をテストする場合は、上のmodel.Part[12]の透明度を0にする。他は13番を0。
        //animator.Play("hiyori_m06");      // モーション名 hiyori_m06 を実行
    }
}

コメント

タイトルとURLをコピーしました