Script for creating decals of any size using a premade mesh you can download here: https://drive.google.com/open?id=1hr6l0HO76g3K7tV3At_Brx29-EHxDVAQ (Based on original script by boformer.)
// Decal Prop Fix Script (based on original script by boformer) | |
// | |
// Removes the need for making a mesh, just import the provided decal mesh | |
// and this script will automatically change the size you set. | |
var size = new Vector2(16.0f, 8.0f); // Size of decal in meters - width and length | |
// (texture width and height will be stretched to match this) | |
var tile = new Vector3(1.0f, 1.0f); // Tiling amount | |
var slopeTolerance = -1.0f; // Box mesh height, leave at a negative value to calculate automatically | |
if (slopeTolerance < 0) slopeTolerance = Mathf.Clamp((size.x + size.y) / 4f, 2f, 32f); | |
var scale = new Vector4(size.x, slopeTolerance, size.y, 0); var tiling = new Vector4(tile.x, 0, tile.y, 0); | |
var asset = ToolsModifierControl.toolController.m_editPrefabInfo as PropInfo; | |
var mesh = asset.m_mesh; var vertices = mesh.vertices; var vertexArray = new Vector3[vertices.Length]; vertices.CopyTo(vertexArray, 0); | |
for (int i = 0; i < vertices.Length; i++) { | |
if (vertexArray[i].x > 0) vertexArray[i].x = scale.x/2f; else vertexArray[i].x = -scale.x/2f; | |
if (vertexArray[i].y > 0) vertexArray[i].y = scale.y/2f; else vertexArray[i].y = -scale.y/2f; | |
if (vertexArray[i].z > 0) vertexArray[i].z = scale.z/2f; else vertexArray[i].z = -scale.z/2f; } | |
mesh.vertices = vertexArray; mesh.RecalculateBounds(); asset.CalculateGeneratedInfo(); | |
var shader = Shader.Find("Custom/Props/Decal/Blend"); var marker = new Color(12f/255, 34f/255, 56f/255, 1f); | |
var data1 = new Color(scale.x/255, scale.y/255, scale.z/255, 1f); var data2 = new Color(tiling.x/255, tiling.y/255, tiling.z/255, 1f); | |
asset.m_material.shader = shader; asset.m_material.SetVector("_DecalSize", scale); asset.m_material.SetVector("_DecalTiling", tiling); | |
asset.m_material.SetColor("_ColorV0", marker); asset.m_material.SetColor("_ColorV1", data1); | |
asset.m_material.SetColor("_ColorV2", data2); asset.m_material.SetColor("_ColorV3", Color.white); | |
asset.m_lodMesh = null; asset.m_lodMaterial = null; asset.m_lodRenderDistance = 1000; | |
typeof(PropInfo).GetField("m_UIEditorCategory", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(asset, "PropsResidentialGroundTiles"); | |
asset.m_createRuining = false; asset.m_useColorVariations = false; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment