I am creating a mobile game where you protect a player by moving enemies away from it with the mobile touch. You touch a enemy and it become connected to your finger. This is working fine. My issue is that I want some of my enemies when touched by the user to be user to be able to push other enemies. I've been looking at Force commands but none of it just does simple pushing and it normally knocks my enemies out of their set movements. I am using Triggers as my colliders and when I tried to add a non-triggered collider the touch feature stopped working. Does anyone know a simple way to make a touch gameobject that is following you finger around have the ability to simply push other game objects with a specific tag? I currently have this, but it just make the enemy stick directly to my touched enemy.
private void OnTriggerStay2D(Collider2D other)
{
other.transform.position = new Vector2(transform.position.x, transform.position.y);
}
And this is my touching script:
public class DragAndDrop : MonoBehaviour
{
bool moveAllowed;
public bool canMove = true;
Collider2D col;
public GameObject shadowDown;
public GameObject shadowUp;
//Particle System
public GameObject selectionEffect;
// Start is called before the first frame update
void Start()
{
col = GetComponent<Collider2D>();
}
// Update is called once per frame
void Update()
{
if (canMove)
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector2 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
//start of touch
if (touch.phase == TouchPhase.Began)
{
Collider2D touchCollider = Physics2D.OverlapPoint(touchPosition);
if (col == touchCollider)
{
moveAllowed = true;
//Particle
if (selectionEffect != null)
{
Instantiate(selectionEffect, transform.position, Quaternion.identity);
}
//Shadow
if (shadowDown != null)
{
shadowDown.SetActive(false);
}
if (shadowUp != null)
{
shadowUp.SetActive(true);
}
}
}
//during touch
if (touch.phase == TouchPhase.Moved)
{
if (moveAllowed)
{
transform.position = new Vector2(touchPosition.x, touchPosition.y);
}
}
//finish touch
if (touch.phase == TouchPhase.Ended)
{
moveAllowed = false;
//Shadow
if (shadowDown != null)
{
shadowDown.SetActive(true);
}
if (shadowUp != null)
{
shadowUp.SetActive(false);
}
}
}
}
}
Thank you in advance for your help!