[LayaAir 2.0]laya 3D碰撞器与 Unity 不一致问题

Laya 碰撞器偏移Bug一
首先为下图上面的Cube添加 Box碰撞器和钢体
当cube scale为 1 :1:1时将图中上方的Cube碰撞器偏移 laya预览效果与Unity运行效果一致
 
clipboard.png


将下图上方的cube Transform属性的Scale 设置为5:1:1的比例将X轴 Scale 拉伸5倍后 再讲BoxCollider的Center属性 x 设置为偏移 -0.3 得到如下效果

clipborfard.png


clipboaryd.png


 

 
接下来我们来看看unity 的运行效果:
unity 运行效果图:

clittpboard.png


再来看看laya 的预览效果
偏移出去的碰撞器像没了效果一样

clipbrroard.png


由此得出结论 在Untiy 缩放过的物体 的碰撞器导入到 laya 中 Center 属性时有Bug的

 
 
Laya 碰撞器偏移Bug二
首先为下图的笔记本电脑添加 Unity 的 Box碰撞器和钢体
 

cliprrboard.png


然后我们点击运行看看Unity 的效果
我们可以看到笔记本稳稳地落在Cube上

cliprboard.png


我们再来看看在Laya上的运行效果
笔记本直接穿过了 带有碰撞器的Cube

clggripboard.png


 
最后找到的一个原因就是
美术给我的模型 Pivot并不在模型显示的位置 laya 有可能是根据锚点的位置来绘制碰撞盒的。这问题跟Unity上的差距实在是无解
由此得出结论: laya 绘制碰撞器是根据物体在unity中的Pivot锚点位置来绘制碰撞盒的 跟Unity 的效果有一定差距

不知道是不是我操作问题,希望各位能给我解决方案,怎么然效果保持一致???
所以希望官方早日更正这两点问题 增加我们的开发效率,避免后面的同志踩同意的抗
clipboargrrd.png
已邀请:

Yarpee

赞同来自: SkyWalker

Laya没有考虑Collider所在Transform的Scale导致的,可以修改laya.d3.js文件里的_innerDerivePhysicsTransformation方法,加粗部分为补丁:
if (shapeOffset.x !== 0 || shapeOffset.y !== 0 || shapeOffset.z !== 0) {
                var physicPosition = PhysicsComponent._tempVector30;
                shapeOffset.x *= transform.getWorldLossyScale().x;
                shapeOffset.y *= transform.getWorldLossyScale().y;
                shapeOffset.z *= transform.getWorldLossyScale().z;
                PhysicsComponent.physicVector3TransformQuat(shapeOffset, rotation.x, rotation.y, rotation.z, rotation.w, physicPosition);
                Vector3.add(position, physicPosition, physicPosition);
                nativePosition.setValue(-physicPosition.x, physicPosition.y, physicPosition.z);
}

Aar0n

赞同来自: 小智队长

用2.3 换试试

小智队长

赞同来自:

出了 Center 归 0 还有什么方法能解决吗

Aar0n

赞同来自:

把引擎库的这个类替换一下看看

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作