Newer
Older
Dreamsturbia-Project-IADE-Unity3D / Assets / Scripts / AI / Navmesh / Conditions / CameraViewCondition.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. [CreateAssetMenu(menuName = "Finite State Machine/Condition/Camera View")]
  5. public class CameraViewCondition : Condition
  6. {
  7. Camera cam;
  8. [SerializeField] float viewAngle;
  9. [SerializeField] float viewDistance;
  10. protected override bool Test(FiniteStateMachine fsm)
  11. {
  12. cam = Camera.main;
  13. Debug.Log(cam);
  14. Vector3 viewportPoint = cam.WorldToViewportPoint(fsm.transform.position);
  15. if (viewportPoint.x > 0 && viewportPoint.x < 1 && viewportPoint.y > 0 && viewportPoint.y < 1) {
  16. //Vector3 direction = new Vector3( fsm.target.position.x - cam.transform.position.x, 0, fsm.target.position.z - cam.transform.position.z);
  17. Vector3 newVector = new Vector3(fsm.target.position.x - cam.transform.position.x,0, fsm.target.position.z - cam.transform.position.z);
  18. Debug.DrawRay(fsm.target.transform.position, newVector, Color.green);
  19. float distance = newVector.magnitude;
  20. float angle = Vector3.Angle(Vector3.Normalize(fsm.transform.position - fsm.target.position), newVector.normalized);
  21. Debug.Log(angle);
  22. if (angle < viewAngle && distance < viewDistance)
  23. {
  24. Debug.Log("Entered Raycast");
  25. return Raycast(newVector, fsm);
  26. } else
  27. {
  28. return false;
  29. }
  30. } else
  31. {
  32. return false;
  33. }
  34. }
  35. private bool Raycast(Vector3 direction, FiniteStateMachine fsm)
  36. {
  37. RaycastHit hit;
  38. if (Physics.Raycast(new Ray(fsm.target.position, fsm.transform.position), out hit, direction.magnitude)) {
  39. if (hit.collider.CompareTag("Stalker"))
  40. return true;
  41. else return false;
  42. } else
  43. {
  44. return true;
  45. }
  46. }
  47. }