Tôi có một tập lệnh mà tôi thêm một đối tượng Địa hình (Tôi kéo và thả địa hình trong trường Địa hình công cộng).
Địa hình đã được thiết lập trong Unity để có 2 PaintTextures: 1 là Hình vuông (được thiết lập với kích thước ô sao cho hình thành mô hình rô) và hình thứ hai là hình ảnh cỏ:
Ngoài ra, Sức mạnh mục tiêu của PaintTexture đầu tiên được hạ xuống để mô hình rô cũng lộ ra một số cỏ bên dưới.
Bây giờ tôi muốn, trong thời gian chạy, để thay đổi Kích thước Ngói của PaintTexture đầu tiên, tức là có nhiều trình kiểm tra tùy thuộc vào các điều kiện thời gian chạy khác nhau. Tôi đã xem qua tài liệu của Unity và tôi thấy bạn có Terrain.terrainData.SplatPrototype
mảng cho phép bạn thay đổi điều này. Ngoài ra có một RefreshPrototypes()
phương thức trên terrainData
đối tượng và một Flush()
phương thức trên Terrain
đối tượng. Vì vậy, tôi đã thực hiện một kịch bản như thế này:
public class AStarTerrain : MonoBehaviour {
public int aStarCellColumns, aStarCellRows;
public GameObject aStarCellHighlightPrefab;
public GameObject aStarPathMarkerPrefab;
public GameObject utilityRobotPrefab;
public Terrain aStarTerrain;
void Start () {
//I've also tried NOT drag and dropping the Terrain on the public field
//and instead just using the commented line below, but I get the same results
//aStarTerrain = this.GetComponents<Terrain>()[0];
Debug.Log ("Got terrain "+aStarTerrain.name);
SplatPrototype[] splatPrototypes = aStarTerrain.terrainData.splatPrototypes;
Debug.Log("Terrain has "+splatPrototypes.Length+" splat prototypes");
SplatPrototype aStarCellSplat = splatPrototypes[0];
Debug.Log("Re-tyling splat prototype "+aStarCellSplat.texture.name);
aStarCellSplat.tileSize = new Vector2(2000,2000);
Debug.Log("Tyling is now "+aStarCellSplat.tileSize.x+"/"+aStarCellSplat.tileSize.y);
aStarTerrain.terrainData.RefreshPrototypes();
aStarTerrain.Flush();
}
//...
Vấn đề là, không có gì được thay đổi, bản đồ kiểm tra không được lát lại. Bảng điều khiển xuất ra một cách chính xác cho tôi biết rằng tôi đã có đối tượng Địa hình với đúng tên, rằng nó có đúng số nguyên mẫu splat và tôi đang sửa đổi kích thước ô trên đối tượng SplatPrototype tương ứng với kết cấu bên phải. Nó cũng cho tôi biết giá trị đã thay đổi. Nhưng không có gì được cập nhật trong chế độ xem đồ họa thực tế.
Vì vậy, xin vui lòng, tôi đang thiếu gì?