我試圖從一個選定的頂點中找到相鄰的頂點。這些相鄰頂點必須滿足的一個條件是它們必須與選定的原始頂點高度相同。
我有一個int[] vertices
陣列和一個Dictionary<int, float> plateauDictionary
.
頂點陣列保存整個網格的所有頂點。Dictionary 包含一組高度(y 軸)大于 0.2f 的頂點。
我正在創建大平臺,因此在相同高度找到相鄰頂點應該很容易,因為大多數頂點在相同高度彼此相鄰。
這是我到目前為止寫的:
Matrix4x4 localToWorld = transform.localToWorldMatrix;
Vector3[] worldVectors = new Vector3[totalVertices];
foreach (KeyValuePair<int, float> u in plateauDictionary)
worldVectors[u.Key] = localToWorld.MultiplyPoint3x4(mesh.vertices[u.Key]);
這將回傳一個由每個頂點的所有世界位置組成的 Vector3 陣列。
現在我想隨機選擇一個或幾個,然后獲取相同高度的相鄰頂點的數量,可能是在指定的半徑中還是在鄰居串列中?我該如何解決這個問題?我是 LINQ 的新手,但我認為這可能是要走的路嗎?
提前致謝!
我的其他代碼(對于這個問題并不重要,但為了完整起見):
plateauDictionary = new Dictionary<int, float>();
for (int j = 0; j < plateaus; j )
{
var rndSize = plateauSizes[Random.Range(0, plateauSizes.Length)];
var rndHeight = plateauHeights[Random.Range(0, plateauHeights.Length)];
var rndVertex = ((xSize 2) (Random.Range(0, xSize - rndSize - 1) * (xSize 1)))
Random.Range(0, xSize - rndSize - 1);
plateauVertexArray = new int[rndSize * rndSize];
for (int k = 0, i = 0; k < rndSize; k )
{
for (int l = 0; l < rndSize; l , i )
{
plateauVertexArray[i] = (rndVertex ((xSize 1) * k)) l;
if (!plateauDictionary.ContainsKey(plateauVertexArray[i]))
plateauDictionary.Add(plateauVertexArray[i], rndHeight);
uj5u.com熱心網友回復:
您可以將剩余的 worldVectors.y 值與您選擇的 selectedWorldVector.y 進行比較。我不知道 linq,但我認為如果你想避免其他意大利面條代碼,它是一個不錯的選擇。
除此之外,您還可以在每個頂點世界位置實體化一個空物件,向每個頂點添加一個空框碰撞器,然后使用Raycast.SphereCastAll()
您 selectedWorldVector 位置中的一個。在 SphereCast 中設定您的半徑以查看每個關閉的頂點,然后過濾掉那些太低/太高的頂點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471946.html