一、问题
unity中的网格(Grid)或者地面Plane组件,在使用时,都是正方形的网格,而且建立该网格后,在不改变Scale情况下,没发使其整体变大,而且也没法改变每个网格的大小,而且也没法使网格变成倾斜形状来适应多视角游戏的效果。
二、效果
下面是实现的效果
上面是网格建造系统的效果
三、代码
直接上代码
下面是更改网格大小的代码
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
public class ResizePlaneMesh : MonoBehaviour
{
public float scaleFactorX = 2.0f; // 缩放系数
public float scaleFactorY = 2.0f; // 缩放系数
void Awake()
{
MeshFilter meshFilter = GetComponent<MeshFilter>();
Mesh originalMesh = meshFilter.mesh;
// 复制新网格避免修改原始资源
Mesh newMesh = Instantiate(originalMesh);
// 获取顶点并缩放
Vector3[] vertices = newMesh.vertices;
for (int i = 0; i < vertices.Length; i++)
{
//vertices[i] *= scaleFactor;
vertices[i].x *= scaleFactorX;
vertices[i].y *= scaleFactorY;
}
newMesh.vertices = vertices;
// 重新计算法线和包围盒
newMesh.RecalculateNormals();
newMesh.RecalculateBounds();
// 应用新网格
meshFilter.mesh = newMesh;
// 更新碰撞体(如果有MeshCollider)
MeshCollider meshCollider = GetComponent<MeshCollider>();
if (meshCollider != null)
{
meshCollider.sharedMesh = newMesh;
}
}
}
下面是使网格倾斜角度的代码
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
public class ParallelogramMesh : MonoBehaviour
{
[Range(-1f, 1f)]
public float skewAmount = 0.5f; // 倾斜系数(控制平行四边形的倾斜程度)
private Mesh mesh;
private Vector3[] originalVertices;
void Start()
{
MeshFilter meshFilter = GetComponent<MeshFilter>();
mesh = meshFilter.mesh;
originalVertices = mesh.vertices;
ApplySkew();
}
#if UNITY_EDITOR
// 更新倾斜效果(可在 Inspector 中实时调整)
void OnValidate()
{
if (mesh != null && originalVertices != null)
ApplySkew();
}
#endif
void ApplySkew()
{
Vector3[] vertices = (Vector3[])originalVertices.Clone();
// 对顶点进行倾斜变换(这里以 XZ 平面的平行四边形为例)
for (int i = 0; i < vertices.Length; i++)
{
// 根据顶点的 Z 坐标偏移 X 轴(模拟倾斜)
vertices[i].x += vertices[i].z * skewAmount;
}
mesh.vertices = vertices;
mesh.RecalculateNormals();
mesh.RecalculateBounds();
// 更新碰撞体(如果有 MeshCollider)
MeshCollider meshCollider = GetComponent<MeshCollider>();
if (meshCollider != null)
meshCollider.sharedMesh = mesh;
}
}
四、资源扩展
上面截图的建造系统中,玩家可以选择需要建造的建筑,然后按照网格地图,将建筑放入网格中,
下面是项目传送门Demo链接
Demo传送门
需要的可以自行点击下载查看
Over~
你的点赞就是我创作最大的动力~