Copying and Pasting cs Code

In cs, like in almost any computer programming language, reading data from a file can be tricky. You add extra lines of code to tell the computer what to do. Sometimes you can copy and paste these lines from other peoples’ code.

For example, you can follow the pattern in this listing:

         public Material FixMaterialForMeshRenderer(string objName, Renderer renderer)
         {
             string xmlPath = ImportUtils.GetXmlPath(objName);

             XDocument xml = XDocument.Load(xmlPath);

             // The mesh to match
             string meshName = renderer.name;

             // The mesh name may be decorated by Unity
             string pattern = @"_MeshPart[\d]$";
             Regex regex = new Regex(pattern);
             meshName = regex.Replace(meshName, "");

             var assignMaterials = xml.Root.Elements("AssignMaterial");

             // Find an assignment that matches the mesh renderer
             XElement match = assignMaterials.FirstOrDefault(el => el.Attribute("mesh").Value == meshName);

             if (match == null)
             {
                 // The names of our meshes in the AssignMaterials elements may be wrong
                 // This happened before when Unity replaced whitespace with underscore in our named meshes
                 // That case is handled now, but there may be others
                 StringBuilder builder = new StringBuilder();
                 builder.AppendFormat("Could not find mesh named '{0}' for material matching\n", renderer.name);
                 string choices = String.Join("\n ", assignMaterials.Select(m => m.Attribute("mesh").Value).ToArray());
                 builder.AppendFormat("Choices are:\n {0}", choices);

                 Debug.LogError(builder.ToString());
                 return null;
             }

             string materialName = match.Attribute("material").Value;
             string materialPath = ImportUtils.GetMaterialPath(materialName);

             // Assign the material
             renderer.sharedMaterial = AssetDatabase.LoadAssetAtPath(materialPath, typeof(Material)) as Material;

             // Set the sorting layer for the mesh
             string sortingLayer = match.Attribute("sortingLayerName").Value;
             if (!String.IsNullOrEmpty(sortingLayer) && !SortingLayerExposedEditor.GetSortingLayerNames().Contains(sortingLayer))
             {
                 Debug.LogError(string.Format("Sorting Layer \"{0}\" does not exist. Check your Project Settings -> Tags and Layers", sortingLayer));
                 renderer.sortingLayerName = "Default";
             }
             else
             {
                 renderer.sortingLayerName = sortingLayer;
             }

             // Set the sorting order
             renderer.sortingOrder = ImportUtils.GetAttributeAsInt(match, "sortingOrder");

             // Do we have an alpha color key?
             string htmlColor = ImportUtils.GetAttributeAsString(match, "alphaColorKey", "");
             if (!String.IsNullOrEmpty(htmlColor))
             {
                 // Take for granted color is in the form '#RRGGBB'
                 byte r = byte.Parse(htmlColor.Substring(1, 2), System.Globalization.NumberStyles.HexNumber);
                 byte g = byte.Parse(htmlColor.Substring(3, 2), System.Globalization.NumberStyles.HexNumber);
                 byte b = byte.Parse(htmlColor.Substring(5, 2), System.Globalization.NumberStyles.HexNumber);
                 Color color = new Color32(r, g, b, 255);
                 renderer.sharedMaterial.SetColor("_AlphaColorKey", color);
             }

             return renderer.sharedMaterial;
         }