void LateUpdate()
    {
        UpdateMove();
        if (move)
        {
            return;
        }

        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
        {
            PathfindingNode node = hit.transform.GetComponent <PathfindingNode>();

            if (node == null || node.isLock && node.target == null)
            {
                return;
            }

            if (Input.GetMouseButtonDown(0))
            {
                if (node.target != null && end == null)
                {
                    if (start != null)
                    {
                        start.isPlayer = false;
                    }
                    start                    = node;
                    node.isPlayer            = true;
                    node.cost                = -1;
                    node.mesh.material.color = pathColor;
                }
                else if (end != null)
                {
                    target = start.target;
                    BuildUnitPath();
                    index = 0;
                    move  = true;
                }
            }
            else if (Input.GetMouseButtonDown(1) && start != null)
            {
                start.isPlayer = false;
                FieldUpdate();
                start = null;
                end   = null;
                hash  = 0;
            }

            if (hash != node.GetInstanceID())
            {
                if (last != null && !last.isPlayer)
                {
                    last.mesh.material.color = defaultColor;
                }
                if (!node.isPlayer)
                {
                    node.mesh.material.color = cursorColor;
                }

                if (start != null && end != null)
                {
                    FieldUpdate();
                    end = null;
                }

                if (start != null && node != null)
                {
                    end = node;

                    path = Pathfinding.Find(start, node, map, width, height);

                    if (path == null)
                    {
                        FieldUpdate();
                        start = null;
                        end   = null;
                        hash  = 0;
                        return;
                    }

                    for (int i = 0; i < path.Count; i++)
                    {
                        path[i].mesh.material.color = pathColor;
                    }
                }
            }

            last = node;
            hash = node.GetInstanceID();
        }
    }