CheckIfInsideBeam.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using UnityEngine;
  2. namespace VLB_Samples
  3. {
  4. [RequireComponent(typeof(Collider), typeof(Rigidbody), typeof(MeshRenderer))]
  5. public class CheckIfInsideBeam : MonoBehaviour
  6. {
  7. bool isInsideBeam = false;
  8. Material m_Material = null;
  9. Collider m_Collider = null;
  10. void Start()
  11. {
  12. m_Collider = GetComponent<Collider>();
  13. Debug.Assert(m_Collider);
  14. var meshRenderer = GetComponent<MeshRenderer>();
  15. if (meshRenderer)
  16. m_Material = meshRenderer.material;
  17. Debug.Assert(m_Material);
  18. }
  19. void Update()
  20. {
  21. if (m_Material)
  22. {
  23. m_Material.SetColor("_Color", isInsideBeam ? Color.green : Color.red);
  24. }
  25. }
  26. void FixedUpdate()
  27. {
  28. isInsideBeam = false;
  29. }
  30. void OnTriggerStay(Collider trigger)
  31. {
  32. var dynamicOcclusion = trigger.GetComponent<VLB.DynamicOcclusionRaycasting>();
  33. if (dynamicOcclusion)
  34. {
  35. // This GameObject is inside the beam's TriggerZone.
  36. // Make sure it's not hidden by an occluder
  37. isInsideBeam = !dynamicOcclusion.IsColliderHiddenByDynamicOccluder(m_Collider);
  38. }
  39. else
  40. {
  41. isInsideBeam = true;
  42. }
  43. }
  44. }
  45. }