Unity在地形上动态刷纹理

Terrain运行时动态更新地形Texture

我实现了一个demo,可以让物体在地形上随便移动,在地形上路径所经过地方的纹理会被改变、

在这里插入图片描述

在这里插入图片描述

完整代码

实现原理

  1. 获取地形对象 (可以把脚本挂在地形上)
// 类中成员变量的声明
private Terrain m_terrain = null;

// 在Start()中从地形对象中获取Terrain组件
m_terrain = GetComponent<Terrain>();
  1. terrainData下获取alphamap的信息
// 在Start()中获取获取alphamap的宽和高
// 默认都是正方形纹理
m_terrainAlphaWidth = m_terrain.terrainData.alphamapWidth;
m_terrainAlphaHeight = m_terrain.terrainData.alphamapHeight;

// 获取地形大小(正方形)
Vector3 terrainDataSize = m_terrain.terrainData.size;

// 获取地形大小与alphamap的转换算子,后面做地形上物体位置映射到alphamap上的位置时做转换所需
// private float D2ARate = 0;
D2ARate = terrainDataSize.x / m_terrainAlphaWidth;
  1. 根据物体所在的位置坐标更新地形的纹理

我实现的的方式是在协程中替换纹理

public IEnumerator CoTerrainUpdate()
{
	// Replacing the terrain texture with the scorch mark texture?
	float y = moveObject.position.x / D2ARate;
    float x = moveObject.position.z / D2ARate;
    
    UpdateTexture((int) Math.Ceiling(x), (int) Math.Ceiling(y, m_scorchmarkTexture);
    UpdateTexture((int) Math.Floor(x), (int) Math.Floor(y),m_scorchmarkTexture);
    UpdateTexture((int) Math.Ceiling(x), (int) Math.Floor(y),m_scorchmarkTexture);
    UpdateTexture((int) Math.Floor(x), (int) Math.Ceiling(y),m_scorchmarkTexture);
    m_terrain.terrainData.SetAlphamaps(0, 0, m_terrainTexture;
    
    yield return null;
            
}

这里要特别注意:

float y = moveObject.position.x / D2ARate;
float x = moveObject.position.z / D2ARate;

世界坐标x -> alphamap的y
世界坐标y -> alphamap的x

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity3D地形源文件是指使用Unity3D引擎创建的地形场景的原始文件,它保存了该地形的所有设置和属性信息。这些文件可以包括地形的高度图、纹理、细节贴图、植被、水体、石块等元素的布局和设置。 地形源文件通常以.unity或.terrain等扩展名保存,可以在Unity编辑器中打开和编辑。通过编辑地形源文件,开发者可以对地形进行修改、优化和定制,以满足不同的需求。 地形源文件的内容通常包括以下几个重要部分: 1. 高度图:地形源文件会保存地形的高度图,它描述地形在X、Z轴上的高度变化,以创建起伏的地形表面。 2. 纹理地形纹理用于给地形表面添加颜色,使其具有更加真实的外观。地形源文件会保存纹理贴图的布局和设置,包括每个纹理贴图的混合方式和权重。 3. 细节贴图:地形源文件还可能包含用于添加地形细节的贴图,如草地、土地等。这些细节贴图用于增加地形的真实感和细节。 4. 植被:植被是地形场景中的植物元素,如树木、草丛等。地形源文件会保存植被的布局和设置,包括位置、数量、种类等信息。 5. 水体:如果地形场景中有水体元素,如湖泊、河流等,地形源文件也会保存水体的设置和属性。 通过修改地形源文件,开发者可以对地形进行各种定制和优化,以实现更好的游戏性能和更真实的场景效果。此外,地形源文件也可以与其他开发者共享,方便协作开发和交流经验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值