12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * Copyright(c) Live2D Inc. All rights reserved.
- *
- * Use of this source code is governed by the Live2D Open Software license
- * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
- */
- using UnityEngine;
- using UnityEngine.Animations;
- using UnityEngine.Playables;
- namespace Live2D.Cubism.Framework.Motion
- {
- /// <summary>
- /// Cubism motion state.
- /// </summary>
- public class CubismMotionState
- {
- #region Variable
- /// <summary>
- /// Cubism motion state clip.
- /// </summary>
- public AnimationClip Clip { get; private set; }
- /// <summary>
- /// Animation clip mixer.
- /// </summary>
- public AnimationMixerPlayable ClipMixer { get; private set; }
- /// <summary>
- /// Animation clip playable.
- /// </summary>
- public AnimationClipPlayable ClipPlayable { get; private set; }
- #endregion
- /// <summary>
- /// Create motion state.
- /// </summary>
- /// <param name="playableGraph">Playable graph.</param>
- /// <param name="clip">Animation clip.</param>
- /// <param name="isLoop">Animation is loop.</param>
- /// <param name="speed">Animation speed.</param>
- public static CubismMotionState CreateCubismMotionState(PlayableGraph playableGraph, AnimationClip clip, bool isLoop = true, float speed = 1.0f)
- {
- var ret = new CubismMotionState();
- ret.Clip = clip;
- // Create animation clip mixer.
- ret.ClipMixer = AnimationMixerPlayable.Create(playableGraph, 2);
- ret.ClipMixer.SetSpeed(speed);
- // Connect AnimationClip Playable
- ret.ClipPlayable = AnimationClipPlayable.Create(playableGraph, ret.Clip);
- if(!isLoop)
- {
- ret.ClipPlayable.SetDuration(clip.length - 0.0001f);
- }
- ret.ClipMixer.ConnectInput(0, ret.ClipPlayable, 0);
- ret.ClipMixer.SetInputWeight(0, 1.0f);
- return ret;
- }
- /// <summary>
- /// Connect motion state clip mixer.
- /// </summary>
- /// <param name="clipMixer">.</param>
- public void ConnectClipMixer(AnimationMixerPlayable clipMixer)
- {
- var lastInput = ClipMixer.GetInputCount() - 1;
- #if UNITY_2018_2_OR_NEWER
- ClipMixer.DisconnectInput(lastInput);
- #else
- ClipMixer.GetGraph().Disconnect(ClipMixer, lastInput);
- #endif
- ClipMixer.ConnectInput(lastInput, clipMixer, 0);
- ClipMixer.SetInputWeight(lastInput, 1.0f);
- }
- }
- }
|