using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName = "Finite State Machine/Condition/Camera View")] public class CameraViewCondition : Condition { Camera cam; [SerializeField] float viewAngle; [SerializeField] float viewDistance; protected override bool Test(FiniteStateMachine fsm) { cam = Camera.main; Debug.Log(cam); Vector3 viewportPoint = cam.WorldToViewportPoint(fsm.transform.position); if (viewportPoint.x > 0 && viewportPoint.x < 1 && viewportPoint.y > 0 && viewportPoint.y < 1) { //Vector3 direction = new Vector3( fsm.target.position.x - cam.transform.position.x, 0, fsm.target.position.z - cam.transform.position.z); Vector3 newVector = new Vector3(fsm.target.position.x - cam.transform.position.x,0, fsm.target.position.z - cam.transform.position.z); Debug.DrawRay(fsm.target.transform.position, newVector, Color.green); float distance = newVector.magnitude; float angle = Vector3.Angle(Vector3.Normalize(fsm.transform.position - fsm.target.position), newVector.normalized); Debug.Log(angle); if (angle < viewAngle && distance < viewDistance) { Debug.Log("Entered Raycast"); return Raycast(newVector, fsm); } else { return false; } } else { return false; } } private bool Raycast(Vector3 direction, FiniteStateMachine fsm) { RaycastHit hit; if (Physics.Raycast(new Ray(fsm.target.position, fsm.transform.position), out hit, direction.magnitude)) { if (hit.collider.CompareTag("Stalker")) return true; else return false; } else { return true; } } }