// Currently shiftAmount needs to be 1 or -1 // Larger / smaller values won't work properly public void ShiftLayer(TexPaintLayer layer, int shiftAmount) { if (layer.locked) { return; } int oldIndex = layer.transform.GetSiblingIndex(); int newIndex = oldIndex + shiftAmount; if (newIndex >= 0 && newIndex < layersList.transform.childCount) { TexPaintLayer otherLayer = layersList.transform.GetChild(newIndex).GetComponent <TexPaintLayer>(); if (otherLayer.locked) { return; } // Move the layer layer.transform.SetSiblingIndex(newIndex); // Update terrain material SetPaintTexture(newIndex, layer.assignedTexture.texture2D); SetPaintMask(newIndex, layer.mask); SetPaintTexture(oldIndex, otherLayer.assignedTexture.texture2D); SetPaintMask(oldIndex, otherLayer.mask); } }
public void AddLayer(string name, bool locked = false) { if (GetNumberOfLayers() >= 32) { return; } TexPaintLayer layer = Instantiate(layerPrefab, layersList.transform); layer.managerInstance = this; layer.locked = locked; layer.mask = new Texture2D(128, 128); layer.mask.SetPixels(new Color[128 * 128]); layer.SetTexture(activeTexture); layer.SetName(name); layer.Select(); RefreshTerrainShader(); int index = layer.transform.GetSiblingIndex(); SetPaintTexture(index, layer.assignedTexture.texture2D); SetPaintMask(index, layer.mask); }