question about enemy AI

Im trying to get my enemy AI 2D to follow me, my code is at the bottom. when i run the script it moves left, but if i jump over the enemy he stops and wont proceed till the player is to the enemy’s left again.

not my code btw.

using UnityEngine;
using System.Collections;

public class newai : MonoBehaviour {
	public Transform target;
	public int moveSpeed;
	public int maxDistance;
	
	private Transform myTransform;
	
	void Awake() {
		myTransform = transform;
	}  
	
	// Use this for initialization
	void Start () {
		GameObject go = GameObject.FindGameObjectWithTag("Player");
		
		target = go.transform;
		
		maxDistance = 2;
	}   
	
	
	
	
	// Update is called once per frame
	void FixedUpdate () {
		Debug.DrawLine(target.position, myTransform.position, Color.yellow);
		
		//Look at target
		

		//Move towards target
		myTransform.position -= myTransform.right * moveSpeed * Time.deltaTime;
		if (target.position.x < myTransform.position.x) myTransform.position -= myTransform.right * moveSpeed * Time.deltaTime; // player is left of enemy, move left
		else if (target.position.x > myTransform.position.x) myTransform.position += myTransform.right * moveSpeed * Time.deltaTime; // player is right of enemy, move right
	
	}

	
}

got it.

 if (Vector3.Distance (target.position, myTransform.position) < maxDistance) {
    						if (target.position.x < myTransform.position.x)
    								myTransform.position -= myTransform.right * moveSpeed * Time.deltaTime; // player is left of enemy, move left
    			else if (target.position.x > myTransform.position.x)
    								myTransform.position += myTransform.right * moveSpeed * Time.deltaTime; // player is right of enemy, move right

The problem is here:

       myTransform.position -= myTransform.right * moveSpeed * Time.deltaTime; // remove this line
       if (target.position.x < myTransform.position.x) myTransform.position -= myTransform.right * moveSpeed * Time.deltaTime; // player is left of enemy, move left
       else if (target.position.x > myTransform.position.x) myTransform.position += myTransform.right * moveSpeed * Time.deltaTime; // player is right of enemy, move right

You should be moving the enemy only left or only right but still you have 3 lines of code to move him :slight_smile:

First you always move him left by (speed*time), then you either move him left again by the same amount or to the right by the same amount (back to the same spot as before the first move)

Remove the first moving line.