★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

UnityのCanvas内のLive2Dモデルの表示順の変更の方法

UnityのCanvas内のLive2Dモデルの表示順(手前に表示されるのか、奥に表示されるのか)はどのように変更できるのでしょうか?

Canvas内のゲームオブジェクトはHierarchyビューの下に配置するほど手前になりますが
http://albatrus.com/main/unity/7402
※こちらのページの「その他」の項

Live2Dのゲームオブジェクトはその影響を受けない?ようです。


-------------------------------
■環境
Windows10
Unity 2017.1.1f1 Personal
Cubism 3.0 モデル(公式サンプル 桃瀬ひより)
Unity_SDK 3.0
-------------------------------

よろしくお願いします。
タグ付けされた:

コメント

  • @BURAI_VC2008様

    Live2Dスタッフの小嶺と申します。
    よろしくお願いいたします。

    Live2Dの描画はOrder in Layerで制御されます。
    描画順序制御はモデルにアタッチされているCubism Render Controller(script)のOrder in Layerで全体の描画順序をコントロールするか、
    hierarchy上のモデル>Drawablesの下にあるDrawableにアタッチされているCubism Renderer(script)のLocal Orderで個別のDrawableの順序をコントロールします。

    Live2DのOrder in Lairの操作については、こちらのチュートリアルもご参考ください。
    http://docs.live2d.com/cubism-sdk-tutorials/betweendrawables/


    Canvas側の設定はRenderModeをScreen Space – Cameraに選択し、
    RenderCameraにMainCameraを指定し、
    Order in Layerを変更して操作します。


    Live2Dの使用しているLayer幅がDrawableの枚数分あるので、
    余裕をもって1000単位で操作することをお勧めいたします。

    もしCanvasの内容の中にLive2Dを挟んで表示したい場合は
    Canvasを2枚用意していただければ想定の操作ができると思われます。


    よろしくお願いいたします。
  • 小嶺様

    Order in Layerの詳細な解説、ありがとうございます。

    今回は最前面にテキストを表示したいという目的でしたので、Canvasを2枚以上用意してOrder in Layerを操作するという方法で解決することができました。
    ・Live2Dモデルの入ったCanvas:Order in Layer = 0
    ・UIテキストの入ったCanvas:Order in Layer = 1000



    Textはメニューの「GameObject>UI>Text」で作成したオブジェクトですが、こちらのオブジェクトはインスペクタにOrder in Layerのようなプロパティはなかったので、Live2Dモデルと同じCanvas内ではLayerを制御できない…で正しいでしょうか。


  • @BURAI_VC2008様

    はい、Canvas内の順番で描画の順番をコントロールすることはできないという認識で間違いありません。
    もし描画の順番を実行内で入れ替える必要がある場合は、TextなどのUIオブジェクト毎にCanvasを作り、
    そのCanvasのOrder in Layerを操作する形で制御する必要があります。

    またCubismモデルの描画順のコントロールはCubismRenderControllerで行われており、Canvasの子オブジェクトにしてもCanvasの影響はうけません。
    もし、連動させたい場合は下のようなスクリプトをCubismモデルにアタッチすると親に設定されたCanvasからSortingOrderを受け取り連動するようにできます。

    using System.Collections; using System.Collections.Generic; using UnityEngine; using Live2D.Cubism.Rendering; [ExecuteInEditMode()] public class CubismOrderLinker : MonoBehaviour { public Canvas linkCanvas; private CubismRenderController renderController; // Use this for initialization void Start () { if (linkCanvas == null) { linkCanvas = transform.GetComponentInParent<Canvas>(); } renderController = GetComponent<CubismRenderController>(); } // Update is called once per frame void Update () { if(linkCanvas != null && renderController != null) { renderController.SortingOrder = linkCanvas.sortingOrder; } } }

    このようになります。




    よろしくお願いいたします。
  • スクリプトまでありがとうございます!解決しました!
コメントするにはサインインまたは登録して下さい。