一.地形和小地图的用途
地形:像熟知的原神,就带有地形;
小地图:热门游戏王者荣耀也用到了小地图。
接下来了解地形和小地图的代码逻辑:
小地图的操作流程:
第一种方法是可以直接在场景中创建一个相机,优点是操作确实简单,但是对性能的消耗非常大,会导致游戏卡顿,影响玩家游戏体验;
第二种方法就是,截图,把地图截下来赋值到Image上面,按照比例计算人物位置,但是这样的精准度极低;
我们可以直接把地形的材质赋值给小地图,这样就能实现小地图效果。
地形的流程:
地形的实现也比较简单,只需要有形状,有起伏即可,所以,我们使用渲染图形的顶点辅助方法来绘制地形。
如果所需要绘制的地形需要带有颜色,可以用不同颜色来区分地形高低。
代码逻辑和绘制图形的代码类似,加入不同的颜色来区分地形的高低,加入玩家预制体显示在小地图,还是需要顶点坐标来确认地形的大小
public Color color1=Color.blue;
public Color color2=Color.green;
public int width = 200;
public int height = 200;
public Texture2D texture2D;
public Image map;
public Image playerPos;
public GameObject player;
脚本变量初始化
texture2D = new Texture2D(width, height);
VertexHelper vh = new VertexHelper();
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
float y = Mathf.PerlinNoise(i * 0.1f, j * 0.1f);
texture2D.SetPixel(i, j, Color.Lerp(color1, color2, y));
float uvx = (float)i / (float)width;
float uvy = (float)j / (float)height;
vh.AddVert(new Vector3(i - width / 2, y * 3, j - height / 2), Color.white, new Vector2(uvx, uvy));
if (i<width-1&&j<height-1)
{
vh.AddTriangle(i * height + j, i * height + j + 1, (i + 1) * height + j + 1);
vh.AddTriangle(i * height + j, (i + 1) * height + j + 1, (i + 1) * height + j);
}
}
}
texture2D.Apply();
Mesh mesh = new Mesh();
vh.FillMesh(mesh);
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;
GetComponent<MeshRenderer>().material.mainTexture = texture2D;
Material material = new Material(Shader.Find("UI/Default"));
material.mainTexture = texture2D;
map.material = material;
player = GameObject.FindGameObjectWithTag("Player").gameObject;
因为地形和小地图涉及到了长宽,所以使用双重循环来代表长宽
绘制顶点坐标和渲染器进行位置坐标和上色的处理
最后实例一个玩家到地图中