- Home /
This question was
closed Feb 13, 2020 at 08:26 PM by
ZachRoman121 for the following reason:
Other
Question by
ZachRoman121 · Mar 21, 2017 at 06:02 PM ·
raycasttriggerseventsdrag-and-dropinventory system
Make a event trigger raycast ignore a layer
Hello! I am trying to make an pointerEnter event ignore a layer. How can i do this? I am trying to make a drag and drop item system for my inventory Here is my code:
SlotDragDetection:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class slotDragDetection : MonoBehaviour {
public int slot;
bool pointerEntered = false;
bool pointerClicked = false;
void Awake() {
EventTrigger trigger = gameObject.AddComponent<EventTrigger> ();
EventTrigger.Entry entry = new EventTrigger.Entry ();
EventTrigger.Entry entry2 = new EventTrigger.Entry ();
EventTrigger.Entry entry3 = new EventTrigger.Entry ();
EventTrigger.Entry entry4 = new EventTrigger.Entry ();
//Entry one
entry.eventID = EventTriggerType.PointerEnter;
entry.callback.AddListener( ( data ) => { onPointerEnter( (PointerEventData)data ); } );
trigger.triggers.Add( entry );
//Entry two
entry2.eventID = EventTriggerType.PointerExit;
entry2.callback.AddListener( ( data ) => { onPointerExit( (PointerEventData)data ); } );
trigger.triggers.Add (entry2);
//Entry three
entry3.eventID = EventTriggerType.PointerDown;
entry3.callback.AddListener( ( data ) => { onPointerDown( (PointerEventData)data ); } );
trigger.triggers.Add (entry3);
//Entry four
entry4.eventID = EventTriggerType.PointerUp;
entry3.callback.AddListener( ( data ) => { onPointerUp( (PointerEventData)data ); } );
trigger.triggers.Add (entry4);
}
public void onPointerEnter(PointerEventData data) {
pointerEntered = true;
Debug.Log ("Entered");
}
public void onPointerExit(PointerEventData data) {
pointerEntered = false;
Debug.Log ("Exited");
}
public void onPointerDown(PointerEventData data) {
pointerClicked = true;
}
public void onPointerUp(PointerEventData data) {
pointerClicked = false;
}
}
DragItem:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;
public class dragItems : MonoBehaviour {
Transform defaultSlot;
float offsetX;
float offsetY;
void Awake() {
EventTrigger trigger = gameObject.AddComponent<EventTrigger> ();
EventTrigger.Entry entry = new EventTrigger.Entry ();
EventTrigger.Entry entry2 = new EventTrigger.Entry ();
EventTrigger.Entry entry3 = new EventTrigger.Entry ();
//Entry one
entry.eventID = EventTriggerType.BeginDrag;
entry.callback.AddListener( ( data ) => { onBeginDrag( (PointerEventData)data ); } );
trigger.triggers.Add( entry );
//Entry two
entry2.eventID = EventTriggerType.Drag;
entry2.callback.AddListener( ( data ) => { onDrag( (PointerEventData)data ); } );
trigger.triggers.Add (entry2);
//Entry three
entry3.eventID = EventTriggerType.EndDrag;
entry3.callback.AddListener( ( data ) => { onEndDrag( (PointerEventData)data ); } );
trigger.triggers.Add (entry3);
}
public void onBeginDrag( PointerEventData data) {
offsetX = transform.position.x - Input.mousePosition.x;
offsetY = transform.position.y - Input.mousePosition.y;
if (transform.parent.parent.parent != null && transform.parent.parent.parent.CompareTag ("inventory")) {
defaultSlot = transform.parent.transform;
transform.SetParent (transform.parent.parent.parent);
}
}
public void onDrag(PointerEventData data) {
transform.position = new Vector3 (offsetX + Input.mousePosition.x, offsetY + Input.mousePosition.y);
}
public void onEndDrag(PointerEventData data) {
transform.position = defaultSlot.transform.position;
transform.SetParent (defaultSlot);
}
}
Comment
Best Answer
Answer by justDeek · Mar 21, 2017 at 07:59 PM
Unity already contains a built-in Layer called "Ignore Raycast" (the third option in the drop-down), set the Layer you don't want it to be recognized to that.