Added blood effect & hurt anim controller
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System;
|
||||
|
||||
public class BFX_ShaderProperies : MonoBehaviour {
|
||||
|
||||
public BFX_BloodSettings BloodSettings;
|
||||
|
||||
public AnimationCurve FloatCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
|
||||
public float GraphTimeMultiplier = 1, GraphIntensityMultiplier = 1;
|
||||
public float TimeDelay = 0;
|
||||
|
||||
private bool canUpdate;
|
||||
bool isFrized;
|
||||
private float startTime;
|
||||
|
||||
private int cutoutPropertyID;
|
||||
int forwardDirPropertyID;
|
||||
float timeLapsed;
|
||||
|
||||
private MaterialPropertyBlock props;
|
||||
private Renderer rend;
|
||||
|
||||
public event Action OnAnimationFinished;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
props = new MaterialPropertyBlock();
|
||||
rend = GetComponent<Renderer>();
|
||||
|
||||
cutoutPropertyID = Shader.PropertyToID("_Cutout");
|
||||
forwardDirPropertyID = Shader.PropertyToID("_DecalForwardDir");
|
||||
|
||||
OnEnable();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
startTime = Time.time + TimeDelay;
|
||||
canUpdate = true;
|
||||
|
||||
GetComponent<Renderer>().enabled = true;
|
||||
|
||||
rend.GetPropertyBlock(props);
|
||||
|
||||
var eval = FloatCurve.Evaluate(0) * GraphIntensityMultiplier;
|
||||
props.SetFloat(cutoutPropertyID, eval);
|
||||
props.SetVector(forwardDirPropertyID, transform.up);
|
||||
rend.SetPropertyBlock(props);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
rend.GetPropertyBlock(props);
|
||||
|
||||
var eval = FloatCurve.Evaluate(0) * GraphIntensityMultiplier;
|
||||
props.SetFloat(cutoutPropertyID, eval);
|
||||
|
||||
rend.SetPropertyBlock(props);
|
||||
timeLapsed = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!canUpdate) return;
|
||||
|
||||
rend.GetPropertyBlock(props);
|
||||
|
||||
var deltaTime = BloodSettings == null ? Time.deltaTime : Time.deltaTime * BloodSettings.AnimationSpeed;
|
||||
if (BloodSettings != null && BloodSettings.FreezeDecalDisappearance && (timeLapsed / GraphTimeMultiplier) > 0.3f) { }
|
||||
else timeLapsed += deltaTime;
|
||||
|
||||
var eval = FloatCurve.Evaluate(timeLapsed / GraphTimeMultiplier) * GraphIntensityMultiplier;
|
||||
props.SetFloat(cutoutPropertyID, eval);
|
||||
|
||||
if (BloodSettings != null) props.SetFloat("_LightIntencity", Mathf.Clamp(BloodSettings.LightIntensityMultiplier, 0.01f, 1f));
|
||||
|
||||
if (timeLapsed >= GraphTimeMultiplier)
|
||||
{
|
||||
canUpdate = false;
|
||||
OnAnimationFinished?.Invoke();
|
||||
|
||||
}
|
||||
props.SetVector(forwardDirPropertyID, transform.up);
|
||||
rend.SetPropertyBlock(props);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user