ログイン
カテゴリ
ディスカッション
アクティビティ
ヘルプ
人気記事...
ホーム
›
一般
一時停止のやり方
tac240
December 2019
で
一般
初挑戦ながらゲームを作ろうと、UnityにてSDKのMotionからアニメーションを再生していろいろ試しているのですが
一時停止機能はないのでしょうか?
クリックするたびに一時停止→再生を繰り返してちょっとずつアニメーションを進めたいのですが
やり方が分からず困っています。
初歩的な質問だったらすみません
タグ付けされた:
質問
0
コメント
y_a_s_(Dev Staff)
December 2019
@tac240
さん
MotionとはCubismMotionControllerのことでしょうか?
そうであれば、再生したアニメーションを一時停止する機能はございません。
CubismMotionControllerはUnityのPlayable APIを利用してAnimationClipを再生しているため、
ユーザ側でカスタマイズすることで実現が可能だと考えられます。
0
tac240
January 2020
解決したので、CubismSDK使っていない、Unity側の話になってしまいますが一応記載します。
Unityでアニメーションを再生する方法は現在のところ
Animator Controllerを使う、Simple Animationを使う、Timelineを使う のようなのですが
小規模のそんなに数が多くないアニメーションだとAnimator Controllerは多機能すぎて複雑
というか素人の自分にはさっぱりわからぬだったのでSimple Animationを使いました。
Unity公式がだしてるアセット?になりまして、詳しくは検索どうぞ。
Simple Animationと、Unityの当たり判定に使われるCollider、
アニメーションの停止位置を調べるのに使うnormalizedTime、
Collider上にマウス持ってくと勝手に反応してくれるOnMouseDown()
この4つを使って
using UnityEngine;
//クラス名は適当です
public class AnimationManager : MonoBehaviour {
[SerializeField]
private SimpleAnimation _simpleAnimation;
//再生開始位置の初期値です。normalizedTimeは0~1で小数点なのでfloatです
float m_normalizedTime = 0f;
public void OnMouseDown(){
//再生開始位置をセットする。初クリックの時は0からですね。マウス押したとき呼ばれます。
//Defaultって名前のアニメーションの、再生開始位置がm_normalizedTime(停止した位置)からになります。
_simpleAnimation.GetState("Default").normalizedTime = m_normalizedTime;
_simpleAnimation.Play("Default");
}
public void OnMouseUp(){
//Stopする前にアニメ停止位置を保存する。マウス離したときに呼ばれます。Stopした後にこれ書くと常に0になっちゃうので注意
m_normalizedTime = _simpleAnimation.GetState("Default").normalizedTime;
_simpleAnimation.Stop("Default");
}
}
詳しい手順は省いているので真似する時は上の4つ検索して調べてください。
これとcolliderをLive2Dで作ったオブジェクトにくっつけてあげると、
colliderの範囲内でマウス押したときPlayで再生されて、マウス離した瞬間一時停止されます。
そしてもう一度マウス押すと続きから再生。
これをベースにいろいろいじると大体のことはできそうな気がします。
素人の考えた方法なのでもっといいのがあるかもしれませんが、同じ悩みの人の参考になれば幸いです。
0
コメントするには
サインイン
または
登録
して下さい。
コメント
MotionとはCubismMotionControllerのことでしょうか?
そうであれば、再生したアニメーションを一時停止する機能はございません。
CubismMotionControllerはUnityのPlayable APIを利用してAnimationClipを再生しているため、
ユーザ側でカスタマイズすることで実現が可能だと考えられます。
Unityでアニメーションを再生する方法は現在のところ
Animator Controllerを使う、Simple Animationを使う、Timelineを使う のようなのですが
小規模のそんなに数が多くないアニメーションだとAnimator Controllerは多機能すぎて複雑
というか素人の自分にはさっぱりわからぬだったのでSimple Animationを使いました。
Unity公式がだしてるアセット?になりまして、詳しくは検索どうぞ。
Simple Animationと、Unityの当たり判定に使われるCollider、
アニメーションの停止位置を調べるのに使うnormalizedTime、
Collider上にマウス持ってくと勝手に反応してくれるOnMouseDown()
この4つを使って
using UnityEngine;
//クラス名は適当です
public class AnimationManager : MonoBehaviour {
[SerializeField]
private SimpleAnimation _simpleAnimation;
//再生開始位置の初期値です。normalizedTimeは0~1で小数点なのでfloatです
float m_normalizedTime = 0f;
public void OnMouseDown(){
//再生開始位置をセットする。初クリックの時は0からですね。マウス押したとき呼ばれます。
//Defaultって名前のアニメーションの、再生開始位置がm_normalizedTime(停止した位置)からになります。
_simpleAnimation.GetState("Default").normalizedTime = m_normalizedTime;
_simpleAnimation.Play("Default");
}
public void OnMouseUp(){
//Stopする前にアニメ停止位置を保存する。マウス離したときに呼ばれます。Stopした後にこれ書くと常に0になっちゃうので注意
m_normalizedTime = _simpleAnimation.GetState("Default").normalizedTime;
_simpleAnimation.Stop("Default");
}
}
詳しい手順は省いているので真似する時は上の4つ検索して調べてください。
これとcolliderをLive2Dで作ったオブジェクトにくっつけてあげると、
colliderの範囲内でマウス押したときPlayで再生されて、マウス離した瞬間一時停止されます。
そしてもう一度マウス押すと続きから再生。
これをベースにいろいろいじると大体のことはできそうな気がします。
素人の考えた方法なのでもっといいのがあるかもしれませんが、同じ悩みの人の参考になれば幸いです。