creator3d节点方向bug,节点的forward属性的方向和节点z轴朝向写反了

角色移动都是按脸朝向移动的,比如第一人称和第三人称,当然像螃蟹是横着走又是个例外。现在角色模型资源一般是按模型空间的Z轴正方向做默认脸朝向,目前c3d刚好forward是和模型的z轴方向相反的。控制角色按脸朝向移动就要用到forward,所以要做正确的移动要么让美术把模型资源的脸朝向全改成模型的-z方向(工作压力交给美术了),要么就把forward乘以-1再用,这些都能解决问题。

解决问题都是小意思,就是对每个c3d的使用者不好理解forward,特别是u3d转过来的,按u3d那样理解肯定掉坑里

如果你认为角色的forward和camera有关的话,那么场景里把摄像机删除的话是不是角色就不存在forward了。
我做了测试了,无论怎么转摄像机,只要角色角度不动,forward的值永远不变,把摄像机删了,值也不变

好的,咨询一下引擎组的同学。不过从开发者的角度看,始终觉得你们把forward做反了。坐标系用的是右手坐标系,但是计算forward时用了左手坐标系

666,我也有这个疑问,其实像你说的解决问题是有很多办法,但是追根究底这个精神,佩服

只是我个人对待问题的方式,我觉得,应该是引擎方去契合开发者的习惯,而不是让开发者去适应引擎,这样引擎方就不知道开发者的难处,就变成了为自己做引擎而不是为开发者做引擎

我能理解你的困惑,我们的 forward 定义实际上基于右手坐标系的前提下面向屏幕前方的方向,并不是和 Camera 相关,内部之前讨论过,觉得这样做会更符合直觉。同时我们还提供了一个 Vec3.UNIT_Z 的向量是正值。

使用右手系的原因是 Cocos Creator 2.x 中 x, y 平面就是 y 朝上,x 朝右,所以右手系能够保障延续性。

可以看看

Vec3.UNIT_Z 这个是没什么用的,是个常量,角色只要角度转动,forward会一直变。目前只能forward * -1才行

企业微信截图_16099225852537

现在的模型资源,无论是哪个游戏,或者网上下载的模型资源,角色的朝向都是模型的Z正方向。目前为了适应你们的设计,只能forward * -1 得到符合模型的正方向。大家都把forward * -1 那么 forward的直接存在意义就没有了。你们觉得forward还是继续保持现状比较好的话,能不能在node节点上多加个back方向,这样开发者直接用back就好了

u3d的transform就提供有 forward,back, right,up 这些通用方向属性,开发者省去了自己运算。

其实你也没理解对forward,node的forward不是面向平面前方的方向。而是节点相对于世界坐标系的方向。

我把player的节点
角度设置为 (0,0,0) this.node.forward的值是(0,0,-1)
角度设置为 (0,60,0) this.node.forward的值是(-0.86,-1,-0.5)
角度设置为 (0,180,0) this.node.forward的值是(0,0,1)
角度设置为 (0,225,0) this.node.forward的值是(0.707,0,0.707)

你说的forward是指世界坐标的forward,我说的forward是节点自身的forward

我重新找了一下历史,可以在资源生产和导入阶段解决朝向的差异,参考我们的文档

https://docs.cocos.com/creator/3.0/manual/zh/asset/dcc-export-mesh.html?h=导入

使用 -z 作为 forward 只是一个选择,这是为了在右手系中保持 x 朝右,Unity 和 Unreal 是通过使用左手系来让开发者使用更自然,Godot 和我们的选择是一样的,都是右手系,-z 作为 forward

知道你的意思

只是开发者做角色向朝向移动时,只能这样写了

var moveDir = this.player.node.forward.multiplyScalar(-1); // 先反转节点朝向
this.player.node.position = this.player.node.position.add(moveDir.multiplyScalar(速度));//角色往朝向移动

1赞

左右手之争之前论坛有过很多次了。我们由于 Cocos 的历史原因,一直采用的是右手系。
在右手系下,如果 z 朝前,会导致角色的 x 朝左而不是朝右。这个确实会比较反人类。
因此权衡之下,还是让 z 朝后好点。

forward 是朝向 -z 的,不需要取反

取反的目的是拿到和模型坐标系z方向相同的方向,因为角色模型默认就是朝向这个方向的。
你可以自己用3d模型做一个第一人称移动,就知道要不要反转了

这属于模型导入的问题了。这个我们看看能不能尽量优化导入流程吧。目前可以参考文档:
https://docs.cocos.com/creator/3.0/manual/zh/asset/dcc-export-mesh.html?h=导入

就喜欢看你们杠。。。

这个方案我们内部讨论下,谢谢建议,名字可能要斟酌下

1赞

不如周围几个方向都加上

u3d的左手坐标系是 z朝前,x朝右(不是朝左),y朝上,跟你理解的左手坐标系不一样