Question by
PaincideStudio · Feb 17, 2018 at 05:40 PM ·
raycastscript.airaycasting
AI Raycasting Question (Almost there!!!)
Okay. I'm almost there. I made a script and the AI draw ray perfectly. But it doesn't print at a console.. Here is my script.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class BeuBaeMovement : MonoBehaviour {
public GameObject Player;
NavMeshAgent navMeshAgent;
NavMeshPath path;
public float timeForNewPath;
bool inCoRoutine;
Vector3 target;
bool validPath;
public Animator anim;
float distance = 100.0f;
float arc = 45.0f;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent> ();
path = new NavMeshPath ();
}
void Update()
{
if (!inCoRoutine)
StartCoroutine (DoSomething ());
if (navMeshAgent.velocity.magnitude > 1.0f)
{
anim.SetBool ("IsWalking", true);
}
else
{
anim.SetBool ("IsWalking", false);
}
if(Vector3.Distance(transform.position, Player.transform.position) < distance)
{
//player is within distance
Vector3 playerDirection = (Player.transform.position - transform.position).normalized;
if(Vector3.Dot(transform.forward, playerDirection) > 0 && Vector3.Angle(transform.forward, playerDirection) <arc)
{
//player is ahead of AI and in AI fov
Debug.DrawRay(transform.position, transform.position + playerDirection * distance, Color.green);
RaycastHit hit;
if(Physics.Raycast(transform.position, transform.position + playerDirection,out hit,distance))
{
if(hit.collider.name == "FPSController")
{
Debug.Log("Hello World");
}
}
}
}
}
Vector3 getNewRandomPosition()
{
float x = Random.Range (-120, 120);
float z = Random.Range (-120, 120);
Vector3 pos = new Vector3 (x, 0, z);
return pos;
}
IEnumerator DoSomething()
{
inCoRoutine = true;
yield return new WaitForSeconds (timeForNewPath);
GetNewPath ();
validPath = navMeshAgent.CalculatePath (target,path);
while (!validPath)
{
yield return new WaitForSeconds (0.01f);
GetNewPath ();
validPath = navMeshAgent.CalculatePath (target,path);
}
inCoRoutine = false;
}
void GetNewPath()
{
target = getNewRandomPosition ();
navMeshAgent.SetDestination (target);
}
}
Comment
Your answer
Follow this Question
Related Questions
Enemy walking off platform in Unity2D 0 Answers
AI Raycasting 0 Answers
How to actually make raycast hit colliders it s starting from? 1 Answer