День добрый. Знатоки , прошу помощи... С горем пополам реализовал полупрозрачность окружения, которое мешает обзору. Делаю рпг с видом сверху. Я пускаю луч из камеры в игрока, если луч попадает в тег Environment - скрывает его(меняет материал на прозрачный) и наоборот. Работает практически нормально... Иногда получаются баги, если например персонаж идет по прямо на право вдоль 3 деревьев которые плотно находятся друг у друга, соответственно, луч попадает на 1 дерево, а потом НЕ прекращая попадать на тег Environment попадает на 2 дерево, в итоге скрывает 2 , и не ресетает 1 дерево и тд... причем то срабатывает, то нет... Я в замешательстве, кто может помочь ? Заранее благодарю.
Код на Environment:
Код
public class VisibleInvisible : MonoBehaviour
{
[SerializeField] Material standard;
[SerializeField] Material invisible;
public void Visible()
{
MeshRenderer thisRenderer = GetComponent<MeshRenderer>();
thisRenderer.material = standard;
}
public void Invisible()
{
MeshRenderer thisRenderer = GetComponent<MeshRenderer>();
thisRenderer.material = invisible;
}
}
И , соответственно код с бросанием луча:
Код
public class HideOtherMaterial : MonoBehaviour
{
public GameObject prev = null;
public Camera Maincamera;
public GameObject player;
public void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
}
public void Update()
{
RaycastHit hit;
Ray ray = new Ray(Maincamera.transform.position, player.transform.position - Maincamera.transform.position);
Debug.DrawRay(Maincamera.transform.position, player.transform.position - Maincamera.transform.position, Color.green);
if (Physics.Raycast(ray, out hit, 10000))
{
GameObject go = hit.collider.gameObject;
if (go.tag == "Environment")
{
if (prev != hit.collider.gameObject)
{
go.GetComponent<VisibleInvisible>().Invisible();
if (prev != null)
{
go.GetComponent<VisibleInvisible>().Visible();
}
prev = hit.collider.gameObject;
}
}
else Reset();
}
else Reset();
}
public void Reset()
{
if (prev != null)
{
prev.GetComponent<VisibleInvisible>().Visible();
prev = null;
}
}
}