我试图使用递归来调用方法CreateFinalPath()
但Unity第二次调用方法Test()
时会冻结。
你知道问题是什么吗?
我几乎尝试了一切,不知道发生了什么。
public class SplinePlus : MonoBehaviour
{
int h = 0;
public void Test()
{
FinalPath.Vertices.Clear();
FinalPath.Tangents.Clear();
FinalPath.Normals.Clear();
CreateFinalPath();
}
private void CreateFinalPath()
{
for (int i = 0; i < Branches[h].Vertices.Count; i++)// branch vertices
{
for (int n = 0; n < SharedNodes.Count; n++) // shared nodes loop
{
if (SharedNodes[n].Nodes.Point.position == Branches[h].Vertices[i]) // shared node detected , see next branch to take
{
h = SharedNodes[n].BranchToFollow; // next branch ID to take
CreateFinalPath(); // trigger data storage for the new branch in Final path class
break;
}
}
// data storage in finalpath class
FinalPath.Vertices.Add(Branches[h].Vertices[i]);
FinalPath.Normals.Add(Branches[h].Normals[i]);
FinalPath.Tangents.Add(Branches[h].Tangents[i]);
}
}
}
public class FinalPath
{
public List<Vector3> Vertices = new List<Vector3>();
public List<Vector3> Tangents = new List<Vector3>();
public List<Vector3> Normals = new List<Vector3>();
}
public class Branches
{
public List<Vector3> Vertices = new List<Vector3>();
public List<Vector3> Tangents = new List<Vector3>();
public List<Vector3> Normals = new List<Vector3>();
public List<PathPoint> PathPoints = new List<PathPoint>();
}
[System.Serializable]
public class SharedNodesData
{
public PathPoint Nodes = new PathPoint();
public List<string> ConnectedBranches = new List<string>();
public int BranchToFollow = 0;
}
UPDATE2
所以我要做的就是为一个基于复杂路径系统的gameObject跟随者创建一个最终路径,其中有一个主分支(红色)和子分支(黄色),可以无限制号。
共享节点是在它们之上有数字的点,我首先在主分支中循环寻找共享节点,一旦找到一个节点,我就可以得到下一个分支索引来定义用户在检查员中。我影响到了&#34; h&#34;并调用CreateFinalPath()
为下一个分支做同样的事情,直到我得到最后的完整路径。
答案 0 :(得分:0)
我对你的代码了解很多,但也许你需要这样的东西
public class Branches
{
public List<Vector3> Vertices = new List<Vector3>();
public List<Vector3> Tangents = new List<Vector3>();
public List<Vector3> Normals = new List<Vector3>();
public List<PathPoint> PathPoints = new List<PathPoint>();
public bool visited = false;
}
private void CreateFinalPath()
{
for (int i = 0; i < Branches[h].Vertices.Count; i++)// branch vertices
{
for (int n = 0; n < SharedNodes.Count; n++) // shared nodes loop
{
if (!Branches[h].visited && SharedNodes[n].Nodes.Point.position == Branches[h].Vertices[i]) // shared node detected , see next branch to take
{
Branches[h].visited = true;
h = SharedNodes[n].BranchToFollow; // next branch ID to take
CreateFinalPath(); // trigger data storage for the new branch in Final path class
break;
}
}
// data storage in finalpath class
FinalPath.Vertices.Add(Branches[h].Vertices[i]);
FinalPath.Normals.Add(Branches[h].Normals[i]);
FinalPath.Tangents.Add(Branches[h].Tangents[i]);
}
}