描述:
1.在unity中建立一个场景,做完后,有很多需求是将一个完整的场景导入到max里面,这样可以准确的去做行走网格 水面 等各种需要与场景配合的模型
下面这段代码就可以实现unity与max互导
代码如下:
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.SceneManagement;
public class SceneExport : EditorWindow
{
struct Model
{
public Mesh mesh;
public Material[] materials;
public Transform transform;
}
struct ModelMaterial
{
public string name;
public float cutoff;
public string texture;
}
class MaterialCompare : EqualityComparer<ModelMaterial>
{
public override bool Equals(ModelMaterial mtlx, ModelMaterial mtly)
{
return string.Compare(mtlx.name, mtly.name) == 0;
}
public override int GetHashCode(ModelMaterial mtl)
{
return mtl.name.GetHashCode();
}
}
static SceneExport window;
[MenuItem("Game-X/Scene Exporter", false, 101)]
public static void Open()
{
if (window == null)
{
window =
EditorWindow.GetWindow<SceneExport>(false, "SceneExport", true);
int initWidth = 300;
int initHeight = 150;
int x = (Screen.currentResolution.width - initWidth) / 2;
int y = (Screen.currentResolution.height - initHeight) / 2;
window.position = new Rect(x, y, initWidth, initHeight);
}
}
static float unitsScale;
static bool exportMaterial;
SceneExport()
{
unitsScale = 100f;
exportMaterial = true;
}
Texture icon;
void Awake()
{
if (EditorPrefs.HasKey("SceneExportMaterial"))
exportMaterial = EditorPrefs.GetBool("SceneExportMaterial");
else
exportMaterial = true;
if (EditorPrefs.HasKey("SceneExportUnitsScale"))
unitsScale = EditorPrefs.GetFloat("SceneExportUnitsScale");
else
unitsScale = 100f;
icon =
AssetDatabase.LoadAssetAtPath(
"assets/editor/images/sceneExporter.png", typeof(Texture)) as Textu