微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

精确模拟Unity游戏的xbox控制器

如何解决精确模拟Unity游戏的xbox控制器

我正在尝试通过python模拟控制器,但计时方面存在问题。

我已经成功实现了将输入读取到dictionary中,然后将所有输入收集到一个列表中的功能。我知道游戏(在Unity中)无法识别输入速度超过0.2秒的内容。使用以下功能,我使用以下功能将写入时间控制在0.2s,错误小于0.001s:

def Feed(line: list,interval: float = 0.1.99):
    start = time_ns()
    wait_ns = interval * 10**9
    for moment in list:
        while (time_ns() < start + wait_ns):
            pass
        for key,val in moment:
            controller.set_value(key,val) #this Feeds the keys to the game via pyxinput.

我正在使用与上面类似的功能对输入进行采样。但是,我没有得到正确的行为,似乎时间问题。我尝试读取综合输入,然后以正确的时间(即我传入的间隔(以及上述错误))输入了输入。

作为参考,以下硬编码输入可以正常工作。

controller.set_value('AxisLy',-1) #push the stick down
sleep(0.2)
controller.set_value('AxisLy',0) #return it to neutral

在过去几天与之抗争之后,我机智了。那么,关于可能出什么问题或如何调试的任何想法?

解决方法

请尝试使用Invoke()coroutine而不是在睡眠间隔中进行硬编码。当您想要等待一段时间后,我发现它们非常简单,实用且易于理解。或者,使用Time.time跟踪按钮按下的开始时间,然后检查系统时钟时间是否为(Time.time> = startTime + interval)。

对C#感到抱歉,这是我更熟悉的内容。但您应该能够掌握要点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。