- Home /
Cant select objects using my box-selection script
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
using System.Collections.Generic;
public class DragSelection : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public List<GameObject> selected = new List<GameObject>();
public List<GameObject> selectable = new List<GameObject>();
[SerializeField]
Image selectionBoxImage;
Vector2 startPostion;
Rect selectionRect;
public void OnBeginDrag(PointerEventData eventData)
{
if (Input.GetMouseButton(0))
{
selectionBoxImage.gameObject.SetActive(true);
startPostion = eventData.position;
selectionRect = new Rect();
}
}
public void OnDrag(PointerEventData eventData)
{
if (Input.GetMouseButton(0))
{
//X axis
if (eventData.position.x < startPostion.x)
{
selectionRect.xMin = eventData.position.x;
selectionRect.xMax = startPostion.x;
}
else
{
selectionRect.xMin = startPostion.x;
selectionRect.xMax = eventData.position.x;
}
//Y axis
if (eventData.position.y < startPostion.y)
{
selectionRect.yMin = eventData.position.y;
selectionRect.yMax = startPostion.y;
}
else
{
selectionRect.yMin = startPostion.y;
selectionRect.yMax = eventData.position.y;
}
selectionBoxImage.rectTransform.offsetMin = selectionRect.min;
selectionBoxImage.rectTransform.offsetMax = selectionRect.max;
}
}
public void OnEndDrag(PointerEventData eventData)
{
selectionBoxImage.gameObject.SetActive(false);
foreach (GameObject selectObject in selectable)
{
if (selectObject != null)
{
Debug.Log("object found");
if (selectionRect.Contains(Camera.main.WorldToScreenPoint(selectObject.transform.position)))
{
selected.Add(selectObject);
Debug.Log("object selected");
}
}
}
}
}
im trying to make a box select feature in my game, and in the OnEndDrag method, I am trying to find all the selectable gameobjects in the box selector and add them to the selected list(Yes, I added gameobjects to the selectable list). the only error it gave me was:
LINE 79: if (selectionRect.Contains(Camera.main.WorldToScreenPoint(selectObject.transform.position))); This got me stumped because I cant seem to figure out what object reference isn't set to an instance of an object. Usually I never have problems figuring out stuff like this but this time isn't the case. NOTE: this is my first time using the IBeginDragHandler, IDragHandler, and IEndDragHandler interfaces in a script, so I could have a lot wrong.NullReferenceException: Object reference not set to an instance of an object DragSelection.OnEndDrag (UnityEngine.EventSystems.PointerEventData eventData) (at Assets/AI Project/DragSelection.cs:79) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IEndDragHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:78) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update()
Your answer
Follow this Question
Related Questions
Create selection box by double tapping then dragging? (android mobile)(cnc style)(image embedded) 1 Answer
Creating a cube as a selection box and detecting all collided objects inside of it. 2 Answers
unit selection issue 0 Answers
RTS Style Selection system (How to control one unit and not the others) 2 Answers
Unity RayCast Selection 1 Answer