- Home /
Enemy AI shoot precision
I have a huge enemy AI measuring 50*50*50 and a player of size 1*1*1. The enemy is shooting but it's raycast rarely hits the player. He is shooting somewhere else. How to maintain the precision and accurateness?? Here is the raycasting script. Where do I need to edit??
void ShootTheTarget() { enemyaudio.Play(); //plays the gunshot audio during gunshot
RaycastHit enemyhit; //enemyhit stores info about raycast which hits the target
if (Physics.Raycast(transform.position, target.position, out enemyhit, 40f)) //actual ray which travels
{
//if works if we hit something
Debug.Log(enemyhit.transform.name);
PlayerTracker playerspotted = enemyhit.transform.GetComponent<PlayerTracker>(); //PlayerScript is Player's script name
//if it hits on player then only if condition is true becoz of this PlayerScript
if (playerspotted != null )
{
Debug.Log(hero.bulletcount); //or playerspotted.bulletcount;
playerspotted.PlayerDamage(10f); //here target acts as object(reference) of TargetScript
}
}
}
Answer by Zarenityx · Jul 29, 2018 at 02:03 PM
I might be misreading your code, but it appears you are trying to send a raycast from transform.position towards target.position?
Physics.Raycast() takes a starting position and a direction to cast the ray. If you are trying to cast a ray from transform.position to target.position, what you want is
Physics.Raycast(transform.position,(target.position-transform.position), out enemyhit, 40f)
(Note the (target.position-transform.position) here. If using this far from the origin, you might want to normalize this as well. This is the direction from transform.position to target.position, and is what you should be passing to your raycast).
Additionally, if you are trying to hit the player a certain percentage of the time, have you considered using specifically the direction of the player a certain percentage of the time, and the rest of the time choosing another random direction? It might simplify things and would feel more consistent to your players.