private void Update() { if (m_Grid == null || m_Camera == null) { return; } Vector3 mousePosition = Input.mousePosition; Ray ray = m_Camera.ScreenPointToRay(mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) { if (hit.transform != transform) { return; } Vector3 hitPosition = hit.point; Vector3 difference = hitPosition - m_Offset; int x = (int)(difference.x / m_NodeSize); int y = (int)(difference.z / m_NodeSize); if (Input.GetMouseButtonDown(0)) { if (m_Grid.GetNode(x, y).IsOccupied) { m_Grid.FreeNode(new Vector2Int(x, y)); } else { m_Grid.TryOccupyNode(new Vector2Int(x, y)); } } } }