void UpdateTarget() { Vector3 fwd = transform.TransformDirection(Vector3.forward); RaycastHit[] hits; hits = Physics.RaycastAll(transform.position, fwd, 20); bool canvasHit = false; bool editPlaneHit = false; List <ImageHit> imagesHit = new List <ImageHit>(); List <ImageHit> framesHit = new List <ImageHit> (); // List<ImageHit> menuOptionsHit = new List<ImageHit> (); foreach (RaycastHit hit in hits) { if (hit.collider.gameObject.tag == "Image") { imagesHit.Add(new ImageHit(hit.collider.gameObject, hit.point)); continue; } if (hit.collider.gameObject.tag == "Frame") { framesHit.Add(new ImageHit(hit.collider.gameObject, hit.point)); continue; } if (hit.collider.gameObject.tag == "MainCanvas") { canvasHitAt = hit.point; canvasHit = true; continue; } if (hit.collider.gameObject.tag == "MenuOption") { currentTarget = new ImageHit(hit.collider.gameObject, hit.point); return; } if (hit.collider.gameObject.tag == "Temp") { editPlaneHitAt = hit.point; editPlaneHit = true; continue; } } if (!editPlaneHit) { editPlaneHitAt = default(Vector3); } if (!canvasHit) { crosshair.HideCrosshair(); ray.UpdateRay(); canvasHitAt = default(Vector3); } else { if (layerManager.HasSelectedFrames() && controller.trackpadDown) { crosshair.HideCrosshair(); HideRay(); } } List <Layer> sortedLayers = layerManager.GetLayers(); bool imageFound = false; foreach (Layer layer in sortedLayers) { foreach (ImageHit imgHit in imagesHit) { if (layer.layerImage == imgHit.target.GetComponent <Image>()) { imageFound = true; if (currentTarget.target != imgHit.target) { controller.Vibrate(vibrationForce); } currentTarget = imgHit; break; } } if (imageFound) { break; } } // If no image have been hit but a frame has, take the first frame hit and set it as the current target if (!imageFound) { if (framesHit.Count > 0 && layerManager.rearrangementMode) { currentTarget = framesHit [0]; } else { currentTarget = default(ImageHit); } } if (!HasTarget() && canvasHit) { ray.UpdateRay(Vector3.Distance(transform.position, canvasHitAt)); crosshair.ShowCrosshair(); crosshair.MoveCrosshair(canvasHitAt); } if (HasTarget()) { crosshair.HideCrosshair(); } }