Нажмите на пользовательский интерфейс прокрутки Текст, мешающий фоновой карте - PullRequest
0 голосов
/ 16 мая 2018

Я работаю в игре для мобильных устройств, в которой я могу перемещать карту пальцем.Когда я нажимаю на некоторые объекты на экране, появляется текст в пользовательском интерфейсе с прокруткой с информацией, но когда я касаюсь экрана, чтобы выполнить прокрутку текста, карта, помещенная в фон, перемещается.Как я могу получить карту не двигается, когда я прокручиваю информационный текст?

Это скриншот:

enter image description here

Это код для перемещения карты фона:

if(dragToPan){
        if(!mapping && ready){

            if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) {

                if(Input.GetTouch(0).position.y > screenY/12){
                    Vector2 touchDeltaPosition  = Input.GetTouch(0).deltaPosition;

                    //Check if any of the tile borders has been reached
                    CheckBorders();
                    //Translate the camera
                    cam.Translate(-touchDeltaPosition.x*dragSpeed*Time.deltaTime, -touchDeltaPosition.y*dragSpeed*Time.deltaTime, 0);

                    //Clamp the camera position to avoid displaying any off the map areas
                    ClampCam();
                }
            }
        }   
    }           

И вот как я включаю текст прокрутки:

public class SeleccionarTesoro_LIST : MonoBehaviour {

void Start()
{
    GameObject[] hitObject = GameObject.FindGameObjectsWithTag("TESOROS");
}

public void SetHitObjectToActive(GameObject hitObject)
{
    hitObject.transform.GetChild(0).GetChild(0).gameObject.SetActive (true);
    hitObject.transform.GetChild(0).GetChild(2).gameObject.SetActive (true);

}

void Update() {

    if (Input.GetMouseButtonDown (0)) 
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);


            if (Physics.Raycast (ray, out hit)) {
                SetHitObjectToActive (hit.collider.gameObject);
            }

        }
}
}

ОБНОВЛЕНИЕ 1: я добавил эти строки вПервый скрипт, и он работает в редакторе Unity, но не на устройствах Android и iOS.Как я могу решить это?

if (EventSystem.current.IsPointerOverGameObject() ||
        EventSystem.current.currentSelectedGameObject != null) {
        return;
    }

1 Ответ

0 голосов
/ 17 мая 2018

Если вы хотите продолжить таким образом, вы можете попробовать использовать переменную bool isUIActive в вашем скрипте фонового перемещения, который может быть установлен в false или true из вашего другого скрипта и всякий раз, когда ваш текст становится активным установите его в true, и когда пользовательский интерфейс будет отключен, установите его в false. Также включите проверку для isUIActive перед проверкой ввода для перемещения фона.

Примерно так:

if (!isUIActive){
    if(dragToPan){
        if(!mapping && ready){
            ...

и функция для установки переменной:

public void SetUIActive (bool setTo){
     isUIActive = setTo;
}

и где вам это нужно, вы можете вызвать эту функцию и установить ее. Обратите внимание, чтобы это работало, вам понадобится ссылка на этот скрипт в другом вашем скрипте. Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...