【问题标题】:How to only get the initial touch for a "jump" command for an Android game in Unity如何在 Unity 中仅获得 Android 游戏“跳转”命令的初始触摸
【发布时间】:2015-05-24 03:40:59
【问题描述】:

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

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

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

另外,如果你们中的任何人都可以给我一些关于如何根据设备屏幕制作 GUI 缩放的指示,我真的很感激,即使有几个教程,我似乎也无法弄清楚,我觉得笨蛋。

【问题讨论】:

  • 该代码在您的Update()FixedUpdate() 中吗?刚体应该使用后者。 docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html
  • @MickyDuncan 你是对的,我错了。尽管如此,这艘船在桌面上玩时用“300”的力量还是不错的,但出于某种原因,我确信这对有经验的人来说是显而易见的,当去移动设备时,我必须使用“20”的力量来做到这一点可玩。有没有办法让游戏在我做一次后停止注册触摸?
  • 好。我会说,一旦你计算出 GUI 缩放比例,力量可能会到位。例如仅仅因为屏幕尺寸是 640x480 而不是 1080p 而改变重力对我来说没有直接意义。然后我可能又错了。速度通常以像素/秒表示。也许您的最大速度应该是屏幕分辨率的函数?祝你好运

标签: c# android mobile unity3d


【解决方案1】:

您可以使用布尔变量来确保每次触摸仅施加一次力。

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(),因为每次更新时触摸事件都会发生变化。这样,在布尔变量的帮助下,每次触摸事件的新开始只添加一次力。

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

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

【讨论】:

  • OP 声明“游戏正在跟踪我是否一直按下/触摸屏幕”。我认为您的代码将具有if (Input.touchCount &gt; 0) OP 代码的净效应。这也违反了 Unity 的 FixedUpdate should be used instead of Update when dealing with Rigidbody 准则
  • 我的代码最好使用Update,因为Touch 事件是在非常更新时更新的,而不是每个fixedUpdate。 "its suggested you make all the Input Calls in the Update Loop." 净影响是指两次触摸我的代码会增加两次力吗?它没有这样做,因为它只在每次更新时调用一次,并使用标志变量来避免这种情况。
  • @maZZZu 我会稍微调整一下你的建议。 GUI,我实际上用screen.width/height设置了它,但字体仍然很小。这就像我正在缩放标签和按钮的位置而不是字体,所以它们的位置很好但看起来太小了。
  • 您也可以将字体大小设置为屏幕大小的比例。
  • 关于Update() 期间的触摸事件的好点。也许我们需要在Update() 期间读取输入,设置touchCont 但在FixedUpdate() 期间执行强制。如果您对您的问题进行任何编辑,我将撤消否决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多