关于rigidbody, collider和Camera之间的问题,求帮助!

问题描述

在移动手指的时候,路面摄像机进行旋转,而小球永远在最中心,通过路面旋转来营造转向的画面。路面摄像机无限推进,通过路面的不断更新来达到无限长度。
然后在路面上,在路面顶部,未到达路面摄像机的视野外随机点生成障碍物,然后通过障碍物摄像机和路面摄像机的同步运动,来表现障碍物在路面固定,而小球往前走的画面。此时,因为障碍物在随着障碍物摄像机的推进而下落,可障碍物的刚体盒子却留在了原地,哪位大佬知道怎样让刚体跟着所绑定的节点一起运动,都受到摄像机的控制。

示例图片

背景

由路面摄像机进行运动,无限滚动的路面,如图:

隐藏背景后的截图

由于路面的图片会挡住障碍物的刚体,所以隐藏掉路面图,只留下障碍物摄像机运行时候的渲染结果,入下图所示,在最初的时候,障碍物的定位是在整个屏幕的最上方,分辨率为1080*1920,所以障碍物的坐标为【0,960】,在随着障碍物摄像机的往前推进,障碍物的位置不断的往下走,可是刚体却一直在顶部。


在线等,求帮助!SOS!!!急!

来个大佬帮帮忙啊,实在头皮发麻啊…

求帮助啊,求大佬帮助啊,在线等,继续等。。。。

尝试一下 每帧 this.rigidBody.apply()

rigidBody 没有 apply() 这个方法呀???

我整了一个简单的demo,这样估计能够方便理解出的问题:

整个界面,加上了debug绘制:

结构如下:


现在问题简单了,当我移动自定义Camera往上走的时候,那么对应的,在界面上的显示中,box应该是往下,那么box的刚体和collider也应该往下,可是,并没有,如下:


正如图上所看到的一样,我在移动camera的时候,我希望box留在背景世界上,固定。可是图片按照预期的那样,固定在世界了,与box绑定的刚体却跟着Camera移动了,这是为什么??很蒙圈

creator版本?

版本是: 2.1.0

貌似是调试信息显示的问题

我就是在2.1.1上看到了这个问题,以为是调试信息出现的绘制bug,所以才降级到2.1.0的,后来发现,尽管是绘制的盒子在上面,但是碰撞依旧不会产生效果。

CocosDemo.zip (1.5 MB)
这是demo,您看看

没太看懂,给摄像机加刚体和碰撞这是什么操作?

是这样的,现在是需要让摄像机恒定的速度往前推,所以给摄像机加上刚体,但是这个不影响原本box上的刚体啊,按理来说,box固定在世界坐标后,摄像机往前推,对应的渲染结果就是box往下走对吧?现在box往下走了,可是绘制显示他的刚体还停留在屏幕的初始的位置,也就是跟着摄像机往前移动了

从你的代码来看,是给了摄像机上面的刚体组件一个线速度,因此摄像机节点进行了移动


然后摄像机的cullingmask只勾选了foreground

而只有那个block节点的group是foreground,且block节点并不会移动。
因此camera摄像机向下时,block渲染出来的纹理向上移动了,但block节点本身在Canvas下并没有发生移动,因此它的刚体还停留在原地。
而刚体的调试信息是通过一个cc.Graphics去绘制的,这个cc.Graphics的group为default默认值,因此会被mainCamera这个摄像机绘制。

最终的渲染结果是mainCamera和camera两个摄像机绘制的总和,因此会产生你看到的现象

您好,感谢解答,我明白了。不过这就又产生了一个新的问题,那既然这样,那为什么block的绘制纹理不会固定在刚体的位置呢?我应该如何做到,摄像机向下走,block也向下走呢?

block节点的group是foreground
调试信息的cc.Graphcis的group是default
camera的cullingmask是foreground
mainCamera的cullingmask是default

camera向下移动,mainCamera不动。所以纹理会动,而调试信息不动。

需要对Camera理解一下

谢谢,尽管有点蒙,但是很感谢

再次感谢,经过一晚上的抓心挠肝和看了好多demo之后,终于理解了,原谅我自己太笨,新手小白:joy:感谢感谢