- Home /
Ray is shot in wrong axis
Hey guys i have this line of script that shoots a ray and if it hits player the ai chases him...but the problem is that the ray is facing up not straight so it detects player when he is jumping only etc! How can i fix it?
playerDist = Vector3.Distance(Player.transform.position, transform.position);
randomPointDist = Vector3.Distance(randomPoints[currentRandomPoint].transform.position, transform.position);
RaycastHit hit;
Vector3 startRay = transform.position;
Vector3 endRay = Player.transform.position;
Vector3 direction = endRay - startRay;
if (Physics.Raycast(transform.position, direction, out hit, 1000) && playerDist < perceptionDistance)
{
Debug.DrawLine(hit.point,
hit.point+hit.normal);
if (hit.collider.gameObject.CompareTag("Player"))
{
seeingPlayer = true;
}
else
{
seeingPlayer = false;
}
}
Check Y position for the player transform and this script's transform are correct and nothing collides on Y axis. For debugging, you should draw the line just like your draw a debug line for hit point normal.
Answer by SuperScience · Sep 25, 2019 at 05:09 PM
Hi Alex,
I suspect that something else is wrong here, but I would recommend not using raycasts. There are other physics casts, and it seems like what you really want to use is linecast.
Raycasts are really for directional rays. "Like, if I shoot forward, what will I hit?" Linecasts are more for "If I draw a line between point A and point B, do I hit anything in-between".
Here's the doc for you.
https://docs.unity3d.com/ScriptReference/Physics.Linecast.html
Also, I would recommend short-circuiting your logic when it comes to perception distance. Raycasts (linecasts, etc) are more computationally expensive than simple calculations, so if the player is too far away, you should not bother to raycast.
Stick all this stuff in method like:
private bool detectsPlayer(){
If(distance < perceptionDistance){ return; }
RaycastHit hit;
if(Physics.LineCast(transform.position, player.transform.position, hit){
hit.collider.gameobject.compareTag("Player){ return true;}
}
return false;
}
// (or something like that)
Your answer
Follow this Question
Related Questions
How to register if my Raycast hits nothing(Solved) 2 Answers
How to obtain third person accuracy 0 Answers
Mouse aim in orthographic view 0 Answers
raycast rigidbody addforce 2 Answers
Problem With Raycasthit Angle 0 Answers