找到了tile生成時位置錯亂的原因,還是因為進位造成的問題。A★內部是用整數的Vector3Int存位置,但這個值應該是直接用Vector3的值乘上1000,也就是原先浮點數有的誤差是會被記下來的。之前沒有注意到,所有的值都往上提到下一個位置,而沒有比較該值比較接近這個或是下一個位置的值。修改過後的程式碼片段如下
var adjustedX = Mathf.Abs(gridNode.position.x) % 4000;
var xOffsetTo4000 = 0;
if (adjustedX > 2000)
{
xOffsetTo4000 = 4000 - adjustedX;
if (gridNode.position.x < 0)
{
adjustedX = (gridNode.position.x) - xOffsetTo4000;
}
else
{
adjustedX = (gridNode.position.x) + xOffsetTo4000;
}
}
else
{
xOffsetTo4000 = adjustedX;
if (gridNode.position.x < 0)
{
adjustedX = (gridNode.position.x) + xOffsetTo4000;
}
else
{
adjustedX = (gridNode.position.x) - xOffsetTo4000;
}
}
而後再搭配一連串沒有整理過的運算,用Tile拼出整個房間的佈置。
目前的結果看起來如下
比對Unity Editor裡3D的上視圖
比對的結果很相似,一些地方還要再修正,不過多數情況下不會有太大的影響,日後再進行修正。
將Render Texture放到第二個專門拿來看MiniMap的Camera裡,放利用Raw Image呈現render texture可以看到MiniMap大致有個雛形出現
實際的地圖
特定將MiniMap的可視範圍限制在九宮格的大小裡,而按押此MiniMap後則會出現較大的map,以方便觀看更多的資訊。
接下來需要調整的部份包含了MiniMap的呈現顏色、Icon和通道的內外區分方式,也或許會慢慢的把Fog of War加進來,但實際會如何呈現還待發想。
日前將可使用的道具加入後沒特別注意,但道具呈現時Use是灰色的,也就是無法按下去的狀態。UI上可以顯示代表UIS的流程沒有錯,今天也再花一些時間了解是什麼原因造成無法使用道具。
仔細比對UIS的Demo後才發現現在用的那個Item Action和物品使用是沒有關係的,使用這個動作在UIS裡沒有提供,只有Demo裡才有,且名稱為Consume,而不是Use,之前沒有注意到這中間的差異。UIS裡內含的Use是一個看文件也不是很清楚在做什麼的動作。
之後看直接用Sample裡的Consume還是再額外寫一個來用。