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

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

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

表情ファイル(exp)について。

編集済: 10月 2015 Cubism SDK 2.1
はじめまして。
最近SDKを使いUnityで開発をはじめた者です。はずかしながらC#の知識も深くはないです 汗
モデルを表示させ、モーションの再生やパラメーターの操作などは一通りできるようになったのですが、表情の切り替えで詰まってしまいました。
やり方としては、表情用のL2DMotionManagerを作り、bytesで取り込んだexp.jsonファイルをAMotionへ代入して、L2DMotionManager.startMotion(AMotion)で表情モーションをセットし、updateParamで更新しています。
しかし結果は何も起こらず、変化は起こりません。試しにアイドリング等をさせているモーションやまばたきを止めてみると、モデルは目をつぶった状態になりました。もちろん表情の変化も起きず…
ものすごく初歩的なことなのかもしれず恥ずかしいのですが、どうしても判らなかったのでこちらで質問させて頂きました。
ご教授頂けると助かります(__

また、unityは5.2、SDKは2.1です。

コメント

  • 実装方法としては、おそらく問題ないような気がします。

    1点気になったのは、jsonファイルのロードは正しくできてるでしょうか?
    jsonファイルを開くとわかりますが、mtnファイルと内部の構成が違うため、別途jsonパースする処理が必要があります。
    (SDKのSampleApp1プロジェクトにあるL2DExpressionMotion.csあたり)

    jsonロード部分が問題なければ、ソースを公開していただけるともう少し詳細にアドバイスできると思います。
  • naotaroさん、お返事ありがとうございます!

    御察しの通り、jsonファイルのロードが正しく行われていないみたいです。というか、パースする処理をしていませんでした。実は自分はこの辺をよく理解していません。
    ロードは以下のように行っています。

    TextAsset[] expressions;//xx.exp.json.bytesのような各表情ファイルを取り込んでいます。
    AMotion[] motions_expressions;
    ・・・
    mainExpressionManager = new L2DMotionManager();//表情のモーション管理クラスの作成
    motions_expressions=new AMotion[expressions.Length];
    for (int i = 0; i < expressions.Length; i++) {
    motions_expressions[i] = Live2DMotion.loadMotion (expressions.bytes);
    }

    パースされていないので、読み込めていなかったわけですね。
    ご指摘頂いたSampleApp1やL2DExpressionMotion、他のトピック等を参考に、上のfor分の中身を以下のように変えてみました↓
    char[] buf = expressions [i].text.ToCharArray();
    Value json = Json.parseFromBytes (buf);
    TextAsset buf2=(Resources.Load(json.toString())as TextAsset);
    motions_expressions[i] = Live2DMotion.loadMotion (buf2.bytes);
    が、エラーが出てモデルが表示されませんでした。自分は恥ずかしながらパース処理をいまいち理解できていないようです…
    パースはどう行えばいいのか教えていただけると助かります><
  • Live2D Unity SDKのプロジェクトの何をベースにカスタムしてますか?
    (Simple、Motion、SampleApp1プロジェクトなど)

    Motionプロジェクトをベースにしてるのであれば、frameworkのソースを入れてる感じでしょうか?
    プロジェクトがわかれば、こちらとしても具体的なソースで解説できると思います。

    とりあえず、掲示して頂いたソースだと、jsonパース後にAMotionへの値セットが足りないかと。
    具体的にはL2DExpressionMotion.csの82行目のloadJson()部分です。
    (82~150行目でJsonパース後に、JsonからロードしたパラメーターIDや値をListにセットしてAMotionに渡してる)
  • ベースにしているのは、確かsimpleだったと思います。パスではなくbytesでファイル読み込みしているやつです。ライブラリとframeworkをコピーして作業しています。
    教えて頂いたコードを参考に、
    motions_expressions[i] = L2DExpressionMotion.loadJson(buf);
    としたら、無事ロードができました!!
    表情もちゃんと切り替わって感動です。
    お忙しい中、適切な回答を頂き本当にありがとうございました(__
    とても勉強になりました!
コメントするにはサインインまたは登録して下さい。