Issues with Character Controller moving Enemies

Hi Guys,

So i’m new to coding, and have been working on making a 2D Platformer.

I have a bunch of enemies that deal damage, and move using the following code I learnt from a great Youtube Channel:

using UnityEngine;
using System.Collections;

public class EnemyMovementController : MonoBehaviour {

	public float enemySpeed;

	Animator enemyAnimator;

	private Transform myTransform;
	public Transform target;

	// facing

	public GameObject enemyGraphic;
	bool canFlip = true;
	bool facingRight = false;
	float flipTime = 5f;
	float nextFlipChance  = 0f;

	//attacking

	public float chargeTime;
	float startChargeTime;
	bool charging;
	Rigidbody2D enemyRB;

	void Awake()
	{
		myTransform = transform;
	}


	// Use this for initialization
	void Start () {
		enemyAnimator = GetComponentInChildren<Animator> ();
		enemyRB = GetComponent<Rigidbody2D> ();

	}
	
	// Update is called once per frame
	void Update () {
		if (Time.time > nextFlipChance) {
			if (Random.Range (0, 10) >= 5) flipFacing ();
			nextFlipChance = Time.time + flipTime;
		}
	}

	void OnTriggerEnter2D(Collider2D other){
		if (other.tag == "Player") {
			if (facingRight && other.transform.position.x > transform.position.x){
				flipFacing ();
		} else if  (!facingRight && other.transform.position.x < transform.position.x){
			flipFacing ();
		}
			canFlip = false;
			charging = true;
			startChargeTime = Time.time + chargeTime;

		}
	}

	void OnTriggerStay2D(Collider2D other){
		if (other.tag == "Player") {
			if (startChargeTime < Time.time){
				// Get a direction vector from us to the target
				Vector3 dir = target.position - myTransform.position;
				
				// Normalize it so that it's a unit direction vector
				dir.Normalize();
				
				// Move ourselves in that direction
				myTransform.position += dir * enemySpeed * Time.deltaTime;
				enemyAnimator.SetBool("isCharging", charging);
			}
		}
	}

	void OnTriggerExit2D(Collider2D other){
		if (other.tag == "Player") {
			canFlip = true;
			charging = false;

			enemyAnimator.SetBool("isCharging", charging);
		}
	}

	void flipFacing(){
		if (!canFlip) return;
		float facingX = enemyGraphic.transform.localScale.x;
		facingX *= -1f;
		enemyGraphic.transform.localScale = new Vector3 (facingX, enemyGraphic.transform.localScale.y, enemyGraphic.transform.localScale.z);
		facingRight = ! facingRight;
		}

}

My issue Comes when the player interacts with the enemy. As the player does not have a dynamic Rigidbody attached, mass etc do not affect it, so the player can just push the enemy around whilst taking damage should they please.

Adding a dynamic Rigidbody to the player causes a variety of glitches, like the enemies shunting or trapping the player indefinitely.

Is there any way to effectively make the enemy ignore the forces being created by the player so that it cannot be moved?

Thanks in advance for your help!

I think enemy should live space for player simply checking if is close enough.
If player and enemy has dynamic colliders then:

  • enemy should have very big mass

  • to move player you should override rigidbody.velocity or use AddForce.