前言
一个简单的范例,如下图的朴克牌,点一下就会翻过来,再点一次就盖起来。
朴克牌游戏对象
首先新增一个 Sprite 对象,用于显示朴克牌的点数,命名为 oneCard。然后在其下新增一个 Sprite 子对象,用于显示背面图像,命名为 imgBack。
由于 oneCard 要判断是否被点击,所以得添加一个Box 碰撞器。添加方式如下:
最后为此对象挂上一个脚本 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() 能解决一切。