统一点击移动问题
unity tap mobile issue
我有一个简单的场景,当玩家点击时,球会改变方向 90 度;
我的代码有效,但并不完美,主要问题是 "tap" 检测
需要使用 Coroutine
在点击之间暂停,但 0.25sec
的暂停太大,在某些情况下响应时间很慢,但如果尝试减少暂停时间,它会运行代码快,它不再不同水龙头;
我也尝试过 touch.phase == began
和 touch.phase.Stationary
但这也没有用
我想实现点击的效果,即使你按住它也会改变一次方向。
有没有人有更好的检测点击的解决方案?
using UnityEngine;
using System.Collections;
public class playerController : MonoBehaviour {
public float speed = 2f;
public float tapPauseTime = .25f;
Rigidbody rb;
bool timerOn;
bool goingRight;
void Awake(){
rb = GetComponent<Rigidbody> ();
timerOn = false;
goingRight = false;
}
// Update is called once per frame
void Update ()
{
if (Input.touchCount == 1 && !timerOn && !goingRight) {
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
rb.velocity = new Vector3 (speed, 0, 0);
timerOn = true;
goingRight = true;
StartCoroutine(TapPause());
}
if(Input.touchCount == 1 && !timerOn && goingRight)
{
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
rb.velocity = new Vector3(0,0,speed);
timerOn=true;
goingRight = false;
StartCoroutine(TapPause());
}
}
IEnumerator TapPause(){
yield return new WaitForSeconds(tapPauseTime);
timerOn = false;
}
}
如果您只关心单点触摸事件(即没有多点触摸),Input
中的所有鼠标处理程序都会模拟第一次触摸。因此,您可以使用 Input.GetMouseButtonDown(0)
来查找何时有触摸。此功能只会 return 按下鼠标(或在您的情况下为触摸)发生的帧,并且在释放并再次按下按钮之前不会再次 return 为真。您可以将 if 语句中的 Input.touchCount == 1
替换为 Input.GetMouseButtonDown(0)
来试试这个。
我有一个简单的场景,当玩家点击时,球会改变方向 90 度; 我的代码有效,但并不完美,主要问题是 "tap" 检测
需要使用 Coroutine
在点击之间暂停,但 0.25sec
的暂停太大,在某些情况下响应时间很慢,但如果尝试减少暂停时间,它会运行代码快,它不再不同水龙头;
我也尝试过 touch.phase == began
和 touch.phase.Stationary
但这也没有用
我想实现点击的效果,即使你按住它也会改变一次方向。
有没有人有更好的检测点击的解决方案?
using UnityEngine;
using System.Collections;
public class playerController : MonoBehaviour {
public float speed = 2f;
public float tapPauseTime = .25f;
Rigidbody rb;
bool timerOn;
bool goingRight;
void Awake(){
rb = GetComponent<Rigidbody> ();
timerOn = false;
goingRight = false;
}
// Update is called once per frame
void Update ()
{
if (Input.touchCount == 1 && !timerOn && !goingRight) {
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
rb.velocity = new Vector3 (speed, 0, 0);
timerOn = true;
goingRight = true;
StartCoroutine(TapPause());
}
if(Input.touchCount == 1 && !timerOn && goingRight)
{
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
rb.velocity = new Vector3(0,0,speed);
timerOn=true;
goingRight = false;
StartCoroutine(TapPause());
}
}
IEnumerator TapPause(){
yield return new WaitForSeconds(tapPauseTime);
timerOn = false;
}
}
如果您只关心单点触摸事件(即没有多点触摸),Input
中的所有鼠标处理程序都会模拟第一次触摸。因此,您可以使用 Input.GetMouseButtonDown(0)
来查找何时有触摸。此功能只会 return 按下鼠标(或在您的情况下为触摸)发生的帧,并且在释放并再次按下按钮之前不会再次 return 为真。您可以将 if 语句中的 Input.touchCount == 1
替换为 Input.GetMouseButtonDown(0)
来试试这个。