当前位置: 首页 > news >正文

【Unity】Unity中修改网格的大小和倾斜网格

一、问题

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();}
#endifvoid 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~
你的点赞就是我创作最大的动力~

http://www.xdnf.cn/news/364303.html

相关文章:

  • 如何解决Jmeter中的乱码问题?
  • 【PHP】基于币安链,一个完整的USDT转账示例
  • 【python】 python拆包
  • 【QT】项目打包与发布安装
  • 图灵爬虫练习平台第七题千山鸟飞绝js逆向
  • 宠物医院预约|基于Java+vue的宠物医院预约平台系统(源码+数据库+文档)
  • windows celery OSError: [WinError 6] 句柄无效
  • ELF-如何学习
  • C++(1):整数常量
  • Mysql存储引擎
  • 期刊论文写作注意点
  • LVGL源码学习之渲染、更新过程(1)---标记和激活
  • 【C/C++】为什么要noexcept
  • 机器学习第二讲:对比传统编程:解决复杂规则场景
  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • RPG11.创建玩家Ability类
  • 基于CNN的猫狗图像分类系统
  • 推荐系统(二十五):基于阿里DIN(Deep Interest Network)的CTR模型实现
  • SpringCloud的作用
  • Java高频基础面试题
  • EMC|AC/DC转换器ESD静电防护
  • The 2024 ICPC Kunming Invitational Contest G. Be Positive
  • 【Python-Day 11】列表入门:Python 中最灵活的数据容器 (创建、索引、切片)
  • 【Spring】手动创建Spring|Boot项目
  • 【Golang】gin框架动态更新路由
  • C++--NULL和nullptr的区别
  • ATH12K 驱动框架
  • ch09 题目参考思路
  • 不黑文化艺术学社首席艺术家孙溟㠭浅析“雪渔派”
  • AI赋能智能客服革新:R²AIN SUITE 如何破解医疗行业服务难题?