여러 Live 2D 모델의 그리기 순서 제어하기

13778 단어 Live2DUnity
여러 Live 2D 모델을 표시할 때 Z 값으로 그리기 순서를 잘 제어할 수 없기 때문에 방법을 요약했습니다.

주로 다음과 같은 두 가지 방법이 있다.

1. 드로잉 타이밍을 관리하는 스크립트 만들기


Live 2D 커뮤니티에 다음과 같은 단서가 있기 때문에 우리는 SDK의 Motion 프로젝트를 맞춤형으로 제작하고 시도했다.
 →  Unity에서 Live 2d를 사용할 때 그리는 순서는 어떻게 제어합니까?
1) 우선 라이브 2D 모델 2개(스크립트는 동일 부착) 준비

2)SimpleModel.cs의 OnrenderObject () 를 적당한 이름으로 바꾸기
SimpleModel.cs
    //void OnRenderObject()
    public void RenderLive2D()
    {
        if (live2DModel == null) return;
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
    .
    .
    .
3) 빈 게임Object 만들기, 스크립트 만들기

RenderControl.cs
using UnityEngine;
using System.Collections;

public class RenderControl : MonoBehaviour {

    [Range(0,1)]
    public int changemodel; // 前面に出すモデル切替

    private SimpleModel obj_haru;       // haruモデル
    private SimpleModel obj_Epsilon;    // Epsilonモデル

    void Start () {
        // スクリプトを取得する
        obj_haru = GameObject.Find("haru").GetComponent<SimpleModel>();
        obj_Epsilon = GameObject.Find("Epsilon").GetComponent<SimpleModel>();
    }

    void OnRenderObject(){
        if (changemodel == 0)
        {
            obj_haru.RenderLive2D();
            obj_Epsilon.RenderLive2D();
        }
        else
        {
            obj_Epsilon.RenderLive2D();
            obj_haru.RenderLive2D();
        }
    }
}
이렇게 하면 그리는 순서를 제어할 수 있습니다!

쓰고 나서 지적을 받았는데 Live 2D 모형의 Z값으로 어떤 걸 먼저 그리는 게 현명할까요?

2. Z 값으로 제어하는 드로잉 모드 수정


다른 방법으로 드로잉 모드 DRAW-MESH_NOW의 DRAWMESH로 변경하는 방법.
 →  Live 2D Manucal- 드로잉 모드 설정 정보
이 스크립트는 그리기 모드와 On RenderObject를 Update로 변경하기만 하면 됩니다.
2015/09/17 스포츠투데이
Live2D Unity SDK2.1부터 제한된 마스크를 사용하는 경우live2DModel.업데이트 타이밍 변경
SimpleModel.cs
using UnityEngine;
using System;
using System.IO;
using System.Collections;
using live2d;

[ExecuteInEditMode]
public class SimpleModel: MonoBehaviour 
{
    private Live2DModelUnity live2DModel;
    private Live2DMotion motion;
    private MotionQueueManager motionMgr;
    private Matrix4x4 live2DCanvasPos;
    public TextAsset mocFile ;
    public Texture2D[] textureFiles ;
    public TextAsset motionFile;

    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);

        motionMgr = new MotionQueueManager();
        motion = Live2DMotion.loadMotion(motionFile.bytes);
    }

    //void OnRenderObject()
    public void Update()
    {
        if (live2DModel == null) return;
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if ( ! Application.isPlaying)
        {
            live2DModel.update();
            live2DModel.draw();
            return;
        }

        if (motionMgr.isFinished())
        {
            motionMgr.startMotion(motion);
        }

        motionMgr.updateParam(live2DModel);

        live2DModel.update();
        live2DModel.draw();
    }
}
만약 이 방식이라면 Z값만 조정하면 그리는 순서를 제어할 수 있습니다

입자와 같은 그리기 순서도 제어할 수 있다.
그러나 라이브 2D의 비하인드를 그려보도록 하겠습니다. 슬라이드에서 보듯이 이것은 삭제된 API 방식입니다.
Unity5.0.1을 확인했지만 그래도 쓸 수 있는 API는 쉽게 조작할 수 있는 방법으로 그리기 순서를 제어하면 OK라고 생각합니다.

3. 렌더링 사용


Live 2D Unity SDK에는 RenderTexture 프로젝트가 있습니다.
여기서는 RenderTexture를 사용하여 Plane에 Live 2D 모델을 표시하므로 일반적인 3D 객체와 동일하게 처리할 수 있습니다.
Unity 5 Free 버전이 된 RenderTexture도 사용할 수 있어 사용할 수 있다.
그러나 통상과 비교하면 무승부 호출 수는 2배로 늘었다.
참조 - Q. 반투명 소재를 설정한 게임 대상은 Live 2D 모델 앞에 표시할 수 없습니다.

좋은 웹페이지 즐겨찾기