How to make enemy chase player. Basic AI

Hello,

I’ve made a search in Unity Answers and I didn’t find what I wanted, or if I finded, it didn’t worked.

I want to make the enemy to chase the player, but I don’t know how to do that.

Thank you.

I translated the best answer to C# for all of you C# users out there.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AIController : MonoBehaviour
{

    public Transform Player;
    int MoveSpeed = 4;
    int MaxDist = 10;
    int MinDist = 5;




    void Start()
    {

    }

    void Update()
    {
        transform.LookAt(Player);

        if (Vector3.Distance(transform.position, Player.position) >= MinDist)
        {

            transform.position += transform.forward * MoveSpeed * Time.deltaTime;



            if (Vector3.Distance(transform.position, Player.position) <= MaxDist)
            {
                //Here Call any function U want Like Shoot at here or something
            }

        }
    }
}

var Player : Transform;
var MoveSpeed = 4;
var MaxDist = 10;
var MinDist = 5;

function Start () 
{

}

function Update () 
{
    transform.LookAt(Player);
    
    if(Vector3.Distance(transform.position,Player.position) >= MinDist){
    
         transform.position += transform.forward*MoveSpeed*Time.deltaTime;

          
          
         if(Vector3.Distance(transform.position,Player.position) <= MaxDist)
             {
                //Here Call any function U want Like Shoot at here or something
   } 
   
   }
}

My version of ChristianBlandford’s script, with this the enemies will only look at the player when they are in range, move if they are in range but not further than stop.

var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var range : float=10f; //Range within target will be detected
var stop : float=0;
var myTransform : Transform; //current transform data of this enemy
function Awake()
{
    target = GameObject.FindWithTag("Player").transform; //target the player
    myTransform = transform; //cache transform data for easy access/preformance
}
function Update () {    //rotate to look at the player
    var distance = Vector3.Distance(myTransform.position, target.position);
    if (distance<=range){
        //look
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
        Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
        //move
        if(distance>stop){
            myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        }
    }
}

Simplest AI possible, the zombie :

  • Calculate the vector Zombi → Player
  • Move (either Translate or AddForce or Move) of that vector * deltaTime * speed, speed being a var you defined.

To expand that, you’ll need to make the AI walk idly until the player is close enough, and again when the player is too far / behind an obstacle. After that, pathfinding.

Heres Mine:

var target : Transform; 
var moveSpeed = 3; 
var rotationSpeed = 3; 
 
var myTransform : Transform; //current transform data of this enemy
 
function Awake()
{
    myTransform = transform; //cache transform data for easy access/preformance
}
 
function Start()
{
     target = GameObject.FindWithTag("Player").transform; //target the player
 
}
 
function Update () {
    myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
    Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
 
    //move towards the player
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
 
 
}

Try this script: https://gist.github.com/VivekGadhvi/0bd600b83c232d6e610ad3434b719f94

I translated the code to C# since JavaScript is no longer supported in Unity.

public class AIScript : MonoBehaviour
{

public Transform Player;

int MoveSpeed = 4;
int MaxDist = 10;
int MinDist = 5;

public void Start()
{

}

public void Update()
{
    transform.LookAt(Player);

    if (Vector3.Distance(transform.position, Player.position) >= MinDist)
    {

        transform.position += transform.forward * MoveSpeed * Time.deltaTime;

        if (Vector3.Distance(transform.position, Player.position) <= MaxDist)
        {
            //Like anything?
        }

    }
}

}