Unity3D中沿手电筒指向到墙面生成检测立方体的实现问题
解决手电筒方向生成检测立方体的问题
先给你揪出两个核心问题,再给你修正后的代码:
- 你的循环条件写反了:
i > rayLength这种写法,i从0开始永远满足不了,得改成i < rayLength,这样才能从0到射线长度的数值循环,每1米生成一个立方体。 - 生成位置的计算逻辑:每个立方体的位置应该是手电筒的起始位置 + 指向方向 × 当前步数i,因为你是每隔1米生成一个,i就是当前距离手电筒的米数。
修正后的完整代码:
// 假设你已经通过射线检测拿到了hit、hitDirection和rayLength for (int i = 0; i < rayLength; i++) { // 计算当前立方体的位置:手电筒位置 + 方向 × 距离(i米) Vector3 spawnPos = flashlight.transform.position + hitDirection * i; Instantiate(visionCube, spawnPos, Quaternion.identity); }
另外补充个小细节:如果rayLength不是整数,比如射线长度是5.3米,上面的循环只会生成0到4米的5个立方体。要是想覆盖到墙面附近,可以把循环改成用float类型的变量来步进,比如:
float step = 1f; // 每隔1米生成一个 for (float distance = 0; distance < rayLength; distance += step) { Vector3 spawnPos = flashlight.transform.position + hitDirection * distance; Instantiate(visionCube, spawnPos, Quaternion.identity); }
这样哪怕rayLength是小数,也能生成到接近墙面的位置。
内容的提问来源于stack exchange,提问作者Blender Vendor
相关产品推荐
相关产品推荐

