Update
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace OnlyScove.Scripts
|
||||
{
|
||||
[System.Serializable]
|
||||
public class CameraOcclusionTransparency
|
||||
{
|
||||
[Header("Occlusion Transparency")]
|
||||
[SerializeField] private bool useTransparency = true;
|
||||
[SerializeField] private LayerMask transparencyLayers;
|
||||
[SerializeField] private float fadeAlpha = 0.3f;
|
||||
|
||||
private Renderer _lastFadedRenderer;
|
||||
private Color _originalColor;
|
||||
|
||||
public void HandleTransparency(Transform cameraTransform, Vector3 focusPosition)
|
||||
{
|
||||
if (!useTransparency)
|
||||
{
|
||||
ResetLastRenderer();
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 direction = focusPosition - cameraTransform.position;
|
||||
float distanceToPlayer = direction.magnitude;
|
||||
RaycastHit hit;
|
||||
|
||||
if (Physics.Raycast(cameraTransform.position, direction.normalized, out hit, distanceToPlayer, transparencyLayers))
|
||||
{
|
||||
Renderer renderer = hit.collider.GetComponent<Renderer>();
|
||||
if (renderer != null && renderer != _lastFadedRenderer)
|
||||
{
|
||||
ResetLastRenderer();
|
||||
|
||||
_lastFadedRenderer = renderer;
|
||||
_originalColor = renderer.material.color;
|
||||
Color fadedColor = _originalColor;
|
||||
fadedColor.a = fadeAlpha;
|
||||
|
||||
renderer.material.color = fadedColor;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetLastRenderer();
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetLastRenderer()
|
||||
{
|
||||
if (_lastFadedRenderer != null)
|
||||
{
|
||||
_lastFadedRenderer.material.color = _originalColor;
|
||||
_lastFadedRenderer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user