How do I use mobile touch to push one object with another one with OnTrigger2D Collider in Unity

Viewed 92

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!

1 Answers

Make new big collider for the enemies, This collider will activate only when the finger is holding the enemy, And when you move the enemy this will push the objects near to him

Related