internal void MouseMove(int x, int y) { HoveredObjects.Clear(); Vector mousePosition = new Vector(x, y); if (IsDragging) { Vector deltaPosition = mousePosition - mouseDownPosition; Origin += deltaPosition; mouseDownPosition = mousePosition; } else { if (ElementMoveStartPosition != null) { Vector deltaPosition = mousePosition.MapFromScreen(Scale, Origin) - ElementMoveStartPosition.MapFromScreen(Scale, Origin); // We do not guarantee that points in nodesToMove are unique List <Vector> targetPos = nodesToMove.Select(node => new Vector(node.X, node.Y) + deltaPosition).ToList(); for (int i = 0; i < nodesToMove.Count; ++i) { nodesToMove[i].X = targetPos[i].X; nodesToMove[i].Y = targetPos[i].Y; } ElementMoveStartPosition = mousePosition; return; } Vector query = mousePosition.MapFromScreen(Scale, Origin); GraphElement havoredObject = QueryPosition(query); if (havoredObject != null) { HoveredObjects.Add(havoredObject); } if (IsCreatingMode) { if (havoredObject is Node node) { HoveredCreatingNode = node; } else { HoveredCreatingNode = new Node(query.X, query.Y); } } } }
void FixedUpdate() { HoveredObjects.Clear(); HoveredUiObjects.Clear(); // Scene objects RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Pointer.Position); if (Physics.Raycast(ray, out hit, 100)) { HoveredObjects.Add(hit.transform.gameObject); } ; // UI objects _pointerEventData = new PointerEventData(EventSystem) { position = Pointer.Position }; //Create a list of Raycast Results List <UnityEngine.EventSystems.RaycastResult> results = new List <UnityEngine.EventSystems.RaycastResult>(); //Raycast using the Graphics Raycaster and mouse click position Raycaster.Raycast(_pointerEventData, results); //For every result returned, output the name of the GameObject on the Canvas hit by the Ray foreach (UnityEngine.EventSystems.RaycastResult result in results) { HoveredUiObjects.Add(result.gameObject); } DebugList = HoveredUiObjects; }