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のような形で返します。关数化しておくとフォ