京城游戏人-Day10: 2D 游戏中手机/PC 的单次触摸/点击

京城游戏人-Day10: 2D 游戏中手机/PC 的单次触摸/点击

-

-

基本方法

  1. 创建一个 Sprite
  2. 给这个 Sprite 添加 Box Collide 2D 的组件
  3. 创建一个 Empty Object,命名为 GameController
  4. 创建一个名为 GameController.cs 的脚本,并添加到 GameController 上
  5. 编写脚本

以下脚本,包括处理 PC 鼠标点击和手机触摸屏点击。

public class GameController : MonoBehaviour {

    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update ()
    {
        if (Input.touchCount == 1 && Input.touches[0].phase == TouchPhase.Ended)
        {
            var hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint(Input.touches[0].position), Vector2.zero);
            if (hit.collider != null)
            {
                hit.collider.gameObject.transform.Rotate (new Vector3(0, 0, 90));
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            var hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
            if (hit.collider != null)
            {
                hit.collider.gameObject.transform.Rotate (new Vector3(0, 0, 90));
            }
        }
    }
}

常见问题

  • 如果不给 Sprite 添加 Box Collide 2D,则无法识别点击
  • 注意用 TouchPhase.Ended 和 GetMouseButtonUp 来判断点击结束。如果不看点击开始、结束,则会出现单次点击后,Sprite 连续转动多个 90 度的现象,读者们可以把代码做如下两个修改,感受下:

    // 去掉下面这句
    Input.touches[0].phase == TouchPhase.Ended
    
    // 修改下面这句
    Input.GetMouseButton(0)
    
  • 这里用的是射线判断方法,是一种非常常用的判断法

-

-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章