Search Unity

  1. Unity 2020.1 has been released.
    Dismiss Notice
  2. We are looking for feedback on the experimental Unity Safe Mode which is aiming to help you resolve compilation errors faster during project startup.
    Dismiss Notice
  3. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

Picking up object sometimes blocked by other objects/parts of other objects

Discussion in 'Scripting' started by egg_citizen, Jul 27, 2019.

  1. egg_citizen

    egg_citizen

    Joined:
    Jan 3, 2019
    Posts:
    19
    Hello all,

    Somehow my code works at times and sometimes doesn't work at times... and I don't see where it goes wrong.
    I have an object which I can drag.(lets call it object A) It's the only object on the screen which I can drag. Then there are other objects where I can hide the object behind. After hiding it (even totally out of sight), I can still pick up the object, which is how it should work... but... sometimes that same object I hide it behind (object B), makes me unable to pick up object A... and I just can't find the logic behind this :(.

    To be complete, Object A and Object B both have boxColliders (2D).
    Object A: Inspecter Layer: Default
    Object B: Inspecter Layer: Scenery

    Object A: Sprite Renderer Layer + Order: Sprite Renderer same as Object B, Order = Object B order - 1

    The only code in the scene right now:

    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. namespace HideSeek.Control
    4. {
    5.     public class HideObjectControl : MonoBehaviour
    6.     {
    7.         private Vector2 offSet;
    8.  
    9. // pick up object A
    10.         private void OnMouseDown()
    11.         {
    12.             offSet = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
    13.             Debug.Log("Picking ball up");
    14.         }
    15.  
    16. // change position object A while dragging it
    17.         private void OnMouseDrag()
    18.         {
    19.             Vector2 curScreenPoint = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    20.             Vector2 curPosition = (Vector2)Camera.main.ScreenToWorldPoint(curScreenPoint) + offSet;
    21.             transform.position = curPosition;
    22.         }
    23.  
    24. //release object A when mouse not clicked anymore
    25.         private void OnMouseUp()
    26.         {
    27.             RaycastHit2D hit2D = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero,0,LayerMask.GetMask("Scenery"));
    28.             if (hit2D)
    29.             {
    30.                 GameObject hitObject = hit2D.collider.gameObject;
    31.  
    32. // Set sortinglayer and order for object A
    33.                 gameObject.GetComponent<SpriteRenderer>().sortingLayerID = hitObject.GetComponent<SpriteRenderer>().sortingLayerID;
    34.                 gameObject.GetComponent<SpriteRenderer>().sortingOrder = hitObject.GetComponent<SpriteRenderer>().sortingOrder - 1;
    35.  
    36.             }
    37.         }
    38.     }
    39. }
    This code is part of Object A.
    Object B has no code.

    The Transform.Z position of all the objects = 0, also after dragging and dropping object A.
     
unityunity