Added blood effect & hurt anim controller
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BFX_BloodDecalLayers : MonoBehaviour
|
||||
{
|
||||
public LayerMask DecalLayers = 1;
|
||||
public DecalLayersProperty DecalRenderingMode = DecalLayersProperty.DrawToSelectedLayers;
|
||||
public DepthMode LayerDepthResoulution = DepthMode.FullScreen;
|
||||
|
||||
DepthTextureMode defaultMode;
|
||||
RenderTexture rt;
|
||||
Camera depthCamera;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
var currentCam = GetComponent<Camera>();
|
||||
defaultMode = currentCam.depthTextureMode;
|
||||
if (currentCam.renderingPath == RenderingPath.Forward)
|
||||
{
|
||||
currentCam.depthTextureMode |= DepthTextureMode.Depth;
|
||||
}
|
||||
|
||||
var go = new GameObject("DecalLayersCamera");
|
||||
go.transform.parent = currentCam.transform;
|
||||
go.transform.localPosition = Vector3.zero;
|
||||
go.transform.localRotation = Quaternion.identity;
|
||||
depthCamera = go.AddComponent<Camera>();
|
||||
depthCamera.CopyFrom(currentCam);
|
||||
depthCamera.renderingPath = RenderingPath.Forward;
|
||||
depthCamera.depth = currentCam.depth - 1;
|
||||
depthCamera.cullingMask = DecalLayers;
|
||||
|
||||
CreateDepthTexture();
|
||||
depthCamera.targetTexture = rt;
|
||||
Shader.SetGlobalTexture("_LayerDecalDepthTexture", rt);
|
||||
Shader.EnableKeyword("USE_CUSTOM_DECAL_LAYERS");
|
||||
|
||||
if (DecalRenderingMode == DecalLayersProperty.IgnoreSelectedLayers) Shader.EnableKeyword("USE_CUSTOM_DECAL_LAYERS_IGNORE_MODE");
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
GetComponent<Camera>().depthTextureMode = defaultMode;
|
||||
RenderTexture.ReleaseTemporary(rt);
|
||||
Shader.DisableKeyword("USE_CUSTOM_DECAL_LAYERS");
|
||||
if (DecalRenderingMode == DecalLayersProperty.IgnoreSelectedLayers) Shader.DisableKeyword("USE_CUSTOM_DECAL_LAYERS_IGNORE_MODE");
|
||||
}
|
||||
|
||||
void CreateDepthTexture()
|
||||
{
|
||||
switch (LayerDepthResoulution)
|
||||
{
|
||||
case DepthMode.FullScreen:
|
||||
rt = RenderTexture.GetTemporary(Screen.width, Screen.height, 24, RenderTextureFormat.Depth);
|
||||
break;
|
||||
case DepthMode.HalfScreen:
|
||||
rt = RenderTexture.GetTemporary((int)(Screen.width * 0.5f), (int)(Screen.height * 0.5f), 24, RenderTextureFormat.Depth);
|
||||
break;
|
||||
case DepthMode.QuarterScreen:
|
||||
rt = RenderTexture.GetTemporary((int)(Screen.width * 0.25f), (int)(Screen.height * 0.25f), 24, RenderTextureFormat.Depth);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public enum DecalLayersProperty
|
||||
{
|
||||
DrawToSelectedLayers,
|
||||
IgnoreSelectedLayers
|
||||
}
|
||||
|
||||
public enum DepthMode
|
||||
{
|
||||
FullScreen,
|
||||
HalfScreen,
|
||||
QuarterScreen
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user