新しいLive2D公式コミュニティ(日本向け)が公開されました!
ぜひご利用ください!
Live2D公式コミュニティ

■このコミュニティの今後について
このコミュニティ(forum.live2d.com)につきましては、しばらくの間新コミュニティと並行して運営しますが、2023年夏ごろを目処に方針を決定する予定です。
(2022/12/27追記 2022年内を目処に閉鎖 から変更しております)
内容については決定次第お知らせいたします。
海外向けコミュニティについては変更ございません。
Live2Dに関するユーザーのみなさま同士の交流・ご質問・不具合の報告・提案・要望などについて是非お寄せください。
※Live2D公式スタッフからの発言や回答については確約できないことを予めご了承ください。

Live2D ヘルプ

Cubism Editorダウンロード / 動作環境
Cubism SDKダウンロード / 対応表
Cubism 製品利用ライセンス(SDK含)

Cubism 製品のライセンスについてのお問い合わせはこちら
nizima 及び nizima 製品についてのお問い合わせはこちら
【各最新OSの対応状況について】
Cubism Editorは 4.1.02 正式版以降でWindows 11 及び macOS Monterey に対応しております。ぜひ最新版をご利用ください。
※macOSをお使いの方でOSアップデートする際は必ずCubism Editorのライセンスを解除してください。
Cubism EditorをインストールしているmacOSをアップグレードしたい
Cubism SDKについては各SDKのREADMEまたはNOTICEをご確認ください。

【Mac各機種への対応状況について】
現在、Cubism EditorはApple M1チップ搭載機種には対応しておりません。
詳細は 動作環境 をご参照ください。
関連するお問い合わせへの対応はこの文章をもって代えさせていただきます。
Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

Unity SDKチュートリアル「外部のスクリプトなどからMotionPlayer.PlayMotion()を呼び出し、引数に再生したいAnimationClipを渡す」の引数の記述方法について

 Live2D初学者です。よろしくお願いいたします。
 以前、同じような内容がCubism 3 SDKへの質問として投げられていますが、未解決のままのようで、Cubism 4 SDKについても同様の問題が起きてしまうので改めて質問いたします。

表題にもある通り、SDKチュートリアルの「外部スクリプトなどからー」において、作成したMotionPlayer.PlayMotion()の引数とするべきAnimationClipの記述方法がわからず非常に困っております。
※SDK3の返信として記述されていた, priority: CubismMotionPriority.PriorityForceの追記では解決しません。
https://forum.live2d.com/discussion/2138/

【前提条件】
・チュートリアルにある内容は実装 / 動作確認済み (ボタン配置による実装についても確認済み)
https://docs.live2d.com/cubism-sdk-tutorials/motion-unity-ow/
・Live2DモデルのサンプルとしてHaruを使用 (今回はharu_g_m01のモーションを使用)
・呼び出し用の外部スクリプトとしてMotionTest.csを用意 (アタッチ済み)

【呼び出されるスクリプト】※チュートリアルより
MotionPlayer.cs 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
using Live2D.Cubism.Framework.Motion;
using UnityEngine;

public class MotionPlayer : MonoBehaviour
{
CubismMotionController _motionController;
private void Start()
{
_motionController = GetComponent();
}
public void PlayMotion(AnimationClip animation)
{
if ((_motionController == null) || (animation == null))
{
return;
}
_motionController.PlayAnimation(animation, isLoop: false);
}
}

【呼び出し用の外部スクリプト】※Aキーを押すとモーションする形を想定
MotionTest.cs
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
using System.Collections;
using Live2D.Cubism.Framework.Motion;
using UnityEngine;

public class MotionTest : MonoBehaviour
{
MotionPlayer _motionPlayer;
private void Start()
{
_motionPlayer = GetComponent();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
AnimationClip anim = new AnimationClip();
anim.name = "haru_g_m01";       //モデルHaruのモーション名を指定
_motionPlayer.PlayMotion(anim);
}
}
}

【実行結果】
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
CubismMotionController : Not found motion from CubismFadeMotionList.

※当然ながら型が違う、コンテクストに含まれない等の理由で
・MotionPlayer.PlayMotion(”haru_g_m06”)
・MotionPlayer.PlayMotion(haru_g_m06)
といった直接代入の方法もとれません。

Inspectorウィンドウを使用することなく、スクリプトのみでAnimationClipを引数として指定する方法を教えていただきたいです。
初歩的な質問だと思いますが、どうぞよろしくお願いいたします。
タグ付けされた:

コメント

  • @ukinikay さん

    Unityは、ランタイムで生成したAnimationClipをAnimatorやPlayable APIで再生させることはできません。
    Cubism SDK for Unityの一部コンポーネントはこれらの機能を利用しているため、非対応となっております。
    https://docs.live2d.com/cubism-sdk-manual/faq/#q10

    あらかじめ生成したAnimationClipを使用する、またはUnityのAnimationコンポーネントを利用して再生することで対応できます。
  • ご返答ありがとうございます。
    こちらの使用方法に対する認識に問題があったということで了解いたしました。
    Unity SDKの機能の範疇で同様の結果が得られるように改修いたします。


    以下、備忘録として呼び出し用スクリプト(コンポーネント)をUnityのGUIから使用する形で作成した例を記述しておきます。

    【呼び出し用の外部スクリプト】※Aキーを押すとモーションする形を想定
    MotionTest.cs (任意のgameObjectにアタッチして使用)
    ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
    ...

    public class MotionTest : MonoBehaviour
    {
    [SerializeField]
    public AnimationClip anim ;
    private MotionPlayer _motionPlayer;

    ...
    private void Update()
    {
    if (Input.GetKeyDown(KeyCode.A))
    {
    _motionPlayer = GetComponent();
    _motionPlayer.PlayMotion(anim);
    }
    }
    }

    ※animに、あらかじめ生成したAnimationClipをInspectorウインドウから指定

コメントするにはサインインまたは登録して下さい。