Итак, я создаю стелс-игру, и хотя использование теневого буфера с камерой и получение пикселей сработало, оно не очень эффективно при освещении под определенными углами и чрезвычайно дорого в Unity.Я ищу способ определить, насколько освещен плеер через шейдер, однако я не программист и никогда не касался шейдеров.Я искал несколько месяцев, но я не нашел значения, и все просто используют триггеры, которые не действуют в этой игре.Я пытаюсь сделать что-то похожее на игры Thief2 или Splinter Cell.Я знаю о радиопередачах, однако они также недостаточно точны.
Итак, как я могу определить, насколько горит игрок, чтобы получить соответствующий градиент?
Вот код, который я использую для сбора света.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShadowBufferScript : MonoBehaviour {
public RenderTexture shadowBuffer;
Texture2D tex2d;
public float percentageHidden;
public float relativeLuminance;
void Start()
{
tex2d = new Texture2D (shadowBuffer.width, shadowBuffer.height, TextureFormat.RGB24, false);
}
void FixedUpdate ()
{
tex2d = new Texture2D (shadowBuffer.width, shadowBuffer.height, TextureFormat.RGB24, false);
RenderTexture.active = shadowBuffer;
tex2d.ReadPixels (new Rect (0, 0, shadowBuffer.width, shadowBuffer.height), 0, 0);
tex2d.Apply ();
Color shadowBufferColor = tex2d.GetPixel (0, 0);
relativeLuminance = shadowBufferColor.r * 0.2126f + shadowBufferColor.g * 0.7152f + shadowBufferColor.b * 0.0722f;
percentageHidden = relativeLuminance * 100;
}
}