★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
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を引数として指定する方法を教えていただきたいです。
初歩的な質問だと思いますが、どうぞよろしくお願いいたします。
以前、同じような内容が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を引数として指定する方法を教えていただきたいです。
初歩的な質問だと思いますが、どうぞよろしくお願いいたします。
0
コメント
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ウインドウから指定