Enemy chasing the player ?

Hello

I’m creating a 2D game. I created some enemies(Ghost) and I want to do these enemies chase the player like Ghosts of Mario Bros for example.

If my player goes right or left of position enemy, I want rotate position y of enemy also.

How can I do this ?

I’m trying this.

public class GhostEnemy : MonoBehaviour {
   
    //player
    private Transform player;

    //ghost
    public Transform ghost;
        
    public float moveSpeed;    
    private bool chasing = false;
    

	// Use this for initialization
	void Start () {
        player = GameObject.Find("PlayerObject").transform;	   
	}
	
	// Update is called once per frame
	void Update () {        
        chasingPlayer();
	}

    private void chasingPlayer(){
        //distance of ghost and player
        float distance = Vector2.Distance(ghost.position, player.position);

        if(chasing){
            //rotate ghost 
            Vector3 dir = player.position - ghost.position;
            float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            
            //attack player                     
            Vector3 dir = player.position - ghost.position;
            dir.Normalize();
            ghost.position += dir * moveSpeed * Time.deltaTime;

            //distance > range, chasing false
            if(distance > 10f){
                chasing = false;
            }
        }else{
            //distance < range, chasing true(attack player)
            if(distance < 5f){
                chasing = true;
            }
        }
    }
}

You can try this. Its working for me to reverse my sprites running annimation when he turns the other way… Its’ from this video. He explains how it works around the 42 minute mark.

https://unity3d.com/learn/tutorials/modules/beginner/2d/2d-controllers

hi, I solved the problem.

I did this.

public class GhostEnemy : MonoBehaviour {
   
    //player
    private Transform player;

    //ghost
    public Transform ghost;
        
    public float moveSpeed;    
    private bool chasing = false;
    private Vector3 ghostPosition;
    

	// Use this for initialization
	void Start () {
        player = GameObject.Find("PlayerObject").transform;
        ghostPosition = ghost.position;	   
	}
	
	// Update is called once per frame
	void Update () {        
        chasingPlayer();
	}

    
    private void chasingPlayer(){
        //distance of ghost and player
        float distance = Vector2.Distance(ghost.position, player.position);

        if(chasing){
            //attack player
            Vector3 dir = player.position - ghost.position;
            dir.Normalize();
            ghost.position += dir * moveSpeed * Time.deltaTime;

            //rotate ghost
            if(ghost.position.x >= player.position.x){
                ghost.eulerAngles = new Vector2(0,0);
            }else{
                ghost.eulerAngles = new Vector2(0,180);
            }

            //distance > range, chasing false
            if(distance > 10f){  
                ghost.position = ghostPosition;              
                chasing = false;
            }
        }else{
            //distance < range, chasing true(attack player)
            if(distance < 5f){
                chasing = true;
            }
        }
    }
}