csharp アセットバンドル化したLive2DをStreamingAssetsからロードするサンプルコード※エラーハンドリング无し,UnityEditor専用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp アセットバンドル化したLive2DをStreamingAssetsからロードするサンプルコード※エラーハンドリング无し,UnityEditor専用相关的知识,希望对你有一定的参考价值。

/*
#環境
- Unity 5.6.0f3
- Live2D 2.1.04 for Unity
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using live2d;
using System.IO;

public class Live2DABLoad : MonoBehaviour 
{
    Live2DModelUnity live2DModel;
    Matrix4x4 live2DCanvasPos;

    public string fileId;

    public class Live2dAbInfo
    {
        public string[] textures;
    }

    IEnumerator Start () 
    {
        Live2D.init();

        // StreamingAssets内に格納したLive2DのAssetBundleデータ
        var streamingAssetsABPath = Application.streamingAssetsPath + "/" + fileId;
        byte[] bytes = File.ReadAllBytes(streamingAssetsABPath);
        var req = AssetBundle.LoadFromMemoryAsync(bytes);
        yield return req;
        var ab = req.assetBundle;
        // Live2D情報を保持しているJSONをロードする
        var json = ab.LoadAsset<TextAsset>(fileId + ".model.json");
        var info = JsonUtility.FromJson<Live2dAbInfo>(json.text);
        // mocファイルをロード
        var mocFile = ab.LoadAsset<TextAsset>(fileId + ".moc.bytes");
        live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);

        var list = new List<Texture2D>();
        foreach (var texName in info.textures)
        {
            // "charaId.2048/texture_00.png" => "texture_00" へ変換
            var arr = texName.Split('/');
            var fileName = arr[arr.Length - 1];
            fileName = fileName.Substring(0, fileName.IndexOf("."));
            // Textureのロード
            list.Add(ab.LoadAsset<Texture2D>(fileName));
        }

        for (int i = 0; i < list.Count; i++)
        {
            live2DModel.setTexture(i, list[i]);
        }

        float modelWidth = live2DModel.getCanvasWidth();
        live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f);


        //yield return new WaitForSeconds(4f);
        // メッシュだけ残っちゃう
        //ab.Unload(true);
    }


    void Update () 
    {
        if (live2DModel == null) return;
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
        live2DModel.update();
    }

    void OnRenderObject()
    {
        if (live2DModel == null) return;
        live2DModel.draw();
    }

    void OnDestroy ()
    {
        Live2D.dispose();
    }
}

以上是关于csharp アセットバンドル化したLive2DをStreamingAssetsからロードするサンプルコード※エラーハンドリング无し,UnityEditor専用的主要内容,如果未能解决你的问题,请参考以下文章

csharp アセットバンドルビルドスクリプト

csharp 复数のアセットを取り出す

csharp (アセット动作确认用)キー力力ンン

python アニメーションカーブの値を一律指定した数オフセットする

sh 的WebPackのバンドルの内訳を调べる。

javascript [日付のフォーマット处理]日付をフォーマットして返します。フォーマットを省略した场合は2018/03/10(土)21:51:48.578のような形で返します。关数化しておくとフォ