Пример #1
0
        /// <summary>
        /// 重置
        /// </summary>
        public virtual void Reset()
        {
            foreach (GameObject gameObject in gameObjects)
            {
                UnityEngine.Object.Destroy(gameObject);
            }

            gameObjects.Clear();
            name = null;
            if (prefab != null)
            {
                UnityEngine.Object.Destroy(prefab);
                prefab = null;
            }
            if (animatorController != null)
            {
                UnityEngine.Object.Destroy(animatorController);
                animatorController = null;
            }
            if (fadeMotionList != null)
            {
                UnityEngine.Object.Destroy(fadeMotionList);
                fadeMotionList = null;
            }
            scale = 1f;
        }
Пример #2
0
        /// <summary>
        /// Called by Unity.
        /// </summary>
        private void OnEnable()
        {
            _cubismFadeMotionList = GetComponent <CubismFadeController>().CubismFadeMotionList;

            // Fail silently...
            if (_cubismFadeMotionList == null)
            {
                Debug.LogError("CubismMotionController : CubismFadeMotionList doesn't set in CubismFadeController.");
                return;
            }

            // Get Animator.
            var animator = GetComponent <Animator>();

            if (animator.runtimeAnimatorController != null)
            {
                Debug.LogWarning("Animator Controller was set in Animator component.");
                return;
            }

            _isActive = true;

            // Disabble animator's playablegrap.
            var graph = animator.playableGraph;

            if (graph.IsValid())
            {
                graph.GetOutput(0).SetWeight(0);
            }

            // Create Playable Graph.
            _playableGrap = PlayableGraph.Create("Playable Graph : " + this.FindCubismModel().name);
            _playableGrap.SetTimeUpdateMode(DirectorUpdateMode.GameTime);

            // Create Playable Output.
            _playableOutput = AnimationPlayableOutput.Create(_playableGrap, "Animation", animator);
            _playableOutput.SetWeight(1);

            // Create animation layer mixer.
            _layerMixer = AnimationLayerMixerPlayable.Create(_playableGrap, LayerCount);

            // Create cubism motion layers.
            if (_motionLayers == null)
            {
                LayerCount    = (LayerCount < 1) ? 1 : LayerCount;
                _motionLayers = new CubismMotionLayer[LayerCount];
            }

            for (var i = 0; i < LayerCount; ++i)
            {
                _motionLayers[i] = CubismMotionLayer.CreateCubismMotionLayer(_playableGrap, _cubismFadeMotionList);
                _motionLayers[i].AnimationEndHandler += OnAnimationEnd;
                _layerMixer.ConnectInput(i, _motionLayers[i].PlayableOutput, 0);
                _layerMixer.SetInputWeight(i, 1.0f);
            }

            // Set Playable Output.
            _playableOutput.SetSourcePlayable(_layerMixer);
        }
Пример #3
0
        /// <summary>
        /// 通过AssetBundle创建Live2D数据
        /// </summary>
        /// <param name="name"></param>
        /// <param name="assetBundle"></param>
        /// <returns></returns>
        public Live2DData CreateLive2DDataFromAssetBundle(string name, AssetBundle assetBundle)
        {
            Live2DData live2DData;

            if (_live2DDataDict.TryGetValue(name, out live2DData))
            {
                return(live2DData);
            }

            GameObject prefab = assetBundle.LoadAsset <GameObject>(name);

            if (prefab == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromAssetBundle Error. name:" + name);
                return(null);
            }

            string animatorControllerName = name;
            RuntimeAnimatorController animatorController = assetBundle.LoadAsset <RuntimeAnimatorController>(animatorControllerName);

            if (animatorController == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromAssetBundle Error. animatorControllerName:" + animatorControllerName);
                return(null);
            }

            string fadeMotionName = name + ".fadeMotionList";
            CubismFadeMotionList fadeMotionList = assetBundle.LoadAsset <CubismFadeMotionList>(fadeMotionName);

            if (fadeMotionList == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromAssetBundle Error. fadeMotionName:" + fadeMotionName);
                return(null);
            }

            live2DData             = CreateLive2DData(name, prefab, animatorController, fadeMotionList);
            _live2DDataDict[name]  = live2DData;
            _assetBundleDict[name] = assetBundle;

            return(live2DData);
        }
Пример #4
0
        /// <summary>
        /// 通过Resources创建Live2D数据
        /// </summary>
        /// <param name="name"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public Live2DData CreateLive2DDataFromResources(string name, string path)
        {
            Live2DData live2DData;

            if (_live2DDataDict.TryGetValue(name, out live2DData))
            {
                return(live2DData);
            }

            GameObject prefab = Resources.Load <GameObject>(path);

            if (prefab == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromResources Error. name:" + name + " path:" + path);
                return(null);
            }

            string animatorControllerName = "Animation/" + name;
            RuntimeAnimatorController animatorController = Resources.Load <RuntimeAnimatorController>(animatorControllerName);

            if (animatorController == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromAssetBundle Error. animatorControllerName:" + animatorControllerName);
                return(null);
            }

            string fadeMotionName = path + ".fadeMotionList";
            CubismFadeMotionList fadeMotionList = Resources.Load <CubismFadeMotionList>(fadeMotionName);

            if (fadeMotionList == null)
            {
                App.logManager.Error("Live2DManager.CreateLive2DDataFromResources Error. fadeMotionName:" + fadeMotionName);
                return(null);
            }

            live2DData            = CreateLive2DData(name, prefab, animatorController, fadeMotionList);
            _live2DDataDict[name] = live2DData;

            return(live2DData);
        }
        /// <summary>
        /// Initialize motion layer.
        /// </summary>
        /// <param name="playableGraph">.</param>
        /// <param name="fadeMotionList">.</param>
        /// <param name="layerWeight">.</param>
        public static CubismMotionLayer CreateCubismMotionLayer(PlayableGraph playableGraph, CubismFadeMotionList fadeMotionList, int layerIndex, float layerWeight = 1.0f)
        {
            var ret = new CubismMotionLayer();

            ret._playableGraph        = playableGraph;
            ret._cubismFadeMotionList = fadeMotionList;
            ret._layerIndex           = layerIndex;
            ret._layerWeight          = layerWeight;
            ret._isFinished           = true;
            ret._motionState          = null;
            ret._playingMotions       = new List <CubismFadePlayingMotion>();
            ret.PlayableOutput        = AnimationMixerPlayable.Create(playableGraph, 1);

            return(ret);
        }
Пример #6
0
        /// <summary>
        /// 创建Live2D数据
        /// </summary>
        /// <param name="name"></param>
        /// <param name="prefab"></param>
        /// <param name="animatorController"></param>
        /// <param name="fadeMotionList"></param>
        /// <returns></returns>
        public Live2DData CreateLive2DData(string name, GameObject prefab, RuntimeAnimatorController animatorController, CubismFadeMotionList fadeMotionList)
        {
            Live2DData live2DData = App.objectPoolManager.GetObject <Live2DData>();

            live2DData.name               = name;
            live2DData.prefab             = prefab;
            live2DData.animatorController = animatorController;
            live2DData.fadeMotionList     = fadeMotionList;
            live2DData.scale              = defaultScale;

            return(live2DData);
        }