想要实现的功能:通过touchMove控制角色的朝向,然后根据当前角色所在的位置及朝向构造一条射线,用该射线去检测角色前方有哪些物体。
问题:在start()中是可以正常检测的,结果也没有问题。
在onTouchMove()检测结果为 false,没有检测到当前角色正前方的物体
构造射线的方法为文档中的方法:
- 通过
起点
+射线上的另一点
,如ray
的静态接口fromPoints
中:
import { geometry, Vec3 } from "cc";
// 构造一条从原点出发,指向 Z 轴的射线
const outRay = new geometry.ray();
geometry.ray.fromPoints(outRay, Vec3.ZERO, Vec3.UNIT_Z);
代码:
//当前脚本挂在角色节点下
//构造射线
let rayStart: Vec3 = this.node.getWorldPosition() //射线起点
let dir: Vec3 = this.node.forward //当前角色的朝向
let rayTartget: Vec3 = new Vec3()
Vec3.multiplyScalar(rayTartget, dir, 10)//射线上的一点 end = start(x, y, z) + 10 * forward(x, y, z);
Vec3.add(rayTartget, rayStart, rayTartget)
let outRay = new geometry.ray();
geometry.ray.fromPoints(outRay, rayStart, rayTartget)