как использовать Raycast NGUI в RTS Game? - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над проектом 2D Isometric RTS. Это как миллиарды или Starcraft. Но, работая над редактором карт, RayCast столкнулся с неразрешимой проблемой с NGUI. Хотя при щелчке мыши вы должны создать землю, UICamera.hoveredObject продолжит возвращать UIRoot

Сцены, возвращающие UIRoot

private void CreateTileOnMousePos()
{
    Debug.Log(UICamera.hoveredObject);
    if (UICamera.hoveredObject == null)
    {
        RaycastHit2D hit;
        if (hit = Physics2D.GetRayIntersection(Camera.main.ScreenPointToRay(Input.mousePosition)))//, grid.unwalkableMask))
        {
            Node node = grid.NodeFromWorldPoint(hit.point);
            Vector3Int pos = tilemaps[0].WorldToCell(node.worldPosition);// + tilemaps[0].tileAnchor);

            node.enviormentTile = EnviormentTile.Gress;
            tilemaps[0].SetTile(pos, tilePrefabs[0]);
        }
    }
}

Если SetActive UIRoot выключен,конечно это работает. Выберите другую плитку или сохраните / загрузите информацию карты через UIButton. Я хочу использовать эти NGUI для реализации интерфейса реальной игры. Я не знаю, глуп ли переход, потому что я впервые работаю над ним.

Буду признателен, если вы подскажете мне, как это сделать. что я намеревался, не отключая UIRoot SetActive

================================================================================

Я не знаюкак использовать GraphicRayCast из-за отсутствия навыков, но сначала я решил это с помощью этого метода.

if (UICamera.Raycast(Input.mousePosition) == true)
    {
        Debug.Log("UICamera.Raycast ture");
    }
    else
    {
        RaycastHit2D hit;

        if (hit = Physics2D.GetRayIntersection(Camera.main.ScreenPointToRay(Input.mousePosition)))//, grid.unwalkableMask))
        {
            Node node = grid.NodeFromWorldPoint(hit.point);
            Vector3Int pos = tilemaps[0].WorldToCell(node.worldPosition);// + tilemaps[0].tileAnchor);

            node.enviormentTile = EnviormentTile.Gress;
            tilemaps[0].SetTile(pos, tilePrefabs[0]);
        }
    }
...