Hi Folks, new to the forum and Unity
I am having a problem with raycasts.
I have a small sandbox setup. I have a patrol cycling through a series of waypoints. The patrol has a detection zone around it. OnTriggerStay, the patrol attempts to fire a raycast at the object detected, if that object is the player. The patrol then follows the player if it has line of sight.
I would like at this stage that the player can move and hide behind walls etc. However, my raycasts are going through other objects even though they have colliders on them.
I have worked on this all with, with different approaches but cannot get around the issue.
Help would be much appreciated.
I attach here copies of my PatrolDetection script and the patrolController script.
PatrolController...
PatrolDetection
Any help would be greatly appreciated, I'm quite stuck.
2h
I am having a problem with raycasts.
I have a small sandbox setup. I have a patrol cycling through a series of waypoints. The patrol has a detection zone around it. OnTriggerStay, the patrol attempts to fire a raycast at the object detected, if that object is the player. The patrol then follows the player if it has line of sight.
I would like at this stage that the player can move and hide behind walls etc. However, my raycasts are going through other objects even though they have colliders on them.
I have worked on this all with, with different approaches but cannot get around the issue.
Help would be much appreciated.
I attach here copies of my PatrolDetection script and the patrolController script.
PatrolController...
Code:
using UnityEngine;
using System.Collections;
//This allows for the use of lists
using System.Collections.Generic;
public class PatrolController : MonoBehaviour {
public List<Transform> wayPointsList = new List<Transform>();
public Transform currentWaypoint;
public Transform currentPatrolTarget;
public int wayPointNumber = 0;
public float speed =4f;
public float turnSpeed = 1f;
public PatrolDetection PT;
//NavMeshAgent Componants -> Navigation
public NavMeshAgent navAgent;
// Use this for initialization
void Start () {
currentWaypoint = wayPointsList [wayPointNumber];
}
// Update is called once per frame
void Update () {
moveEnemy ();
}
public void moveEnemy()
{
if (PT.isDetected == true && PT.canSee == true)
{
//Debug.Log ("The Player is detected and seen!");
currentPatrolTarget = GameObject.Find ("Player").transform;
navAgent.SetDestination(currentPatrolTarget.position);
}
else
{
if(navAgent.remainingDistance <= navAgent.stoppingDistance)
{
if (wayPointNumber != wayPointsList.Count - 1) {
wayPointNumber++;
navAgent.SetDestination(wayPointsList [wayPointNumber].position);
}
else
{
wayPointNumber = 0;
navAgent.SetDestination(wayPointsList [wayPointNumber].position);
}
}
}
}
}
PatrolDetection
Code:
using UnityEngine;
using System.Collections;
public class PatrolDetection : MonoBehaviour {
public LayerMask sightBlockingLayers;
public RaycastHit hit;
public float maxRayCastRange = 100.0f;
//general detection
public bool isDetected = false;
//can see target
public bool canSee = false;
void OnTriggerStay(Collider other)
{
//Something has triggered Patrol Detection
isDetected = true;
if(other.gameObject.CompareTag("Player"))
{
//Debug.Log ("The " + other + " is detected");
if (Physics.Raycast(transform.position, (other.transform.position - transform.position), out hit, sightBlockingLayers));
{
Debug.DrawLine(transform.parent.position, hit.point);
canSee = true;
//Debug.Log ("The " + other + " is seen");
}
}
}
void OnTriggerExit(Collider other)
{
isDetected = false;
if(other.gameObject.name == "Player")
{
//Debug.Log("The " + other + " exited the collider");
canSee = false;
}
}
}
Any help would be greatly appreciated, I'm quite stuck.
2h