/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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); }