Unity 2D 学习手札(十二)Sprite 的触点处理

时间:2024-04-03 17:49:46

前言

一个简单的范例,如下图的朴克牌,点一下就会翻过来,再点一次就盖起来。Unity 2D 学习手札(十二)Sprite 的触点处理

朴克牌游戏对象

首先新增一个 Sprite 对象,用于显示朴克牌的点数,命名为 oneCard。然后在其下新增一个 Sprite 子对象,用于显示背面图像,命名为 imgBack。
Unity 2D 学习手札(十二)Sprite 的触点处理

由于 oneCard 要判断是否被点击,所以得添加一个Box 碰撞器。添加方式如下:
Unity 2D 学习手札(十二)Sprite 的触点处理
最后为此对象挂上一个脚本 Card.cs。

完整的程序代码如下:

public class Card : MonoBehaviour {
    public GameObject imgBack;
    private bool m_bBack = true;
    //-------------------------------------------------
    void Update ()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Vector3 pos = Input.mousePosition;
            Vector3 wp = Camera.main.ScreenToWorldPoint(pos);
            Vector2 touchPos = new Vector2(wp.x, wp.y);
            Collider2D coll = this.GetComponent<Collider2D>();
            if (coll.OverlapPoint(touchPos))
            {
                m_bBack = !m_bBack;
                imgBack.SetActive(m_bBack);
            }
        }
    }
    //-------------------------------------------------
}

程序代码的观念很简单,就是侦测在哪一点发生点击,用 Input.mousePosition 取得屏幕坐标,并转成世界坐标,然后用挂在 oneCard 上的 2D 碰撞器去侦测这点是否在此范围内,若是就代表点到此张牌。

由于 imgBack 背面图案挡在 oneCard 的前面,所以对其做 SetActive() 的切换,就能达到朴克牌翻面的效果。

结语

原本以为 Input.GetButtonDown(“Fire1”) 只是针对鼠标,没想到也可以用在手机的触控上。这样就方便多了,不用再额外去处理 Touch。

一开始,用 onMouseDown() 来处理,在计算机上有效,但在手机上就无效。所幸用 Input.GetButtonDown() 能解决一切。