public void PlayBlend(string clipName, BlendDirection direction = BlendDirection.Down, int fadeFrame = 0) { if (animationClips == null) { return; } if (string.IsNullOrEmpty(clipName)) { mBlendAnimationClip = null; return; } if (mBlendAnimationClip != null && mBlendAnimationClip.Name == clipName) { return; } blendDirection = direction; mBlendAnimationClip = animationClips.Find(x => x.Name == clipName); if (mBlendAnimationClip != null) { mBlendAnimationClip.Reset(this, 0); mBlendBeginAt = mBlendAnimationClip.CurrentFrame; mBlendFadeFrame = Mathf.Clamp(fadeFrame, 0, mBlendAnimationClip.FrameCount / 2); mBlendEnd = false; mBlendBegin = true; } }
public GpuInstancedAnimationClip Clone() { GpuInstancedAnimationClip clip = new GpuInstancedAnimationClip(Name, StartFrame, EndFrame, FrameCount, wrapMode); clip.Reset(null, 0); return(clip); }
public void Play(string clipName, int offsetFrame = 0, int fadeFrame = 0) { if (animationClips == null) { return; } if (mCurrentAnimationClip != null && mCurrentAnimationClip.Name == clipName) { if (mCurrentAnimationClip.CurrentFrame == 0 && mCurrentAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { mCurrentAnimationClip.Reset(this, offsetFrame); mFadeFrame = Mathf.Clamp(fadeFrame, 0, mCurrentAnimationClip.FrameCount); mFadeEnd = false; mFadeBeginAt = mCurrentAnimationClip.CurrentFrame; } return; } mPreviousAnimationClip = mCurrentAnimationClip; mCurrentAnimationClip = animationClips.Find((x) => x.Name == clipName); PlayBlend(null); if (mCurrentAnimationClip != null) { mCurrentAnimationClip.Reset(this, offsetFrame); mFadeFrame = Mathf.Clamp(fadeFrame, 0, mCurrentAnimationClip.FrameCount / 2); mFadeBeginAt = mCurrentAnimationClip.CurrentFrame; mFadeBegin = true; mFadeEnd = false; } }
void OnAnimationClipBegin(GpuInstancedAnimationClip clip) { if (clip != null && clip.Name == "attack01") { if (mEffect == null) { mEffect = Instantiate(Prefab) as GameObject; mEffect.SetActive(true); } if (mEffect.activeSelf == false) { mEffect.SetActive(true); } } }
// Update is called once per frame public void OnUpdate() { if (mCurrentAnimationClip != null) { if (mCurrentAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { if (mCurrentAnimationClip.CurrentFrame >= mCurrentAnimationClip.FrameCount) { if (mBlendAnimationClip == null) { Play(defaultAnimationClip, 0, mFadeFrame); } } } mCurrentAnimationClip.Update(); int currentFrame = mCurrentAnimationClip.RealFrame; int previousFrame = 0; if (mPreviousAnimationClip != null) { mPreviousAnimationClip.Update(); previousFrame = mPreviousAnimationClip.RealFrame; } mFadeStrength = 1; if (mCurrentAnimationClip != null && mFadeFrame > 0) { if (mCurrentAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { if (mBlendAnimationClip != null && mFadeEnd == false && mCurrentAnimationClip.CurrentFrame + mFadeFrame >= mCurrentAnimationClip.FrameCount - 1) { mFadeEnd = true; mFadeBeginAt = mCurrentAnimationClip.CurrentFrame; mPreviousAnimationClip = mBlendAnimationClip; } } int offsetFrame = mCurrentAnimationClip.CurrentFrame - mFadeBeginAt; if (mFadeFrame > 0 && (mFadeBegin || mFadeEnd) && offsetFrame <= mFadeFrame) { mFadeStrength = offsetFrame * 1f / mFadeFrame; if (mFadeBegin) { if (offsetFrame >= mFadeFrame) { mFadeBegin = false; } } if (mFadeEnd) { mFadeStrength = 1 - mFadeStrength; } } if (mCurrentAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { if (mCurrentAnimationClip.CurrentFrame >= mCurrentAnimationClip.FrameCount - 1) { if (mBlendAnimationClip != null) { mCurrentAnimationClip = mBlendAnimationClip; mBlendAnimationClip = null; } mPreviousAnimationClip = null; mFadeEnd = false; } } } else { mFadeEnd = false; mFadeBeginAt = 0; } int blendFrame = 0; mBlendFadeStrength = 1; if (mBlendAnimationClip != null) { if (mBlendAnimationClip != mCurrentAnimationClip && mBlendAnimationClip != mPreviousAnimationClip) { mBlendAnimationClip.Update(); } blendFrame = mBlendAnimationClip.RealFrame; if (mBlendAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { if (mBlendEnd == false && mBlendAnimationClip.CurrentFrame + mBlendFadeFrame >= mBlendAnimationClip.FrameCount - 1) { mBlendEnd = true; mBlendBeginAt = mBlendAnimationClip.CurrentFrame; } } int offsetFrame = mBlendAnimationClip.CurrentFrame - mBlendBeginAt; if (mBlendFadeFrame > 0 && (mBlendBegin || mBlendEnd) && offsetFrame <= mBlendFadeFrame) { mBlendFadeStrength = offsetFrame * 1f / mBlendFadeFrame; if (mBlendBegin) { if (offsetFrame >= mBlendFadeFrame) { mBlendBegin = false; } } if (mBlendEnd) { mBlendFadeStrength = 1 - mBlendFadeStrength; } } if (mBlendAnimationClip.wrapMode == GpuInstancedAnimationClip.WrapMode.Once) { if (mBlendAnimationClip.CurrentFrame >= mBlendAnimationClip.FrameCount - 1) { mBlendAnimationClip = null; mBlendEnd = false; } } } materialPropertyBlock.SetInt("_CurrentFrame", currentFrame); materialPropertyBlock.SetInt("_PreviousFrame", previousFrame); materialPropertyBlock.SetFloat("_FadeStrength", mFadeStrength); materialPropertyBlock.SetInt("_BlendFrame", blendFrame); materialPropertyBlock.SetFloat("_BlendFadeStrength", mBlendFadeStrength); materialPropertyBlock.SetFloat("_BlendDirection", (int)blendDirection); } if (isCulling == false) { Graphics.DrawMesh(mesh, transform.localToWorldMatrix, material, mLayer, null, 0, materialPropertyBlock); } }
public void OnAnimationClipEnd(GpuInstancedAnimationClip clip) { onAnimationClipEnd?.Invoke(clip); }
public void OnAnimationClipUpdate(GpuInstancedAnimationClip clip) { onAnimationClipUpdate?.Invoke(clip); }
public void OnAnimationClipBegin(GpuInstancedAnimationClip clip) { onAnimationClipBegin?.Invoke(clip); }