移动预制板上交换方向的屏幕触摸 - unity2D

问题描述 投票:0回答:1

我是unity的新手,我搜索了我所期望的行为并实现了一定的扩展。我在主游戏脚本中实例化了一些预设,我需要在游戏对象上添加一个方向,如果玩家触碰了它,我需要在任何方向(2D)上做一个交换。我只需要在选定的gameObject上进行交换。

我在游戏主脚本中添加了触摸识别功能(游戏管理器.cs),用静态Vector2变量来存储 touchStartPosition, touchEndPositiontouchDirection. 这是我在Update()中进行触摸检测的代码。

        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
        {
            touchStartPosition = Input.GetTouch(0).position;
        }
        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            touchEndPosition = Input.GetTouch(0).position;
            touchdirection = touchEndPosition - touchStartPosition;
        }

这里是我写的检查触摸StartPosition是否是gameObject的update()中的gameObject位置的代码。

        //if gameObject is on the touch position
        if(new Vector2(transform.position.x, transform.position.y) == GameManager.touchStartPosition)
        {
            MoveBall();
        }

不幸的是,被触摸的gameObject没有发生任何事情。请帮我把这段代码运行起来。这将是一个很大的帮助。

position move touchscreen gameobject
1个回答
0
投票

new Vector2()和GameManager.touchStartPosition只有在它们指向同一个对象时才会用'=='返回true。

    if(new Vector2(transform.position.x, transform.position.y) == GameManager.touchStartPosition)
    {
        MoveBall();
    }

改为

    if(transform.position.x == GameManager.touchStartPosition.x && transform.position.y == GameManager.touchStartPosition.y)
    {
        MoveBall();
    }

为了确保有重叠,在测试前加一个debug。

Debug.Log("tx : " + transform.position.x + " -- ty " + transform.position.y + " -- gmx : " + GameManager.touchStartPosition.x + " -- gmy: " + GameManager.touchStartPosition.y);

0
投票

我又试了一些,终于有了解决办法。这些是我对代码的改进。

已更换 Input.GetTouch(0).position

Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)

而在每个gameObject文件中的检查,我使用了下面的if条件。

if(GetComponent<Collider2D>() == Physics2D.OverlapPoint(GameManager.touchStartPosition)){}

这工作真的很好。谢谢大家的帮助

© www.soinside.com 2019 - 2024. All rights reserved.