59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|