Uniyt簡單的手勢識別

此簡單的手勢識別可以根據輸入識別出上下左右,識別的原理如下:

首先獲取用戶按下的點的座標,再根據用戶滑動一段距離產生一個向量
比較該向量與X軸、Y軸夾角的值,得到方向。
與Y軸夾角小於45° :上
與Y軸夾角大於135° :下
與軸夾角小於45° :右
與X軸夾角大於135° :左

角度的獲取:
根據公式:a * b = | a | * | b | * cosa
計算a向量和b向量的點積 Vector3.Dot(a,b)
通過反三角函數計算得角的弧度 Mathf.Acos()
將弧度轉爲角度 乘上 Mathf.Rad2Deg

爲了簡化計算,a、b向量在計算時均用其單位向量,向量單位化 a.normalized

            //向量起點
            Vector3 vec = Input.mousePosition - mousePos;
            if (vec.magnitude > 20)//移動一定距離後計算向量
            {
                var angleY = Mathf.Acos(Vector3.Dot(vec.normalized, Vector2.up)) * Mathf.Rad2Deg;//與Y軸夾角
                var anglex = Mathf.Acos(Vector3.Dot(vec.normalized, Vector2.right)) * Mathf.Rad2Deg;//與X軸夾角
                if (angleY <= 45)
                {
                   //上
                }
                else if(angleY >=135)
                {
                   //下
                }
                else if (anglex <= 45)
                {
                    //右
                }
                else if(anglex>=135)
                {
                    //左
                }
             }

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