Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Rendering;
- public class ObjectFader : MonoBehaviour
- {
- Transform myTransform;
- [SerializeField] Transform Player;
- [SerializeField] LayerMask ignoredLayer;
- class RendererProperties
- {
- public RendererProperties()
- { }
- public RendererProperties(Renderer r)
- {
- renderer = r;
- justAdded = true;
- }
- public Renderer renderer;
- public bool justAdded;
- }
- List<RendererProperties> faded_objects = new List<RendererProperties>();
- // Start is called before the first frame update
- void Start()
- {
- myTransform = transform;
- }
- private void FixedUpdate()
- {
- Vector3 dir = Player.position - myTransform.position;
- float distance = dir.magnitude;
- RaycastHit[] hits = Physics.RaycastAll(myTransform.position, dir.normalized, distance, ~ignoredLayer);
- foreach (var i in faded_objects)
- {
- i.justAdded = false;
- }
- if (hits.Length > 0)
- {
- FadeObjects(hits);
- }
- RestoreObjects();
- Debug.DrawRay(myTransform.position, dir, Color.red);
- }
- void FadeObjects(RaycastHit[] hits)
- {
- foreach (var hit in hits)
- {
- Renderer r = hit.transform.GetComponent<Renderer>();
- if (r == null) continue; // questo oggetto non e' renderizzato quindi non serve processarlo
- bool found = false;
- foreach (var rp in faded_objects)
- {
- if (rp.renderer == r)
- {
- rp.justAdded = true;
- found = true;
- break;
- }
- }
- if (!found)
- {
- faded_objects.Add(new RendererProperties(r));
- r.enabled = false;
- Debug.Log("Added " + r.transform.name);
- }
- }
- }
- void RestoreObjects()
- {
- List<RendererProperties> remove = new List<RendererProperties>();
- foreach (var i in faded_objects)
- {
- if (!i.justAdded)
- {
- remove.Add(i);
- i.renderer.enabled = true;
- }
- }
- for (int i = 0; i < remove.Count; i++)
- {
- faded_objects.Remove(remove[i]);
- Debug.Log("Removed " + remove[i].renderer.transform.name);
- }
- }
- }
Add Comment
Please, Sign In to add comment