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.
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 :
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?
}
}
}
}