在 Unity 中的地形上设置生成的 Texture2D?
Set generated Texture2D on terrain in Unity?
我在Unity中创建了一个简单的Texture2D如下(简化示例):
Texture2D texture2d = new Texture2D(256,256);
for (int h = 0; h < texture2d.height; h++) {
for (int w = 0; w < texture2d.width ; w++) {
texture2d.SetPixel(w,h, Color.green);
}
}
如何在现有地形上将创建的 Texture2D 设置为地面纹理?
因为内置 Terrain
着色器没有 _MainTexture
属性,您必须使用自定义着色器:例如http://wiki.unity3d.com/index.php/TerrainFourLayerToon(放在 .shader
文件中)
从那里你只需要适当的代码
//your code here
texture2d.Apply(); //missing in your code!
Material mat = new Material(Shader.Find("Terrain/Four Layer Toon Compat")); //from link
mat.SetTexture("_MainTex" , texture2d); //set the texture properties of the shader
mat.SetTexture("_MainTex2", texture2d);
mat.SetTexture("_MainTex3", texture2d);
mat.SetTexture("_MainTex4", texture2d);
Terrain terr = this.gameObject.GetComponent<Terrain>(); //get the terrain
terr.materialType = Terrain.MaterialType.Custom; //tell the terrain you want to manually assign its material
terr.materialTemplate = mat; //finally assign the material (and texture)
此代码应适用于 Unity 5
如果您对这些函数的作用感到好奇,请检查 https://docs.unity3d.com/Manual/SL-Reference.html 中的 ShaderLab
、CG
和 .shader
文件类型
UnityEngine
下的 和 http://docs.unity3d.com/ScriptReference/ -> Classes
用于 GameObject
、Material
、Shader
、Terrain
和Texture2D
.
我在Unity中创建了一个简单的Texture2D如下(简化示例):
Texture2D texture2d = new Texture2D(256,256);
for (int h = 0; h < texture2d.height; h++) {
for (int w = 0; w < texture2d.width ; w++) {
texture2d.SetPixel(w,h, Color.green);
}
}
如何在现有地形上将创建的 Texture2D 设置为地面纹理?
因为内置 Terrain
着色器没有 _MainTexture
属性,您必须使用自定义着色器:例如http://wiki.unity3d.com/index.php/TerrainFourLayerToon(放在 .shader
文件中)
从那里你只需要适当的代码
//your code here
texture2d.Apply(); //missing in your code!
Material mat = new Material(Shader.Find("Terrain/Four Layer Toon Compat")); //from link
mat.SetTexture("_MainTex" , texture2d); //set the texture properties of the shader
mat.SetTexture("_MainTex2", texture2d);
mat.SetTexture("_MainTex3", texture2d);
mat.SetTexture("_MainTex4", texture2d);
Terrain terr = this.gameObject.GetComponent<Terrain>(); //get the terrain
terr.materialType = Terrain.MaterialType.Custom; //tell the terrain you want to manually assign its material
terr.materialTemplate = mat; //finally assign the material (and texture)
此代码应适用于 Unity 5
如果您对这些函数的作用感到好奇,请检查 https://docs.unity3d.com/Manual/SL-Reference.html 中的 ShaderLab
、CG
和 .shader
文件类型
UnityEngine
下的 和 http://docs.unity3d.com/ScriptReference/ -> Classes
用于 GameObject
、Material
、Shader
、Terrain
和Texture2D
.