UnityのuGUIを使う場合のSortingLayerについて

UnityのuGUI機能、sortingLayersで描画順番を指定することは可能でしょうか?

http://sites.cybernoids.jp/cubism2/sdk_tutorial/platform-setting/unity/csharp/render-mode

このRenderModeの切り替えも試してみましたが、上手く行きませんでした。
(Default固定のように感じました)

直に

renderer.sortingLayerName = "mid";

のように指定する形でも構いませんので、何か方法があればご教授頂ければと思います。
Tagged:

コメント

  • edited 2月 2015
    ちょっと把握できてないので教えてほしいのですが、uGUIにsortingLayersってありましたっけ?
    (確かUnityの2D機能だったような...)

    以下のようなソースにするとLive2DとSprite画像の描画順が制御できるかと思います。

    using UnityEngine; using System; using System.Collections; using live2d; [ExecuteInEditMode] public class SimpleModel : MonoBehaviour { public TextAsset mocFile ; public Texture2D[] textureFiles ; private Live2DModelUnity live2DModel; private Matrix4x4 live2DCanvasPos; void Start () { Live2D.init(); live2DModel = Live2DModelUnity.loadModel(mocFile.bytes); // Live2Dのレンダーモード変更 live2DModel.setRenderMode(Live2D.L2D_RENDER_DRAW_MESH); for (int i = 0; i < textureFiles.Length; i++) { live2DModel.setTexture(i, textureFiles[i]); } float modelWidth = live2DModel.getCanvasWidth(); live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f); } void Update() //void OnRenderObject() { if (live2DModel == null) return; live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos); if (!Application.isPlaying) { live2DModel.update(); live2DModel.draw(); return; } double t = (UtSystem.getUserTimeMSec()/1000.0) * 2 * Math.PI ; live2DModel.setParamFloat( "PARAM_ANGLE_X" , (float) (30 * Math.Sin( t/3.0 )) ) ; live2DModel.update(); live2DModel.draw(); } }

    ちなみにこの方式だとsortinglayerを使わず、Z軸でも描画順が制御できるかと思います。


    ただ今後Unity側で廃止される描画方式らしいので、背景画像は2DSpriteで配置して
    Live2Dモデルよりも前に表示したい画像はUGUIを使うといいかもです。

  • naotaroさん
    教えて頂き、ありがとうございます。

    Spriteの描画順を指定する場合は、
    Sorting Layerを使わず、このようにやるか、
    カメラを複数使うなど行う必要がありそうですね。

    大変参考になりました。ありがとうございました!
Sign In or Register to comment.