近期热门
粉丝2
关注 1
获赞 1
unity3d教程 photoShop绘制2D图编辑地形贴图

[U3D] unity3d教程 photoShop绘制2D图编辑地形贴图

[复制链接]
5850 3 0 0 10年前 举报
动态创建地形,并设置splatPrototypes,最后使用photoShop绘制2D图编辑地形贴图。
步骤:
1.创建一个新场景并命名为Tutor_4_CreateTerrainWithSplat,并新建一个GameObject起名为Manager,新建一个名为
Tutor_4_CreateTerrainWithSplat.cs的脚本并拖至Manager上。
2.粘贴并覆盖如下脚本至Tutor_4_CreateTerrainWithSplat里,该脚本与上个例子的脚本基本一致。
using UnityEngine;
using System.Collections;
using UnityEditor;

public class Tutor_4_CreateTerrainWithSplat : MonoBehaviour {
public AnimationCurve animationCurve;
void Start()
{
CreateTerrain();
}
public Terrain CreateTerrain()
{
TerrainData  terrainData = new TerrainData();
terrainData.heightmapResolution = 513;
terrainData.baseMapResolution = 513;
terrainData.size = new Vector3(50, 50, 50);
terrainData.alphamapResolution = 512;
     terrainData.SetDetailResolution(32, 8);
ModifyTerrainDataHeight(terrainData);
GameObject obj = Terrain.CreateTerrainGameObject(terrainData);
AssetDatabase.CreateAsset(terrainData, "Assets/Tutorial/Tutor_4_TerrainWithSplats.asset");
     AssetDatabase.SaveAssets();
return  obj.GetComponent<</span>Terrain>();
}
public void ModifyTerrainDataHeight(TerrainData terrainData)
{
int width = terrainData.heightmapWidth;
int height = terrainData.heightmapHeight;
float[,] array = new float[width,height];
print ("width:"+ width +" height:"+ height );
for(int i=0; i< width;i++)
for(int j=0; j< height;j++)
{
float f1 = j;
float f2 = height;
array[i,j] = animationCurve.Evaluate(f1/f2);
}
terrainData.SetHeights(0,0,array);
}
}
之后添加地形贴图变量,unity3d教程在脚本里加上public Texture2D[] splats;
然后在Inspector里指定任意一张贴图。
现在开始添加Splat了。
核心是SplatPrototype,也就是Splat原型的信息,包含贴图信息和地形块的信息。
SplatPrototype outSplatPrototype = new SplatPrototype();
之后设置SplatPrototype的如下属性
outSplatPrototype.texture: 贴图
outSplatPrototype.tileOffset:地形块的偏移。
outSplatPrototype.tileSize:地形块的尺寸
组成好SplatPrototype[] outSplatPrototypes后,赋予TerrainData.splatPrototypes 即可。

end.jpg

代码如下。
using UnityEngine;
using System.Collections;
using UnityEditor;

public class Tutor_4_CreateTerrainWithSplat : MonoBehaviour {
public AnimationCurve animationCurve;
public Texture2D[] splats;
void Start()
{
CreateTerrain();
}
public Terrain CreateTerrain()
{
TerrainData  terrainData = new TerrainData();
terrainData.heightmapResolution = 513;
terrainData.baseMapResolution = 513;
terrainData.size = new Vector3(50, 50, 50);
terrainData.alphamapResolution = 512;
     terrainData.SetDetailResolution(32, 8);
terrainData.splatPrototypes = CreateSplatPrototypes(splats,new Vector2(15,15),newVector2(0,0));
ModifyTerrainDataHeight(terrainData);
GameObject obj = Terrain.CreateTerrainGameObject(terrainData);
AssetDatabase.CreateAsset(terrainData, "Assets/Tutorial/Tutor_4_TerrainWithSplats.asset");
     AssetDatabase.SaveAssets();
return  obj.GetComponent<</span>Terrain>();
}
public void ModifyTerrainDataHeight(TerrainData terrainData)
{
int width = terrainData.heightmapWidth;
int height = terrainData.heightmapHeight;
float[,] array = new float[width,height];
for(int i=0; i< width;i++)
for(int j=0; j< height;j++)
{
float f1 = j;
float f2 = height;
array[i,j] = animationCurve.Evaluate(f1/f2);
}
terrainData.SetHeights(0,0,array);
}
public SplatPrototype[] CreateSplatPrototypes(Texture2D[] tmpTextures,Vector2 tmpTileSize,Vector2 tmpOffset)
{
SplatPrototype[] outSplatPrototypes = new SplatPrototype[tmpTextures.Length];
for(int i =0;i
{
outSplatPrototypes = CreateSplatPrototype(tmpTextures,tmpTileSize,tmpOffset);
}
return outSplatPrototypes;
}
public SplatPrototype CreateSplatPrototype(Texture2D tmpTexture, Vector2 tmpTileSize,Vector2 tmpOffset)
{
SplatPrototype outSplatPrototype = new SplatPrototype();
outSplatPrototype.texture = tmpTexture;
outSplatPrototype.tileOffset = tmpOffset;
outSplatPrototype.tileSize = tmpTileSize ;
return outSplatPrototype;
}
}

0
点赞
0
打赏
0
添加到收藏夹

1

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论3
您需要登录后才可以回帖 登录

2016年,希望能跟CGJOY一起成长。
8年前
回复

使用道具 举报

{:8_312:}{:8_314:}{:8_300:}{:8_312:}
9年前
回复

使用道具 举报

感谢楼主分享{:2_30:}
10年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器