unity的引擎有些地方确实是...有些让人蛋疼,连输入都要自己写队列来处理才能变得更精准,否则要面临丢帧就丢输入的窘境。本来我觉得是我使用方法不对,可是事实证明两个fixedupdate中间如果一个update都没执行的话,那输入就丢了【update才是接受input最稳的地方,但是物理效果官方不建议放在update里,卡了的话会看起来很假,官方建议把物理效果计算放在fixedupdate里...那如果我想要用输入控制物理效果,我不得不自己去写一个输入队列,fixupdate里面去判断是不是所有输入都被处理过了...这很让人失落的】

如果做精准的动作游戏或者格斗类游戏,这个输入处理就显得太low 了。

怎么不内置一个安全的输入队列呢,明明很好实现。
微博 微信 tilerphy 2017-11-19 01:08   15回复
评论
为什么这些汉字组合起来我就看不懂了
nimamazhale 2017-11-19 01:18
@nimamazhale 还不睡
tilerphy 2017-11-19 01:24
今天去了趟unity的大楼
ryougiazaka 2017-11-19 01:34
@tilerphy 一起秃吧
nimamazhale 2017-11-19 01:38
tilerphy 2017-11-19 06:35
应该说unity本身不是特别强大,但是大量的插件让它很优秀。正如atom一样。
god_help_sakula 2017-11-21 09:01
@god_help_sakula 越深入 越觉得坑多
tilerphy 2017-11-21 09:40
@tilerphy 之前写一个简单的弹球,要求速度要很高,但是速度一高就丢判断经常跑出边框,改了很多参数也没用,最后直接用win32写了。。。
god_help_sakula 2017-11-21 09:55
Unity的祖传穿模
mikimiki205 2017-11-21 09:57
@god_help_sakula @mikimiki205  这种我也遇到了,即使碰撞从离散改成连续,也不行。 还好2D里面可以通过z,y来判断位置,否则也是抓瞎。
tilerphy 2017-11-21 13:58
@tilerphy 楼主产生这样的错觉也是在所难免,大部分游戏引擎都允许用户逐帧操作,这是算是一种特性和优势吧。我可以推荐一本《3D游戏编程大师技巧》,可以看看。
相反,我觉得MonoBehavior提供的几个生命周期函数都是挺好用的,否则只有Update,假如载入资源的时候卡了1秒,这所有的物理计算不都丢了1秒吗?写一个InputManager封装一下当然是必然之举,而且架构更好,咋说来着,低耦合高内聚嘛。两种办法,第一种是每fixedupdate去InputManager查询下输入队列队首元素,另一种是在Update里给需要操作的东西调整运动趋势,前者架构好,后者直观。
至于高速碰撞的检测,不靠自带的物理引擎而是靠自己的数学方法会好一点,可以用QuadTree来做碰撞检测,用每帧首尾两端的运动轨迹构成一个Rect代入查询,就可以方便的查询到这个rect内所包含的所有碰撞,而且效率贼鸡儿高,不妨试试,原理附上
总之做游戏开发不要太想当然了,看到一个特性觉得它不好用,可能是你没找到正确的打开方式,总之,想得太多,写得太少,跟楼主共勉。
sakura_p789cs 2017-11-21 15:28修改
@sakura_p789cs 我纠结的是,为什么Unity没有直接的提供一个Input的安全封装。至于那个高速碰撞,我已经自行改成了2D的四分法,所以没有碰到祖传穿模。
tilerphy 2017-11-21 16:30
@tilerphy 我倒没看出Input不安全在哪,正因为它每个生命周期函数都可以接受输入,可控性才高。你想做个面包,卖面粉的总不能给你面团吧,如果要面团也可以,去找封装得更高级的引擎
sakura_p789cs 2017-11-21 16:42
tilerphy 2017-11-21 16:43
感觉是一个空闲情况下线程才会执行的回调函数。这样确实有问题。这类时分引擎都有一个问题就是优先度问题,不可能每一个线程都是最优先的,当速度非常快,或者精度要求高效果很差,的只能用全局引擎,这样效率又下来了。所以要局部平衡。
mastman429 2017-11-22 10:51修改
回复不能
T