title: The type or namespace name `UnityEditor' could not be found
body: <p>Pls help me correct this problem.</p>
  
  <p>Assets/Menu.cs(97,73): warning CS0618: <code>UnityEditor.EditorUtility.GetAssetPath(UnityEngine.Object)' is obsolete:</code>Use AssetDatabase.GetAssetPath'</p>
  
  <p>Error building Player because scripts had compiler errors</p>
  
  <p>Assets/Menu.cs(2,7): error CS0246: The type or namespace name `UnityEditor' could not be found. Are you missing a using directive or an assembly reference?</p>
  
  <pre><code>using UnityEngine;
  using UnityEditor;
  using System.Collections;
  using System.Collections.Generic;
  using System.IO;
  using System.Text;
  using System;
  using System.Linq;
  
  struct ObjMaterial
  {
      public string name;
      public string textureName;
  }
  
  public class Menu : MonoBehaviour { 
  
      public int window; 
  
      void Start () { 
          window = 1;
  
      } 
  
      private static int vertexOffset = 0;
      private static int normalOffset = 0;
      private static int uvOffset = 0;
  
  
      //User should probably be able to change this. It is currently left as an excercise for
      //the reader.
      private static string targetFolder = "ExportedObj";
  
  
      private static string MeshToString(Component mf, Dictionary&lt;string, ObjMaterial&gt; materialList) 
      {
  
  
  
          Mesh m;
          Material[] mats;
  
          if(mf is MeshFilter)
          {
              m = (mf as MeshFilter).mesh;
              mats = mf.GetComponent&lt;Renderer&gt;().sharedMaterials;
          }
          else if(mf is SkinnedMeshRenderer)
          {
              m = (mf as SkinnedMeshRenderer).sharedMesh;
              mats = (mf as SkinnedMeshRenderer).sharedMaterials;
          }
          else
          {
              return "";
          }
  
          StringBuilder sb = new StringBuilder();
  
          sb.Append("g ").Append(mf.name).Append("\n");
          foreach(Vector3 lv in m.vertices) 
          {
              Vector3 wv = mf.transform.TransformPoint(lv);
  
              //This is sort of ugly - inverting x-component since we're in
              //a different coordinate system than "everyone" is "used to".
              sb.Append(string.Format("v {0} {1} {2}\n",-wv.x,wv.y,wv.z));
          }
          sb.Append("\n");
  
          foreach(Vector3 lv in m.normals) 
          {
              Vector3 wv = mf.transform.TransformDirection(lv);
  
              sb.Append(string.Format("vn {0} {1} {2}\n",-wv.x,wv.y,wv.z));
          }
          sb.Append("\n");
  
          foreach(Vector3 v in m.uv) 
          {
              sb.Append(string.Format("vt {0} {1}\n",v.x,v.y));
          }
  
          for (int material=0; material &lt; m.subMeshCount; material ++) {
              sb.Append("\n");
              sb.Append("usemtl ").Append(mats[material].name).Append("\n");
              sb.Append("usemap ").Append(mats[material].name).Append("\n");
  
              //See if this material is already in the materiallist.
              try
              {
                  ObjMaterial objMaterial = new ObjMaterial();
  
                  objMaterial.name = mats[material].name;
  
  
                  objMaterial.textureName = EditorUtility.GetAssetPath(mats[material].mainTexture);
                  //else 
                      //objMaterial.textureName = null;
  
                  materialList.Add(objMaterial.name, objMaterial);
              }
              catch (ArgumentException)
              {
                  //Already in the dictionary
              }
  
  
              int[] triangles = m.GetTriangles(material);
              for (int i=0;i&lt;triangles.Length;i+=3) 
              {
                  //Because we inverted the x-component, we also needed to alter the triangle winding.
                  sb.Append(string.Format("f {1}/{1}/{1} {0}/{0}/{0} {2}/{2}/{2}\n", 
                      triangles[i]+1 + vertexOffset, triangles[i+1]+1 + normalOffset, triangles[i+2]+1 + uvOffset));
              }
          }
  
          vertexOffset += m.vertices.Length;
          normalOffset += m.normals.Length;
          uvOffset += m.uv.Length;
  
          return sb.ToString();
      }
  
      private static void Clear()
      {
          vertexOffset = 0;
          normalOffset = 0;
          uvOffset = 0;
      }
  
      private static Dictionary&lt;string, ObjMaterial&gt; PrepareFileWrite()
      {
          Clear();
  
          return new Dictionary&lt;string, ObjMaterial&gt;();
      }
  
      private static void MaterialsToFile(Dictionary&lt;string, ObjMaterial&gt; materialList, string folder, string filename)
      {
          using (StreamWriter sw = new StreamWriter(folder + "/" + filename + ".mtl")) 
          {
              foreach( KeyValuePair&lt;string, ObjMaterial&gt; kvp in materialList )
              {
                  sw.Write("\n");
                  sw.Write("newmtl {0}\n", kvp.Key);
                  sw.Write("Ka  0.6 0.6 0.6\n");
                  sw.Write("Kd  0.6 0.6 0.6\n");
                  sw.Write("Ks  0.9 0.9 0.9\n");
                  sw.Write("d  1.0\n");
                  sw.Write("Ns  0.0\n");
                  sw.Write("illum 2\n");
  
                  if (kvp.Value.textureName != null)
                  {
                      string destinationFile = kvp.Value.textureName;
  
  
                      int stripIndex = destinationFile.LastIndexOf('/');//FIXME: Should be Path.PathSeparator;
  
                      if (stripIndex &gt;= 0)
                          destinationFile = destinationFile.Substring(stripIndex + 1).Trim();
  
  
                      string relativeFile = destinationFile;
  
                      destinationFile = folder + "/" + destinationFile;
  
                      Debug.Log("Copying texture from " + kvp.Value.textureName + " to " + destinationFile);
  
                      try
                      {
                          //Copy the source file
                          File.Copy(kvp.Value.textureName, destinationFile);
                      }
                      catch
                      {
  
                      }   
  
  
                      sw.Write("map_Kd {0}", relativeFile);
                  }
  
                  sw.Write("\n\n\n");
              }
          }
      }
  
      private static void MeshToFile(Component mf, string folder, string filename) 
      {
          Dictionary&lt;string, ObjMaterial&gt; materialList = PrepareFileWrite();
  
          using (StreamWriter sw = new StreamWriter(folder +"/" + filename + ".obj")) 
          {
              sw.Write("mtllib ./" + filename + ".mtl\n");
  
              sw.Write(MeshToString(mf, materialList));
          }
  
          MaterialsToFile(materialList, folder, filename);
      }
  
      private static void MeshesToFile(Component[] mf, string folder, string filename) 
      {
          Dictionary&lt;string, ObjMaterial&gt; materialList = PrepareFileWrite();
  
          using (StreamWriter sw = new StreamWriter(folder +"/" + filename + ".obj")) 
          {
              sw.Write("mtllib ./" + filename + ".mtl\n");
  
              for (int i = 0; i &lt; mf.Length; i++)
              {
                  sw.Write(MeshToString(mf[i], materialList));
              }
          }
  
          MaterialsToFile(materialList, folder, filename);
      }
  
      private static bool CreateTargetFolder()
      {
          try
          {
              System.IO.Directory.CreateDirectory(targetFolder);
          }
          catch
          {
              //EditorUtility.DisplayDialog("Error!", "Failed to create target folder!", "");
              return false;
          }
  
          return true;
      }
  
  
  
      void OnGUI () { 
          GUI.BeginGroup (new Rect (Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 200)); 
          if(window == 1) 
          { 
              if(GUI.Button (new Rect (10,30,180,30), "Экспортировать")) 
              { 
  
                  if (!CreateTargetFolder())
                      return;
  
                  //GameObject[] gos = GameObject.FindGameObjectsWithTag("Boat");
                  //Selection.objects = gos;
  
                  GameObject[] selection = GameObject.FindGameObjectsWithTag("Boat");
                  //Transform[] selection = Selection.GetTransforms(SelectionMode.Editable | SelectionMode.ExcludePrefab);
  
                  if (selection.Length == 0)
                  {
                      //EditorUtility.DisplayDialog("No source object selected!", "Please select one or more target objects", "");
                      return;
                  }
  
                  int exportedObjects = 0;
  
                  ArrayList mfList = new ArrayList();
  
                  for (int i = 0; i &lt; selection.Length; i++)
                  {
                      Component[] meshfilter = selection[i].GetComponentsInChildren(typeof(MeshFilter)).Concat(selection[i].GetComponentsInChildren(typeof(SkinnedMeshRenderer))).ToArray();
  
                      for (int m = 0; m &lt; meshfilter.Length; m++)
                      {
                          exportedObjects++;
                          mfList.Add(meshfilter[m]);
                      }
                  }
  
                  if (exportedObjects &gt; 0) 
                  {
                      Component[] mf = new Component[mfList.Count];
  
                      for (int i = 0; i &lt; mfList.Count; i++) {
                          mf [i] = (Component)mfList [i];
                      }
  
                      string filename = /*EditorApplication.currentScene +*/ "_" + exportedObjects;
  
                      int stripIndex = filename.LastIndexOf ('/');//FIXME: Should be Path.PathSeparator
  
                      if (stripIndex &gt;= 0)
                          filename = filename.Substring (stripIndex + 1).Trim ();
  
                      MeshesToFile (mf, targetFolder, filename);
  
                  }
  
              } 
  
              if(GUI.Button (new Rect (10,150,180,30), "Выход")) 
              { 
                  window = 5; 
              } 
          } 
  
          if(window == 5) 
          { 
              GUI.Label(new Rect(50, 10, 180, 30), "Вы уже выходите?");   
              if(GUI.Button (new Rect (10,40,180,30), "Да")) 
              { 
                  Application.Quit(); 
              } 
              if(GUI.Button (new Rect (10,80,180,30), "Нет")) 
              { 
                  window = 1; 
              } 
          } 
          GUI.EndGroup (); 
      } 
  } 
  </code></pre>