按钮仅在 clicking/touching 位于它们右侧时对 clicks/touches 做出反应

buttons only react to clicks/touches when clicking/touching to the right of them

我正在为 android 在 Unity3D 中制作 2D 游戏。现在我正在制作按钮。而且这个按钮没有正确反应 clicks/touched。我在鼠标点击和同时触摸两者时遇到了同样的问题。每个按钮都有与对象大小相同的触发框碰撞器。但是按钮只有在我点击区域时才会做出反应,这是从按钮开始的。我不明白为什么会这样。我应该怎么办?这是我的代码:

   if (Input.GetMouseButtonDown(0)) {

        Vector3 i = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1));
        RaycastHit2D hit = Physics2D.Raycast (i, i);

        if (hit.transform != null) {

            if (hit.transform.tag == "button") {

                hit.transform.gameObject.SetActive(false);

            }

        }
    }

此外,我在鼠标点击 "i" 位置时实例化了一个对象,以检查它是否正确地将屏幕位置转换为世界,并且工作正常。

尝试这样处理:

if (Input.GetMouseButtonDown(0)) {

    Vector3 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
    Vector2 touchPos = new Vector2(pos.x, pos.y);
    Collider2D hit = Physics2D.OverlapPoint(touchPos);

    if (hit) {
        Debug.Log(hit.transform.gameObject.name);

        if (hit.transform.tag == "button") {
            hit.transform.gameObject.SetActive(false);
        }
    }
}

Physics2D.Raycast 中的第一个参数是原点,第二个参数是 direction,因此您应该从 ray.originray.direction 方向进行光线投射

 void Update () {
                if (Input.GetMouseButtonDown(0)) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit2D hit = Physics2D.Raycast (ray.origin, ray.direction, Mathf.Infinity);
            if (hit) {
                if(hit.collider.gameObject.tag=="button"){
                   //do something
              }
           }
        }  
     }