- Home /
Dragging one object, but when it overlaps another it sticks also
Hello. Im making Mobile 2D puzzle game. Player need drag and drop puzzle objects in it spaces. Currently I kind of achieved dragging objects into their places, only 1 thing I stuck on.
When I pick and drag one puzzle object and overlap it over another puzzle object, that 2nd object also sticks to mouse/touch movement and then I keep dragging 2 objects. Every object has the same script attached, so creating var for example isObjectDragging is not working. Im kinda stuck on this logic how should be this done, looking for any advice or solution !
Main logic about dragging is in Update method after checking if BeingDragged.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UnitObject : MonoBehaviour {
Vector2 mousePosition;
bool overSprite;
bool beingDragged = false;
Vector3 startingPos;
public GameObject place;
public ParticleSystem successParticles;
bool isSuccessParticlesCreated = false;
bool unitPlaced = false;
// Use this for initialization
void Start () {
startingPos = transform.position;
}
// Update is called once per frame
void Update () {
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
overSprite = isOverSprite();
beingDragged = beingDragged && Input.GetButton("Fire1");
if (overSprite)
{
if (Input.GetButton("Fire1"))
{
beingDragged = true;
}
}
if (beingDragged)
{
//Set the position to the mouse position
transform.position = new Vector3(Camera.main.ScreenToWorldPoint(Input.mousePosition).x,
Camera.main.ScreenToWorldPoint(Input.mousePosition).y,
0.0f);
// Reset Particles Locking
isSuccessParticlesCreated = false;
} else {
float distance = Vector3.Distance(place.transform.position, transform.position);
// If its near objects place, put it exactly in spot
if(distance < 0.8f) {
transform.position = new Vector3(place.transform.position.x, place.transform.position.y, 0.0f);
startSuccessParticles();
if(!unitPlaced) {
unitPlaced = true;
Environment.addUnit();
}
} else {
transform.position = new Vector3(startingPos.x, startingPos.y, 0.0f);
}
}
}
bool isOverSprite() {
return GetComponent<SpriteRenderer>().bounds.Contains(mousePosition);
}
void startSuccessParticles()
{
if (!isSuccessParticlesCreated)
{
ParticleSystem ps = Instantiate(successParticles, place.transform.position, Quaternion.identity) as ParticleSystem;
ps.Play();
isSuccessParticlesCreated = true;
Destroy(ps.gameObject, 0.5f);
}
}
}
Your answer
Follow this Question
Related Questions
Drag and Drop "Puzzle" Game con't always work 0 Answers
Drag and Drop w/ Snapping 0 Answers
Detect inside Collision 2D 0 Answers
How to use gameObject as a drag-able object. 1 Answer
Best 2d User Interface for Mobile and Other platforms 1 Answer