- Home /
Creating a random movement script for multiple AI drivers
Im trying to create a script that make it so that after a random amount of time a AI driver turns either left or right. I'm having trouble finding a way to make it so that through the same script multiple different gameObjects ( The Drivers ) will follow the script at different times or in a different way so that they are not all turning at the same time at the same speed etc.
Currently this is the script I wrote and i've been working with...
public class AIDriving : MonoBehaviour {
public GameObject car;
public Rigidbody rb;
public Transform tr;
public float topSpeed = 25f;
public float speed = 15f;
public float turnTime = 5f;
void Start() {
}
void FixedUpdate() {
if (rb.velocity.magnitude > topSpeed)
{
rb.drag = 10 * Time.deltaTime;
}
rb.AddForce(tr.forward * Random.Range(13, 16));
RaycastHit hit;
if (Physics.Raycast(tr.position, tr.forward, out hit))
{
topSpeed = 100f;
speed = 17f;
}
else
{
topSpeed = 25f;
speed = Random.Range(13, 16);
}
if (Random.Range(1,15) > 5)
{
StartCoroutine( AITurn() );
}
}
IEnumerator AITurn()
{
float turnSpeed = 3;
rb.AddForce(-tr.right * turnSpeed);
yield return new WaitForSeconds(1);
rb.AddForce(tr.right * turnSpeed);
yield return new WaitForSeconds(2);
rb.angularVelocity = Vector3.zero;
rb.AddForce(tr.right * turnSpeed);
yield return new WaitForSeconds(1);
rb.AddForce(-tr.right * turnSpeed);
rb.angularVelocity = Vector3.zero;
}
}
IF YOU HAVE ANY SOLUTIONS TO MAKING THE DIFFERENT OBJECTS RUN THE TURNING PROCESS AT DIFFERENT TIMES IT WOULD BE GREATLY APPRECIATED, Thanks in advance!
Answer by Matteo_Err · Jan 25, 2021 at 05:35 PM
Hello, Maybe it's a bit late but I think you can change this : float turnSpeed = 3; rb.AddForce(-tr.right * turnSpeed); yield return new WaitForSeconds(1); rb.AddForce(tr.right * turnSpeed); yield return new WaitForSeconds(2); rb.angularVelocity = Vector3.zero; rb.AddForce(tr.right * turnSpeed); yield return new WaitForSeconds(1); rb.AddForce(-tr.right * turnSpeed); rb.angularVelocity = Vector3.zero;
To something like this float turnSpeed = 3; rb.AddForce(-tr.right * turnSpeed); yield return new WaitForSeconds(Random.Range(0.5f, 1.5f)); rb.AddForce(tr.right * turnSpeed); yield return new WaitForSeconds(Random.Range(1f, 2f)); rb.angularVelocity = Vector3.zero; rb.AddForce(tr.right * turnSpeed); yield return new WaitForSeconds(Random.Range(0.5f, 1.5f)); rb.AddForce(-tr.right * turnSpeed); rb.angularVelocity = Vector3.zero;
,
Answer by WakingDragon · Jan 24, 2021 at 01:57 PM
I have used "hares" (like in dog racing) - the hares run round the track in the center of the road. The drivers essentially follow the hares but you can tweak things like how quickly they react to a change in direction. This is very simple to put in place and is kind of like old fashioned mechanical games ;)
Your answer
Follow this Question
Related Questions
Racing Ai? long read 1 Answer
Random Movement Problem 1 Answer
AI repeats movement and isnt randomised 0 Answers
Random direction with Mouse Click... 2 Answers
2D Random AI 1 Answer