public override void OnStateUpdate(UnityEngine.Animator animator, UnityEngine.AnimatorStateInfo stateInfo, int layerIndex) { //DataEventSource.Instance.DispatcherEvent("onStateExit", stateInfo); if (stateInfo.normalizedTime >= 0.95f) { if (!_isEnd) { _isEnd = true; _enity.SetProperty("actinStateEnd", stateInfo); animator.Play("idle01"); } } }
public bool SampleAnimation(UnityEngine.Animation animation) { if(animation == null) { return false; } SkinnedMeshRenderer skinnedMeshRenderer = animation.GetComponentInChildren<SkinnedMeshRenderer>(); if(skinnedMeshRenderer == null) { return false; } Mesh mesh = skinnedMeshRenderer.sharedMesh; if(mesh == null) { return false; } this.animation = new MeshAnimation(); this.animation.triangles = mesh.triangles; this.animation.normals = mesh.normals; this.animation.uv = mesh.uv; List<string> clipNames = new List<string>(); foreach(AnimationState animationState in animation) { clipNames.Add(animationState.name); } Mesh bakedMesh = new Mesh(); int numClips = clipNames.Count; for(int i = 0; i < numClips; ++i) { string clipName = clipNames[i]; if(this.animation.clips.ContainsKey(clipName)) { Debug.LogError("Repeated name of AnimationClip:" + clipName); continue; } animation.Play(clipName); { AnimationState animationState = animation[clipName]; Clip clip = new Clip(); clip.wrapMode = animationState.wrapMode; this.animation.clips.Add(clipName, clip); float length = animationState.length; float step = 1.0f / fps; for(float time = 0; time < length; time += step) { Keyframe keyframe = new Keyframe(); clip.keyframes.Add(keyframe); animationState.time = time; animation.Sample(); skinnedMeshRenderer.BakeMesh(bakedMesh); keyframe.vertices = bakedMesh.vertices; } } animation.Stop(clipName); } return true; }
public override void OnStateUpdate(UnityEngine.Animator animator, UnityEngine.AnimatorStateInfo stateInfo, int layerIndex) { foreach (KeyValuePair<string, float> t in _enityData.DictActionTime) { if (stateInfo.normalizedTime > t.Value) { if (_listNode.Contains(t.Key) == false) { _listNode.Add(t.Key); _enity.SetProperty("normalizedTime", t.Key); } } } if (stateInfo.normalizedTime >= 0.95f + transitionTime) { if (!_isEnd) { //GameInput.Log("state to the end " + stateInfo.normalizedTime); _isEnd = true; animator.SetBool("isAttack", false); animator.Play("idle01"); _enity.SetProperty("actinStateEnd", stateInfo); } } /* if (stateInfo.normalizedTime > 0.3f)//播放特效时间节点 { if (!_listNode.Contains("effectNode")) { _enity.SetProperty("normalizedTime", "effectNode"); _listNode.Add("effectNode"); } } if (stateInfo.normalizedTime > 0.6f)//播放受击动作时间节点 { if (!_listNode.Contains("beAtkNode")) { _enity.SetProperty("normalizedTime", "beAtkNode"); _listNode.Add("beAtkNode"); } }*/ }