所以,Unity并没有在android上做很多节奏游戏。我决定找出原因,并将其中一个编程为作业(无论如何都是它的基础)。我最重要的障碍是用户输入。正如我们所知,输入是基于统一的帧速率,而音乐游戏(我假设)更喜欢按钮按下和操作之间的尽可能小的延迟。
如果我们看音乐,在大约 15 到 20 毫秒的延迟时,人耳会听到“不合拍”的声音。
我听说 Android Unity 游戏以 30FPS 运行(因为 60FPS 会耗尽电池电量),简单的数学表明:1000/30 = 33ms 每帧。计算我们可能不会注意到的 15 毫秒,我们处于可能发生灾难的 18 毫秒。假设我们在任何给定时刻总是达到 30FPS。
当我从用户那里获得输入时,我可以在完全相同的帧上根据该输入播放声音。但是,我们可能会延迟 18 毫秒。
现在有一种从鼠标和键盘获取直接控制的方法,它使用 OnGui() 而不是 Update(),当场获取键盘或鼠标点击事件。问题是,android 可能不适用于此,(这也不适用于游戏 handle )并且这些方法听起来非常奇怪,尤其是当我们尝试从 OnGui() 方法播放声音时。
我的问题: 你会怎么做,为什么?我们应该只接受可能的 18 毫秒关闭,并假设我们达到 30FPS,还是应该寻找一种可靠的方式直接获取输入,而不是等待更新的到来?
感谢您给我的任何见解,我还没有找到任何有用的文章。 -笑脸
编辑 我刚刚用节拍器做了一些基本测试,在编辑器中以 100FPS 的速度运行(每帧应该是 10 毫秒),在统一的节拍器上敲击我的空格键。我得到的结果太可怕了。 快速敲击:我的节拍器滴答声接近 20 毫秒,但不会更近。 敲击节拍:我的目标节拍至少有 200 毫秒。除非我对这种节奏感到困惑,否则这是错误的。
目前我使用 Debug.Log 将我的测试数据写入日志。谁能帮我确认这是否是原因(导致长时间延迟?我知道调试没有那么优化),或者时间真的那么糟糕吗?
提前致谢, -笑脸
最佳答案
首先,我想对您的评论和分析补充几点:
测量触觉输入与眼睛感知之间的延迟还有很多事情要做。
在您的测试中,我发现最大的缺失可能是图形卡和您正在测试的 PC 显示器之间的延迟。 Many common LCD monitors these days have a latency of between 15-30ms in processing lag。我不知道这与移动屏幕和硬件有多大关系,但我建议您在得出进一步结论之前花时间对目标硬件执行额外的测试。
更直接地回答您的问题:
我会继续使用 Unity,但我会继续研究获取输入并尽快将其反馈给玩家的最佳方法。在上面的评论中,@rutter 向您指出了一个看起来相当不错的 thread on the issue 。
特别值得注意的是,我会考虑使用 FixedUpdate() 将游戏的帧速率与输入处理速度分离。
我认为花时间研究延迟感知的心理学也是值得的。例如,如果您的游戏是一种与播放歌曲相匹配的吉他英雄游戏,您可以简单地考虑您知道的延迟,并在您的游戏逻辑中检查输入时将其考虑在内。
关于c# - 输入节奏游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984637/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为
我的ruby脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用