using UnityEngine; using UnityEngine.Rendering.Universal; using System.Linq; // for FirstOrDefault() public class Point : MonoBehaviour { public int id; public UntangleGameManager manager; // optional: assign in inspector or else we'll try to find it [SerializeField] private Camera uiOverlayCamera; private Vector3 offset; void Awake() { if (uiOverlayCamera == null && Camera.main != null) { var extra = Camera.main.GetComponent(); if (extra != null) { // look for the camera named "UIOverlayCamera" uiOverlayCamera = extra.cameraStack .FirstOrDefault(cam => cam.name == "UIOverlayCamera"); } } } void OnMouseDown() { // pick UI overlay if we have it, otherwise fallback var cam = uiOverlayCamera != null ? uiOverlayCamera : Camera.main; Vector3 worldPoint = cam.ScreenToWorldPoint(Input.mousePosition); // worldPoint.z = 0; offset = transform.position - worldPoint; Debug.Log($"Point {id} clicked. Offset (from {cam.name}): {offset}"); } void OnMouseDrag() { var cam = uiOverlayCamera != null ? uiOverlayCamera : Camera.main; Vector3 raw = cam.ScreenToWorldPoint(Input.mousePosition); raw.z = 0; transform.position = raw + offset; manager.CheckIfSolved(); foreach (var c in manager.connections) c.UpdateLine(); } }