使用向左/向右滑动在Subway Surf中像游戏一样移动玩家 [英] Moving player in Subway Surf like game using left/right swipe

查看:86
本文介绍了使用向左/向右滑动在Subway Surf中像游戏一样移动玩家的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发无尽的亚军游戏,例如Unity中的地铁冲浪者. 我想在向左或向右滑动时平稳地移动播放器. 怎么办 这是我的代码:

I am developing endless runner game like subway surfer in Unity. I want to move my player, smoothly on swipe left or right. How can do it? Here is my code:

using UnityEngine;
using System.Collections;

public class SwipeScript3 : MonoBehaviour {

private Touch initialTouch = new Touch();
private float distance = 0;
private bool hasSwiped = false;
//Quaternion targetx = Quaternion.Euler(0, -3f, 0);
//Quaternion targety = Quaternion.Euler(0, 3f, 0);

void FixedUpdate()
{
    foreach(Touch t in Input.touches)
    {
        if (t.phase == TouchPhase.Began)
        {
            initialTouch = t;
        }
        else if (t.phase == TouchPhase.Moved && !hasSwiped)
        {
            float deltaX = initialTouch.position.x - t.position.x;
            float deltaY = initialTouch.position.y - t.position.y;
            distance = Mathf.Sqrt((deltaX * deltaX) + (deltaY * deltaY));
            bool swipedSideways = Mathf.Abs(deltaX) > Mathf.Abs(deltaY);

            if (distance > 50f)
            {
                if (swipedSideways && deltaX > 0) //swiped left
                {

                    //transform.rotation = Quaternion.Slerp (transform.rotation, targetx, Time.deltaTime * 0.8f);
                    this.transform.Rotate(new Vector3(0, -3f, 0)*Time.deltaTime);
                    //transform.position = Vector3.Lerp (transform.position,new Vector3(transform.position.x+5f,transform.position.y,transform.position.z),Time.deltaTime*2f );
                    transform.position = Vector3.Lerp (transform.position, new Vector3 (transform.position.x - 5f, transform.position.y, transform.position.z), Time.deltaTime * 5f);
                }
                else if (swipedSideways && deltaX <= 0) //swiped right
                {
                    //transform.rotation = Quaternion.Slerp (transform.rotation, targety, Time.deltaTime * 0.8f);
                    this.transform.Rotate(new Vector3(0, 3f, 0)*Time.deltaTime);
                    //transform.position = Vector3.Lerp (transform.position, new Vector3 (transform.position.x - 5f, transform.position.y, transform.position.z), Time.deltaTime * f);
                    transform.position = Vector3.Lerp (transform.position,new Vector3(transform.position.x+5f,transform.position.y,transform.position.z),Time.deltaTime*5f );
                }
                else if (!swipedSideways && deltaY > 0) //swiped down
                {
                    //this.transform.Rotate(new Vector3(0, 2f, 0));
                    transform.position = Vector3.Lerp (transform.position,new Vector3(transform.position.x,transform.position.y,transform.position.z-5f),Time.deltaTime*2f );
                }
                else if (!swipedSideways && deltaY <= 0)  //swiped up
                {
                    this.GetComponent<Rigidbody>().velocity = new Vector3(this.GetComponent<Rigidbody>().velocity.x, 0, this.GetComponent<Rigidbody>().velocity.z);
                    this.GetComponent<Rigidbody>().AddForce(new Vector3(0, 400f, 0));
                    Debug.Log ("Swiped Up");
                }

                hasSwiped = true;
            }

        }
        else if (t.phase == TouchPhase.Ended)
        {
            initialTouch = new Touch();
            hasSwiped = false;
        }
    }
}
}

推荐答案

您可以使用Vector3.Slerp(Vector3 StartPosition, Vector3 DestinationPosition, float Number)

  • Number在0和1之间,它指示对象在StartPositionDestinationPosition之间的位置.

  • Number is between 0 and 1 and it indicates where will be the position of your object between StartPosition and DestinationPosition.

让我们说Number = 0.0f;:您的对象将位于StartPosition.

Lets say Number = 0.0f;: your object will be at StartPosition.

如果为Number = 0.5f;:您的对象将位于StartPositionDestinationPosition之间.

If Number = 0.5f;: your object will be between StartPosition and DestinationPosition.

执行滑动操作时,您需要将Number的值从0增加到1.

You need to increase the Number value from 0 to 1 when swipe action is performed.

增加"Number"值的速度越快,对象向目的地"移动的速度就越快.

The faster you increase the "Number" value, the faster your object will move towards Destination.

您应该在滑动操作开始时将您设置为StartPosition一次,而不要在Vector3.Slerp()函数中反复输入transform.position.

You should set you StartPosition once when the swipe action begins, not give your transform.position repeatedly in your Vector3.Slerp() function.

您可以在Unity文档中的此处中找到示例.

You can find an example here in Unity Docs.

希望这会有所帮助!干杯!

Hope this helps! Cheers!

这篇关于使用向左/向右滑动在Subway Surf中像游戏一样移动玩家的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆