c# - 如何在 Unity 3D 上正确配置触摸?
问题描述
我正在 Unity3D 上制作游戏。如图所示,立方体应该移动到某个位置,我实现了这个,但是当我点击屏幕时出现问题,它一次移动了几个位置,我用Debug测试了这种情况。日志(我还附上了照片),如您所见,一键触发该功能多次,如何解决?
PS还可以建议如何在某个坐标中添加立方体运动的平滑度,尝试通过transform.forward,但无法弄清楚如何在正确的坐标处停止它。
private void Update()
{
CubePosUp_Z = transform.position.z - 0.7f;
CubePosDown_Z = transform.position.z + 0.7f;
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.position.y > Screen.height / 2)
{
tempUp = 1;
tempDown = 0;
}
else
{
tempUp = 0;
tempDown = 1;
}
if (tempUp == 1 && tempDown == 0)
{
UpTran();
}
else if (tempUp == 0 && tempDown == 1)
{
DownTran();
}
}
}
void UpTran()
{
Debug.Log("Up");
if (CubePosUp_Z <= -1.4)
{
transform.Translate(0, 0, 0, Space.World);
}
else if (CubePosUp_Z > -1.4)
{
transform.Translate(0, 0, -0.14f, Space.World);
}
}
void DownTran()
{
if (CubePosDown_Z >= 1.4)
{
transform.Translate(0, 0, 0, Space.World);
}
else if (CubePosDown_Z < 1.4)
{
transform.Translate(0, 0, 0.14f, Space.World);
}
}
解决方案
@TheHotboll 这是您的解决方案:-
[SerializeField] float touchForce = 2f;
void Update ()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch (0);
if (touch.phase == TouchPhase.Moved)
{
transform.Translate (0f, 0f, touch.deltaPosition.x * touchForce * Time.deltaTime, Space.World);
}
}
}
首先在Update ()
函数中,我们检查我们是否真的在滑动或只是触摸。如果我们正在滑动,那么我们transform.Translate ()
使用World Space
. 您还可以添加条件并检查touch.deltaPosition.x
. 这将顺利进行。试试看。
推荐阅读
- sql-server - 用于 XML 路径时如何将属性值添加到根元素?
- vba - VBA:将所有工作表文本转换为数字
- java - 如何在页面对象模型上传递变量值
- sql - 在 SQL Server 中使用 JOIN 排除记录
- android - Edujugon 推送通知
- javascript - 在 jquery 中使用“this”设置图像 src
- html - 如何在 html.beginform 中绑定 foreach 方法
- javascript - 当我的异步函数前面没有等待时,try catch 块会捕获错误吗?
- sql - 无法找出转换 sql 附近的错误
- ios - Swift 4 如何从日历中获取所有事件?