【发布时间】:2018-05-24 01:35:51
【问题描述】:
我正在开发一款可以用手指移动地图的手机游戏。当我点击屏幕的某些对象时,它会显示一个带有信息的 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 编辑器中运行,但不适用于 Android 和 iOS 设备。我该如何解决?
if (EventSystem.current.IsPointerOverGameObject() ||
EventSystem.current.currentSelectedGameObject != null) {
return;
}
【问题讨论】:
-
你也有 UI 文本的代码吗?每当用户在文本上拖动时,您可以禁用背景拖动吗?
-
@iamJP 我只是用我如何启用滚动文本的代码来更新我的问题。如何禁用背景拖动?
-
这个问题对你有帮助吗? stackoverflow.com/questions/35529940/…?
-
@iamJP 我已经阅读了这篇文章并将这段代码添加到滚动文本所在的 UI 面板中,但我不知道我应该写什么代码才能工作: public class BlockUIelement : MonoBehaviour, IPointerDownHandler { public void OnPointerDown(PointerEventData eventData) { //code } }
-
抱歉,我帮不上忙。但是,我建议您将所有输入处理代码放入一个 MonoBehaviour 类中。也许称它为“PlayerInput”。这样,您的代码可以在给定任何玩家输入的情况下对要做什么做出单一决定。在我看来,让多个对象处理触摸屏只是自找麻烦。