使用左/右滑动在 Subway Surf 中移动玩家,例如游戏 [英] Moving player in Subway Surf like game using left/right swipe
问题描述
我正在 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 之间,它表示您的对象在StartPosition
和DestinationPosition
之间的位置.
Number
is between 0 and 1 and it indicates where will be the position of your object betweenStartPosition
andDestinationPosition
.
假设 Number = 0.0f;
:您的对象将位于 StartPosition
.
Lets say Number = 0.0f;
: your object will be at StartPosition
.
如果 Number = 0.5f;
:您的对象将介于 StartPosition
和 DestinationPosition
之间.
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屋!