touchMove使用的疑问

以下代码中getLocation获取的世界坐标经过节点坐标转换后,再赋值给PLAYER节点,PLAYER拖动时始终有偏移,默认描点都是0.5的,不知道如何进行调整修复这个偏移
touchMove(event) {

    let rootNode = window.rootui as Node

    var w_pos = event.getLocation();

    let nodePs = rootNode.getComponent(UITransform).convertToNodeSpaceAR(new Vec3(w_pos.x, w_pos.y, 0))


    this.playerNode.setPosition(nodePs)

    

}

你的playerNode是UITransform的子节点吗?试试let nodePs = this.playerNode.parent.convertToNodeSpaceAR(new Vec3(w_pos.x, w_pos.y, 0))
this.playerNode.setPosition(nodePs)

event.getLocation()获取的不是世界坐标,而是摄像机坐标,需要将摄像机坐标转换成世界坐标之后再将世界坐标转换成相对坐标。
我之前遇到的情况可能和你一样,你可以试一下这个方法:

window.rootui是playerNode的父节点

那你获取这个脚本是什么操作?getComponent(UITransform),他是个node?如果不是那你直接rootNode.convertToNodeSpaceAR(new Vec3(w_pos.x, w_pos.y, 0))不就好了?

UITransform 是在CREATOR 3.0中的节点组件,convertToNodeSpaceAR方法只能在这个组件中使用的

你使用getLocation只有在起始 touch 点在图片的锚点的时候,才会在开始移动时没有偏移,而且这个偏移的值就是你 touch 点和锚点的差值,你应该使用 getDelta,然后坐标直接加上 delta 值就会移动的很平滑