地形和小地图的写法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 根据图片生成地形
/// </summary>
public class CreatTrainer : MonoBehaviour
{
public Texture2D texture;
// Start is called before the first frame update
void Start()
{
int w = texture.width;
int h = texture.height;

VertexHelper vh = new VertexHelper();
for (int x = 0; x < w; x++)
{
for (int z = 0; z < h; z++)
{
Color color = texture.GetPixel(x, z);
float y = color.grayscale;
float uvx = (float)x / (float)(w - 1);
float uvy = (float)z / (float)(h - 1);
vh.AddVert(new Vector3(x, y, z), Color.white, new Vector2(uvx, uvy));
if (x != w - 1 && z != h - 1)
{
vh.AddTriangle(x * h + z, x * h + z + 1, (x + 1) * h + z + 1);
vh.AddTriangle(x + h + z, (x + 1) * h + z + 1, (x + 1) * h + z);
}
}
}
Mesh mesh = new Mesh();
vh.FillMesh(mesh);
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;

Material material = new Material(Shader.Find("Standard"));
material.mainTexture = texture;
GetComponent<MeshRenderer>().material = material;
}

// Update is called once per frame
void Update()
{

}
}

 

//======================================================上面是根据图片生成地图   下面是根据地图生成图片

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 这是生成地图,根据地图生成图片
/// </summary>
public class CreatMap : MonoBehaviour
{
public int w = 100;
public int h = 100;
public Texture2D texture;
public Color tu = Color.blue;
public Color cao = Color.green;
public Image image;
// Start is called before the first frame update
void Start()
{
texture = new Texture2D(w, h);
VertexHelper vh = new VertexHelper();
for (int x = 0; x < w; x++)
{
for (int z = 0; z < h; z++)
{

float y = Mathf.PerlinNoise(x * 0.1f, z * 0.1f);
float uvx = (float)x / (float)(w - 1);
float uvy = (float)z / (float)(h - 1);
Color color = Color.Lerp(tu, cao, y);
//设置像素
texture.SetPixel(x, z, color);
vh.AddVert(new Vector3(x - w / 2, y * 10, z - h / 2), Color.white, new Vector2(uvx, uvy));
if (x != w - 1 && z != h - 1)
{
vh.AddTriangle(x * h + z, x * h + z + 1, (x + 1) * h + z + 1);
vh.AddTriangle(x * h + z, (x + 1) * h + z + 1, (x + 1) * h + z);
}
}
}
texture.Apply();

Mesh mesh = new Mesh();
vh.FillMesh(mesh);
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;

Material material = new Material(Shader.Find("UI/Default"));
material.mainTexture = texture;
GetComponent<MeshRenderer>().material = material;
image.material = material;
}

// Update is called once per frame
void Update()
{

}
}

//-----------------------下面和上面的哪个配合使用   通过是指中心点来移动小地图,达到一种人在移动的效果

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Map : MonoBehaviour
{
public CreatMap terrain;
public GameObject player;
public Image map;
public Image mapPlayer;
// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
float pivotX = (player.transform.position.x + terrain.w / 2) / (float)terrain.w;
float pivotY = (player.transform.position.z + terrain.h / 2) / (float)terrain.h;
map.rectTransform.pivot = new Vector2(pivotX, pivotY);
mapPlayer.rectTransform.eulerAngles = Vector3.back * player.transform.eulerAngles.y;
if ((map.rectTransform.localScale + Vector3.one * Input.GetAxis("Mouse ScrollWheel")).x >= 1)
{
map.rectTransform.localScale += Vector3.one * Input.GetAxis("Mouse ScrollWheel");
}
}
}

 

 

 

posted @ 2023-02-01 14:15  old_Host  阅读(9)  评论(0编辑  收藏  举报