Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用滑动输入选择多个按钮_C#_User Interface_Unity3d_Button_Swipe - Fatal编程技术网

C# 如何使用滑动输入选择多个按钮

C# 如何使用滑动输入选择多个按钮,c#,user-interface,unity3d,button,swipe,C#,User Interface,Unity3d,Button,Swipe,我正在制作一个类似于Wordscapes的游戏,我一直在试图找到一种通过滑动来选择字母的方法。我不熟悉移动输入,所以我不知道下一步该怎么做。这是我在互联网上找到的输入脚本,并根据我的喜好进行了一些修改。它按预期工作,但只检测到一次滑动运动。当用户滑动按钮时,如何触发onclick事件?如果可能的话,我想将该信息发送给onswip委托(因为我使用其他脚本中的信息来处理刷卡事件) 我想用相机进行光线投射是最好的选择。也许有人可以帮我修改这段代码,因为我不完全明白如何去做。谢谢 //用于检测触摸输入

我正在制作一个类似于Wordscapes的游戏,我一直在试图找到一种通过滑动来选择字母的方法。我不熟悉移动输入,所以我不知道下一步该怎么做。这是我在互联网上找到的输入脚本,并根据我的喜好进行了一些修改。它按预期工作,但只检测到一次滑动运动。当用户滑动按钮时,如何触发onclick事件?如果可能的话,我想将该信息发送给onswip委托(因为我使用其他脚本中的信息来处理刷卡事件)

我想用相机进行光线投射是最好的选择。也许有人可以帮我修改这段代码,因为我不完全明白如何去做。谢谢

//用于检测触摸输入的类(刷卡专用)
公共类触控输入:单行为{
公共静态事件操作onswip=delegate{};
专用矢量2起始位置;
私有向量2末端位置;
私有浮动移动距离y=0f;
专用浮点移动距离x=0f;
专用SwipeDirection SDDirection=新SwipeDirection();
/// 
///每帧调用一次更新
/// 
私有void更新(){
foreach(输入触摸,触摸){
if(touch.phase==TouchPhase.start){
endPosition=touch.position;
开始位置=触摸位置;
}否则如果(touch.phase==TouchPhase.end){
开始位置=触摸位置;
检测擦拭();
}
}
}
/// 
///处理刷卡检测
/// 
私有void DetectSwipe(){
moveDistanceY=Mathf.Abs(startPosition.y-endPosition.y);
moveDistanceX=Mathf.Abs(startPosition.x-endPosition.x);
如果(移动距离X>20f | |移动距离Y>20f){
如果(移动距离>移动距离X){
SDdirection=startPosition.y-endPosition.y>0?开关方向。向上:开关方向。向下;
SendSwipe(sDirection);
}否则{
SDdirection=startPosition.x-endPosition.x>0?开关方向。右:开关方向。左;
SendSwipe(sDirection);
}
结束位置=开始位置;
}
}
/// 
///将有关刷卡的数据发送到“OnSwipe”委托
/// 
私有void SendSwipe(SwipeDirection dir){
SwipeData SwipeData=新SwipeData(){
方向=方向,
起始位置=起始位置,
结束位置=结束位置
};
OnSwipe(swipeData);
}
使用和相应的回调。这是在Unity3D中为桌面和移动设备进行输入的现代方法。您将使用拖动处理程序。跟踪已拖动的UI元素,仅在每个帧与前一个不同时添加一个

这仍然适用于今天的事件系统

// Class used for detecting touch input (Swipe Exclusive)
public class TouchInput: MonoBehaviour {

    public static event Action<SwipeData> OnSwipe = delegate { };

    private Vector2 startPosition;
    private Vector2 endPosition;

    private float moveDistanceY = 0f;
    private float moveDistanceX = 0f;

    private SwipeDirection sDirection = new SwipeDirection();

    /// <summary>
    /// Update is called once per frame
    /// </summary>
    private void Update() {

        foreach (Touch touch in Input.touches) {

            if (touch.phase == TouchPhase.Began) {

                endPosition = touch.position;
                startPosition = touch.position;


            } else if (touch.phase == TouchPhase.Ended) {

                startPosition = touch.position;
                DetectSwipe();
            }
        }
    }

    /// <summary>
    /// Handles the detection of swipes
    /// </summary>
    private void DetectSwipe() {

        moveDistanceY = Mathf.Abs(startPosition.y - endPosition.y);
        moveDistanceX = Mathf.Abs(startPosition.x - endPosition.x);

        if (moveDistanceX > 20f || moveDistanceY > 20f) {

            if (moveDistanceY > moveDistanceX) {

                sDirection = startPosition.y - endPosition.y > 0 ? SwipeDirection.Up : SwipeDirection.Down;
                SendSwipe(sDirection);

            } else {

                sDirection = startPosition.x - endPosition.x > 0 ? SwipeDirection.Right : SwipeDirection.Left;
                SendSwipe(sDirection);
            }

            endPosition = startPosition;
        }
    }

    /// <summary>
    /// Sends data about the swipe to the "OnSwipe" Delegate
    /// </summary>
    private void SendSwipe(SwipeDirection dir) {

        SwipeData swipeData = new SwipeData() {

            Direction = dir,
            StartPosition = startPosition,
            EndPosition = endPosition
        };

        OnSwipe(swipeData);
    }