123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class BFX_ManualAnimationUpdate : MonoBehaviour
- {
- public BFX_BloodSettings BloodSettings;
- public AnimationCurve AnimationSpeed = AnimationCurve.Linear(0, 0, 1, 1);
- public float FramesCount = 99;
- public float TimeLimit = 3;
- public float OffsetFrames = 0;
- private float currentTime;
- Renderer rend;
- private MaterialPropertyBlock propertyBlock;
- void Awake()
- {
- if (propertyBlock == null)
- propertyBlock = new MaterialPropertyBlock();
- rend = GetComponent<Renderer>();
- }
- void OnEnable()
- {
- rend.enabled = true;
- rend.GetPropertyBlock(propertyBlock);
- propertyBlock.SetFloat("_UseCustomTime", 1.0f);
- propertyBlock.SetFloat("_TimeInFrames", 0.0f);
- rend.SetPropertyBlock(propertyBlock);
- currentTime = 0;
- }
- void Update()
- {
- currentTime += Time.deltaTime * BloodSettings.AnimationSpeed;
- if (currentTime / TimeLimit > 1.0)
- {
- if (rend.enabled) rend.enabled = false;
- return;
- }
- var currentFrameTime = AnimationSpeed.Evaluate(currentTime / TimeLimit);
- currentFrameTime = currentFrameTime * FramesCount + OffsetFrames + 1.1f;
- float timeInFrames = (Mathf.Ceil(-currentFrameTime) / (FramesCount + 1)) + (1.0f / (FramesCount + 1));
- rend.GetPropertyBlock(propertyBlock);
- propertyBlock.SetFloat("_LightIntencity", Mathf.Clamp(BloodSettings.LightIntensityMultiplier, 0.01f, 1f));
- propertyBlock.SetFloat("_TimeInFrames", timeInFrames);
- rend.SetPropertyBlock(propertyBlock);
- }
- }
|