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

■このコミュニティの今後について
このコミュニティ(forum.live2d.com)につきましては、しばらくの間新コミュニティと並行して運営しますが、2022年内を目処に閉鎖する予定です。
閉鎖時期や内容については決定次第お知らせいたします。
海外向けコミュニティについては変更ございません。
【各最新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ウインドウから指定

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