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

查看:24
本文介绍了使用左/右滑动在 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.

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

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

您应该在滑动操作开始时设置一次 StartPosition,不要在 Vector3.Slerp()<中重复设置 transform.position/code> 函数.

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.

希望这有帮助!干杯!

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

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