You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:02