目录 / calculdechemindescalade3dsurmesh
calculdechemindescalade3dsurmesh
生成一个C#算法,用于在Unity中计算3D网格(如山体或悬崖)上两点之间的攀爬路径。该算法通过平面投影和射线检测(raycasts)确保路径为直线且可通行。 ```csharp using UnityEngine; using System.Collections.Generic; public class ClimbingPathCalculator : MonoBehaviour { [Header("参数设置")] public LayerMask climbableLayer; // 可攀爬表面的层级 public float raycastDistance = 10f; // 射线检测距离 public int maxIterations = 100; // 最大迭代次数(防止无限循环) public float stepHeight = 0.5f; // 每一步的垂直高度增量 public float horizontalStep = 0.3f; // 水平方向步长 /// <summary> /// 计算从起点到终点的攀爬路径 /// </summary> /// <param name="start">起始点(世界坐标)</param> /// <param name="end">目标点(世界坐标)</param> /// <returns>返回路径点列表,若失败则返回空列表</returns> public List<Vector3> CalculateClimbingPath(Vector3 start, Vector3 end) { List<Vector3> path = new List<Vector3>(); path.Add(start); Vector3 currentPos = start; Vector3 direction = (end - start).normalized; float totalDistance = Vector3.Distance(start, end); float traveledDistance = 0f; for (int i = 0; i < maxIterations && traveledDistance < totalDistance; i++) { // 平面投影:在当前前进方向上移动一小步 Vector3 nextHorizontalPos = currentPos + direction * horizontalStep; // 向下发射射线,检测可攀爬表面 if (Physics.Raycast(nextHorizontalPos + Vector3.up * stepHeight, Vector3.down, out RaycastHit hit, raycastDistance, climbableLayer)) { // 确保命中点在目标方向前方 float hitDistance = Vector3.Distance(start, hit.point); if (hitDistance > traveledDistance) { path.Add(hit.point); currentPos = hit.point; traveledDistance = hitDistance; // 检查是否接近终点 if (Vector3.Distance(currentPos, end) < horizontalStep) { path.Add(end); break; } } else ...
这是模型对公开材料的总结,不是官方声明,请以原链内容为准。
存档时间线
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-11-13 13:08 | 80b10a9e | 可取 |
版本索引永久保留;内容副本只保留最新 1 份,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。