C# 触摸滚动UI文本会干扰背景地图

C# 触摸滚动UI文本会干扰背景地图,c#,unity3d,C#,Unity3d,我在一个手机游戏中工作,我可以用手指移动地图。当我点击屏幕上的某些对象时,屏幕上会出现一个带有信息的滚动UI文本,但当我触摸屏幕以滚动文本时,背景中的地图会移动。当我在信息文本中滚动时,如何获得地图不移动 这是一个屏幕截图: 以下是移动背景贴图的代码: if(dragToPan){ if(!mapping && ready){ if (Input.touchCount == 1 && Input.GetTouch(0).

我在一个手机游戏中工作,我可以用手指移动地图。当我点击屏幕上的某些对象时,屏幕上会出现一个带有信息的滚动UI文本,但当我触摸屏幕以滚动文本时,背景中的地图会移动。当我在信息文本中滚动时,如何获得地图不移动

这是一个屏幕截图:

以下是移动背景贴图的代码:

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 editor中工作,但不能在Android和iOS设备中工作。我怎样才能解决它

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

如果您希望以这种方式继续,您可以尝试在后台移动器脚本中使用bool变量isUIActive,该变量可以从其他脚本设置为false或true,当文本处于活动状态时,将其设置为true,当UI被禁用时,将其设置为false。 在检查背景移动输入之前,还包括检查isUIActive

大概是这样的:

if (!isUIActive){
    if(dragToPan){
        if(!mapping && ready){
            ...
以及设置变量的函数:

public void SetUIActive (bool setTo){
     isUIActive = setTo;
}
在你需要的地方,你可以调用这个函数并设置它。 注意:要使其正常工作,您需要在其他脚本中引用此脚本。
如果有帮助,请告诉我。

您也有UI文本的代码吗?当用户拖动文本时,您是否可以禁用背景拖动?@iamJP我只是用如何启用滚动文本的代码更新我的问题。如何禁用背景拖动?这个问题对您有帮助吗@iamJP我已经阅读了文章并将此代码添加到滚动文本所在的UI面板中,但我不知道应该编写什么代码:公共类BlockUIelement:MonoBehavior,IPInterdownHandler{public void OnPointerDown(PointerEventData){//code}}抱歉,我不能提供更多帮助。但是,我建议您将所有输入处理代码放在一个MonoBehavior类中。也许可以称之为“PlayerInput”。通过这种方式,您的代码可以在给定任何玩家输入的情况下做出一个决定。在我看来,让多个物体操作触摸屏只是自找麻烦。谢谢你的回答!如何在第二个脚本中实现此变量?请参考第一个脚本。因此,在公共类Seleccialtesoro_列表中:MonoBehavior{…public YourFirstScriptClassName firstScript;public void Start(){…firstScript=GameObject.FindWithTag(“GameObjectWithFirstScript”).GetComponent();}和使文本处于活动状态的更新函数中,只需添加以下行:firstScript.SetUIActive(true);另外,如果您使文本处于非活动状态,也可以执行相同的操作,只需使用false调用函数即可。如果这有帮助,请告诉我。