c# - 如何在 Unity 中为 Android 游戏仅获取 "jump"命令的初始触摸

标签 c# android mobile unity3d

我有这段代码可以让宇宙飞船上升,而不是让重力将它压在地板上。

if (Input.touchCount > 0)
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * force);

但当我在手机上玩游戏时,游戏会跟踪我是否持续按住/触摸屏幕,并根据它增加我向上的力度。这让它变得非常困难,因为它非常敏感,我需要真正集中注意力并快速真正敲击,以免让它 puf 飞上天空(并撞到屋顶上我游戏中的另一个障碍)。

此外,如果你们中的任何人能给我一些关于如何根据设备屏幕缩放 GUI 的指示,我将非常感激,即使有几个教程我似乎也无法弄清楚,我觉得愚蠢。

最佳答案

您可以使用 bool 变量来确保每次触摸只施加一次力。

private bool touchCont = false;
void Update(){
    if (!touchCont && Input.touchCount > 0){
        touchCont = true;
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * force);
    }

    if (Input.touchCount == 0){
        touchCont = false;
    }
}

虽然 FixedUpdate() 通常被推荐用于刚体,但我的算法使用的是 Update(),因为每次更新时触摸事件都会发生变化。这样,在 bool 变量的帮助下,每个新的触摸事件开始时只添加一次力。

或者,如果您想对每个新触摸施加力,即使它们是并发的,您也可以使用 Input.touches 获取所有触摸。如果任何触摸是 TouchPhase.Began,则表示它们刚刚开始。

如果您在代码中设置 GUI 大小,一种使 GUI 缩放的方法是您可以使用例如 Screen.width/8 而不是 200。为了更好地缩放,甚至可以以相同的方式设置字体大小。

关于c# - 如何在 Unity 中为 Android 游戏仅获取 "jump"命令的初始触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419846/

相关文章:

android - Android 中的图库相册列表

android - 为 native 应用程序 webview 设置 cookie

css - 移动设备的 Twitter Bootstrap 和最大宽度?

windows - 为 Windows Phone 7 开发应用程序

c# - Orleans grain 代码中的响应式(Reactive)扩展

c# - 如何从十进制转换为二进制 用 ~ 反转并转换回十进制

Android 数据绑定(bind) build.gradle 同步问题?

java - 如何将日志发送到 JSON Web 服务?

c# - 无法将类型 System.Linq.Expression<System.Func<Object, bool>> 隐式转换为 bool

javascript - 在 ASP.NET 中验证器后显示弹出窗口