unity3d怎么把模型改成unity地形插件件

将Unity3D中的地形导出为*.Obj模型文件(转)
将下面的脚本放在你项目目录下资源文件夹的Editor里.
要导出地形,首先在你的场景中选中地形对象.如果没选,他将用于当前场景中可用的地形.从Terrain菜单下选择Export To
,在分辨率窗口,选择你要四边形还是三角形网格结构.同样也可以选择要导出地形的分辨率,有高中低等等.点击Export,选择要保存的位置和文件名.Obj文件将被导出.要注意如果选择大面积的Full地形导出,最终的Obj文件将非常大,而且也要导出很久.
下面为ExportTerrain.js脚本.
System.IO;
enum SaveFormat
{Triangles, Quads}
enum SaveResolution
{Full, Half, Quarter, Eighth, Sixteenth}
class ExportTerrain
extends EditorWindow {
saveFormat =
SaveFormat.T
saveResolution =
SaveResolution.H
&&&&static
var terrain : TerrainD
&&&&static
var terrainPos : Vector3;
totalCount :
&&&&@MenuItem
("Terrain/Export To
&&&&static
function Init () {
&&&&&&&&terrain
&&&&&&&&var
terrainObject : Terrain =
Selection.activeObject as T
&&&&&&&&if
(!terrainObject) {
&&&&&&&&&&&&terrainObject
= Terrain.activeT
&&&&&&&&if
(terrainObject) {
&&&&&&&&&&&&terrain
= terrainObject.terrainD
&&&&&&&&&&&&terrainPos
= terrainObject.transform.
&&&&&&&&EditorWindow.GetWindow(ExportTerrain).Show();
&&&&function
OnGUI () {
&&&&&&&&if
(!terrain) {
&&&&&&&&&&&&GUILayout.Label("No
terrain found");
&&&&&&&&&&&&if
(GUILayout.Button("Cancel"))
&&&&&&&&&&&&&&&&EditorWindow.GetWindow(ExportTerrain).Close();
&&&&&&&&&&&&}
&&&&&&&&&&&&return;
&&&&&&&&saveFormat
= EditorGUILayout.EnumPopup("Export Format", saveFormat);
&&&&&&&&saveResolution
= EditorGUILayout.EnumPopup("Resolution",
saveResolution);
&&&&&&&&if
(GUILayout.Button("Export"))
&&&&&&&&&&&&Export();
&&&&function
Export () {
&&&&&&&&var
fileName =
EditorUtility.SaveFilePanel("Export .obj file", "",
"Terrain", "obj");
&&&&&&&&var
w = terrain.heightmapW
&&&&&&&&var
terrain.heightmapH
&&&&&&&&var
meshScale = terrain.
&&&&&&&&var
tRes = Mathf.Pow(2,
parseInt(saveResolution));
&&&&&&&&meshScale
= Vector3(meshScale.x/(w-1)*tRes, meshScale.y,
meshScale.z/(h-1)*tRes);
&&&&&&&&var
uvScale = Vector2(1.0/(w-1),
1.0/(h-1));
&&&&&&&&var
tData = terrain.GetHeights(0, 0, w,
= (w-1) / tRes + 1;
= (h-1) / tRes + 1;
&&&&&&&&var
tVertices = new Vector3[w
&&&&&&&&var
tUV = new Vector2[w
&&&&&&&&if
(saveFormat == SaveFormat.Triangles)
&&&&&&&&&&&&var
tPolys = new int[(w-1)
* (h-1) * 6];
&&&&&&&&else
&&&&&&&&&&&&tPolys
= new int[(w-1) * (h-1) * 4];
&&&&&&&&//
Build vertices and UVs
&&&&&&&&for
(y = 0; y & y++)
&&&&&&&&&&&&for
(x = 0; x & x++)
&&&&&&&&&&&&&&&&tVertices[y*w
+ x] = Vector3.Scale(meshScale, Vector3(x, tData[x*tRes,y*tRes],
y)) + terrainP
&&&&&&&&&&&&&&&&tUV[y*w
+ x] = Vector2.Scale(Vector2(x*tRes, y*tRes), uvScale);
&&&&&&&&&&&&}
&&&&&&&&var
index = 0;
&&&&&&&&if
(saveFormat == SaveFormat.Triangles)
&&&&&&&&&&&&//
Build triangle indices: 3 indices into vertex array for each
&&&&&&&&&&&&for
(y = 0; y & h-1; y++)
&&&&&&&&&&&&&&&&for
(x = 0; x & w-1; x++)
&&&&&&&&&&&&&&&&&&&&//
For each grid cell output two triangles
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
= ((y+1) * w) +
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
* w) + x + 1;
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
= ((y+1) * w) +
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
= ((y+1) * w) + x + 1;
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
* w) + x + 1;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&else
&&&&&&&&&&&&//
Build quad indices: 4 indices into vertex array for each
&&&&&&&&&&&&for
(y = 0; y & h-1; y++)
&&&&&&&&&&&&&&&&for
(x = 0; x & w-1; x++)
&&&&&&&&&&&&&&&&&&&&//
For each grid cell output one quad
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
= ((y+1) * w) +
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
= ((y+1) * w) + x + 1;
&&&&&&&&&&&&&&&&&&&&tPolys[index++]
* w) + x + 1;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}&&
&&&&&&&&//
Export to .obj
&&&&&&&&try
&&&&&&&&&&&&var
sw = new StreamWriter(fileName);
&&&&&&&&&&&&sw.WriteLine("#
Unity terrain OBJ File");
&&&&&&&&&&&&&
&&&&&&&&&&&&//
Write vertices
&&&&&&&&&&&&System.Threading.Thread.CurrentThread.CurrentCulture
= new System.Globalization.CultureInfo("en-US");
&&&&&&&&&&&&counter
= tCount = 0;
&&&&&&&&&&&&totalCount
= (tVertices.Length*2 + (saveFormat == SaveFormat.Triangles?
tPolys.Length/3 : tPolys.Length/4)) / 1000;
&&&&&&&&&&&&for
(i = 0; i &
tVertices.L i++) {
&&&&&&&&&&&&&&&&UpdateProgress();
&&&&&&&&&&&&&&&&var
sb = StringBuilder("v ",
&&&&&&&&&&&&&&&&//
StringBuilder stuff is done this way because it's faster than using
the "{0} {1} {2}"etc. format
&&&&&&&&&&&&&&&&//
Which is important when you're exporting huge terrains.
&&&&&&&&&&&&&&&&sb.Append(tVertices[i].x.ToString()).Append("
&&&&&&&&&&&&&&&&&&&Append(tVertices[i].y.ToString()).Append("
&&&&&&&&&&&&&&&&&&&Append(tVertices[i].z.ToString());
&&&&&&&&&&&&&&&&sw.WriteLine(sb);
&&&&&&&&&&&&}
&&&&&&&&&&&&//
&&&&&&&&&&&&for
(i = 0; i & tUV.L
&&&&&&&&&&&&&&&&UpdateProgress();
&&&&&&&&&&&&&&&&sb
= StringBuilder("vt
&&&&&&&&&&&&&&&&sb.Append(tUV[i].x.ToString()).Append("
&&&&&&&&&&&&&&&&&&&Append(tUV[i].y.ToString());
&&&&&&&&&&&&&&&&sw.WriteLine(sb);
&&&&&&&&&&&&}
&&&&&&&&&&&&if
(saveFormat == SaveFormat.Triangles)
&&&&&&&&&&&&&&&&//
Write triangles
&&&&&&&&&&&&&&&&for
(i = 0; i &
tPolys.L i += 3) {
&&&&&&&&&&&&&&&&&&&&UpdateProgress();
&&&&&&&&&&&&&&&&&&&&sb
= StringBuilder("f
&&&&&&&&&&&&&&&&&&&&sb.Append(tPolys[i]+1).Append("/").Append(tPolys[i]+1).Append("
&&&&&&&&&&&&&&&&&&&&&&&Append(tPolys[i+1]+1).Append("/").Append(tPolys[i+1]+1).Append("
&&&&&&&&&&&&&&&&&&&&&&&Append(tPolys[i+2]+1).Append("/").Append(tPolys[i+2]+1);
&&&&&&&&&&&&&&&&&&&&sw.WriteLine(sb);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&//
Write quads
&&&&&&&&&&&&&&&&for
(i = 0; i &
tPolys.L i += 4) {
&&&&&&&&&&&&&&&&&&&&UpdateProgress();
&&&&&&&&&&&&&&&&&&&&sb
= StringBuilder("f
&&&&&&&&&&&&&&&&&&&&sb.Append(tPolys[i]+1).Append("/").Append(tPolys[i]+1).Append("
&&&&&&&&&&&&&&&&&&&&&&&Append(tPolys[i+1]+1).Append("/").Append(tPolys[i+1]+1).Append("
&&&&&&&&&&&&&&&&&&&&&&&Append(tPolys[i+2]+1).Append("/").Append(tPolys[i+2]+1).Append("
&&&&&&&&&&&&&&&&&&&&&&&Append(tPolys[i+3]+1).Append("/").Append(tPolys[i+3]+1);
&&&&&&&&&&&&&&&&&&&&sw.WriteLine(sb);
&&&&&&&&&&&&&&&&}&&&&&&
&&&&&&&&&&&&}
&&&&&&&&catch
&&&&&&&&&&&&Debug.Log("Error
saving file: " +
err.Message);
&&&&&&&&sw.Close();
&&&&&&&&terrain
&&&&&&&&EditorUtility.ClearProgressBar();
&&&&&&&&EditorWindow.GetWindow(ExportTerrain).Close();
&&&&function
UpdateProgress () {
&&&&&&&&if
(counter++ == 1000) {
&&&&&&&&&&&&counter
&&&&&&&&&&&&EditorUtility.DisplayProgressBar("Saving...",
Mathf.InverseLerp(0, totalCount, ++tCount));
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客数据丢失,刚恢复一年前的备份!--QQ群:
最近在做一个编辑器。给策划美术调动作打击感。其中需要修改预设。中间碰到点小坑。然而并没有百度到。后面经过查阅API后,找到了解决方法。
在这里就分享下了。编辑预设。一般可以用于做一些编辑器,比如动作编辑器等等。如下。
这时就需要我们队预设编辑。这样策划美术用编辑器编辑预设。比如模型预设。地形预设等等。我们就能解放双手了。。
好了言归正传。解决方案如下。
本文示例截图
//标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。
EditorUtility.SetDirty(prefab);
//标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。EditorUtility.SetDirty(prefab);
using UnityE
using System.C
public class TestEditorPrefab : MonoBehaviour
private MeshF
// Use this for initialization
void Start()
1234567891011121314151617
using UnityEngine;using System.Collections;&public class TestEditorPrefab : MonoBehaviour{&&&&&public string name;&&&&public int speed;&&&&public Color color;&&&&private MeshFilter mesh;&&&&// Use this for initialization&&&&void Start()&&&&{&&&&&& &&&&}&}
using UnityE
using System.C
using UnityE
using System.IO;
public class SkillConfigTools : MonoBehaviour
public static SkillConfigToolsWindows mSkillConfigToolsW
[MenuItem("ModelConfig/打开配置界面", false, 10)]
static public void StartFindABInResources()
mSkillConfigToolsWindows = EditorWindow.GetWindow&SkillConfigToolsWindows&(false, "模型动作配置", true);
1234567891011121314
using UnityEngine;using System.Collections;using UnityEditor;using System.IO;&public class SkillConfigTools : MonoBehaviour{&&&&public static SkillConfigToolsWindows mSkillConfigToolsWindows;&&&&[MenuItem("ModelConfig/打开配置界面", false, 10)]&&&&static public void StartFindABInResources()&&&&{&&&&&&&&mSkillConfigToolsWindows = EditorWindow.GetWindow&SkillConfigToolsWindows&(false, "模型动作配置", true);&&&&}}
using UnityE
using UnityE
using System.Collections.G
public class SkillConfigToolsWindows : EditorWindow
private GameObject prefab =
private TestEditorPrefab mTestEditor =
/// &summary& 刷新窗口. &/summary&
void OnSelectionChange() { Repaint(); }
/// &summary&UI绘制区域.&/summary&
void OnGUI()
if (mTestEditor == null) FindObj();
mTestEditor.name = EditorGUILayout.TextField("名称", mTestEditor.name);
mTestEditor.speed = EditorGUILayout.IntField("速度", mTestEditor.speed);
mTestEditor.color = EditorGUILayout.ColorField("速度", mTestEditor.color);
//skill.powerLevel = EditorGUILayout.IntField("攻击强度", skill.powerLevel);
if (GUILayout.Button("保存预设"))
//标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。
EditorUtility.SetDirty(prefab);
Debug.LogError("保存成功");
void FindObj()
prefab = Resources.Load&GameObject&("Cube") as GameO
mTestEditor = prefab.GetComponent&TestEditorPrefab&();
1234567891011121314151617181920212223242526272829303132333435
using UnityEditor;using UnityEngine;using System.Collections.Generic;&public class SkillConfigToolsWindows : EditorWindow{&&&&private GameObject prefab = null;&&&&private TestEditorPrefab mTestEditor = null;&&&&/// &summary& 刷新窗口. &/summary&&&&&void OnSelectionChange() { Repaint(); }&&&&/// &summary&UI绘制区域.&/summary&&&&&void OnGUI()&&&&{&&&&&&&&if (mTestEditor == null) FindObj();&&&&&&&&else&&&&&&&&{&&&&&&&&&&&&mTestEditor.name = EditorGUILayout.TextField("名称", mTestEditor.name);&&&&&&&&&&&&mTestEditor.speed = EditorGUILayout.IntField("速度", mTestEditor.speed);&&&&&&&&&&&&mTestEditor.color = EditorGUILayout.ColorField("速度", mTestEditor.color);&&&&&&&&&&&&//skill.powerLevel = EditorGUILayout.IntField("攻击强度", skill.powerLevel);&&&&&&&&&&&&if (GUILayout.Button("保存预设"))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。&&&&&&&&&&&&&&&&EditorUtility.SetDirty(prefab);&&&&&&&&&&&&&&&&Debug.LogError("保存成功");&&&&&&&&&&&&}&&&&&&&&}&&&&}&&&&&void FindObj()&&&&{&&&&&&&&prefab = Resources.Load&GameObject&("Cube") as GameObject;&&&&&&&&mTestEditor = prefab.GetComponent&TestEditorPrefab&();&&&&}}
链接:/s/1jGMlUmi 密码:fyid
转载请注明: &
or分享 (0)
本站所有内容如未标明转载的内容,均为原创内容。转载请注明来源!Unity教程:Unity地形编辑器
昨天中国AR网(/)给大家分享了
今天我们继续教程的分享
地形创建:
创建地形 :GameObject-&3D Object-&Terrain
编辑地形:
地形资源导入:
导入方法:
点击鼠标右键,然后依次点击: Import Package -& Terrain Assets-&Import
地形细节设置:
为地形放置树木
创建风力区域:
GameObject -&3D Object-&Wind Zone
为地形放置花草
为地形添加细节模型:
第三方插件:花草与模型
地形编辑相关设置:设置地形长、宽、最高海拔、分辨率以及最大树木放置量。
地形编辑相关设置:提高海平面
添加水体,天空盒,太阳光等
资源导入:水体、天空盒、太阳光和角色控制器
在Project 窗口中,鼠标右键选择 Import Package,如右图所示, 导入内置的资源包。
树木创建器(Tree Creator)
树木创建器面板
在菜单中的GameObject-&3D Object-&Tree, 创建一棵树。
在场景中选择Tree,在Inspector窗口中显示出Tree Creator 面板。
一般树木的制作步骤:
1:& 基本树干形状建立:
选择根建立分枝干设置分支干Distribution 为 Whorled。
? 设置 Frequency 为 30。
2:& 提高主枝干开始长出分枝干的高度:
选择分枝干节点,打开Distribution 属性的曲线编辑器,设置
3:& 使得分枝干向上生长:
选择分枝干节点,调节Growth Angle 的值为0.6
一般树木的制作步骤(续)
4:& 添加“子枝干”
选择分枝干? (再)添加分枝干? 选择长度变短。
5:& 为枝杈添加树叶。
6:& 修改树叶大小。
7:& 添加树皮材质。
分别选择主树干、分树干、子树干的属性 Branch Material 添
加准备好的材质。
8:& 添加树叶材质。
树木创建器
树木创建器-面板
教程由中国AR网(/)分享,更多教程进入中国AR网可以看到,有相关问题也可以在文章后面进行评论。
本文链接:/ZYJC/503.html
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
中国AR网,是国内第一家打造增强现实技术交流的一个自媒体平台!
每天及时更新全球最新的VR/AR新闻,了解行业最新动态!
今日搜狐热点unity3d 模型转地形 - Unity3d技术 - 泰课在线 - 国内专业的Unity在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG|UI平面设计|前端开发 - Powered By EduSoho

我要回帖

更多关于 unity地形插件 的文章

 

随机推荐