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

unity之线框模式

概述

游戏场景有时候需要显示物体的线框模式,这时候有多种方法可以达到效果,这里推荐一种动态绘制物体mesh的方法。

给物体挂载这个线框生成脚本


public class WireframeShader : MonoBehaviour
{public Material wireframeMaterial;private GameObject wireframeObject;private Mesh bakedMesh;bool hasMesh = false;bool isSkinned = false;void Start(){if (wireframeMaterial == null){Debug.LogError("The Wireframe Material field is empty. You must assign the wireframe material!");}if ((GetComponent<MeshFilter>() != null) || (GetComponent<SkinnedMeshRenderer>() != null))        hasMesh = true;if (hasMesh){bakedMesh = new Mesh();wireframeObject = new GameObject("Wireframe");wireframeObject.transform.SetParent(transform);wireframeObject.transform.localPosition = Vector3.zero;wireframeObject.transform.localScale = new Vector3(1, 1, 1);wireframeObject.transform.localRotation = Quaternion.identity;var meshFilter = GetComponent<MeshFilter>();if (meshFilter == null)isSkinned = true;if (isSkinned){var skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>();bakedMesh = BakeMesh(skinnedMeshRenderer.sharedMesh);var wireframeRenderer = wireframeObject.AddComponent<SkinnedMeshRenderer>();wireframeRenderer.bones = skinnedMeshRenderer.bones;wireframeRenderer.sharedMesh = bakedMesh;wireframeRenderer.material = wireframeMaterial;}else{				bakedMesh = BakeMesh(meshFilter.sharedMesh);wireframeObject.AddComponent<MeshRenderer>();wireframeObject.AddComponent<MeshFilter>();wireframeObject.GetComponent<MeshFilter>().sharedMesh = bakedMesh;wireframeObject.GetComponent<MeshRenderer>().material = wireframeMaterial;}}else{Debug.LogError(name + " does not have a mesh!");}}private Mesh BakeMesh(Mesh originalMesh){var maxVerts = 2147483647;var meshNor = originalMesh.normals;var meshTris = originalMesh.triangles;var meshVerts = originalMesh.vertices;		var boneW = originalMesh.boneWeights;		var vertsNeeded = meshTris.Length;if (vertsNeeded > maxVerts){	Debug.LogError("The mesh has so many vertices that Unity could not create it!");return null;}var resultMesh = new Mesh();resultMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;		var resultVerts = new Vector3[vertsNeeded];var resultUVs = new Vector2[vertsNeeded];var resultTris = new int[meshTris.Length];var resultNor = new Vector3[vertsNeeded];var boneWLen = (boneW.Length > 0) ? vertsNeeded : 0;var resultBW = new BoneWeight[boneWLen]; for (var i = 0; i < meshTris.Length; i+=3){resultVerts[i] = meshVerts[meshTris[i]];resultVerts[i+1] = meshVerts[meshTris[i+1]];resultVerts[i+2] = meshVerts[meshTris[i+2]];		resultUVs[i] = new Vector2(0f,0f);resultUVs[i+1] = new Vector2(1f,0f);resultUVs[i+2] = new Vector2(0f,1f);resultTris[i] = i;resultTris[i+1] = i+1;resultTris[i+2] = i+2;resultNor[i] = meshNor[meshTris[i]];resultNor[i+1] = meshNor[meshTris[i+1]];resultNor[i+2] = meshNor[meshTris[i+2]];if (resultBW.Length > 0){resultBW[i] = boneW[meshTris[i]];resultBW[i+1] = boneW[meshTris[i+1]];resultBW[i+2] = boneW[meshTris[i+2]];}}resultMesh.vertices = resultVerts;resultMesh.uv = resultUVs;resultMesh.triangles = resultTris;resultMesh.normals = resultNor;resultMesh.bindposes = originalMesh.bindposes;resultMesh.boneWeights = resultBW;return resultMesh;}}

http://www.dtcms.com/a/553131.html

相关文章:

  • h5游戏免费下载:小飞鱼?
  • 【设计模式】享元模式(Flyweight)大白话讲解!
  • seo网站优化知识网站设计师的工作环境
  • 浅谈onlyoffice开发全流程(一、基础介绍)
  • 金仓KRDS云数据库服务管控平台:构建高效智能的数据库运维体系
  • GMI Cloud:如何构建全球化高性能分布式推理服务?
  • Linux入门攻坚——52、drbd - Distribute Replicated Block Device,分布式复制块设备-1
  • Threat Report ATTCK Mapper(TRAM)安装与配置手册
  • java后端初始化模版
  • WebGPU深度学习前端:基于浏览器的分布式模型推理
  • 深入浅出:增强现实(AR)技术全解析
  • 【进程间通信】--- 匿名管道,命名管道
  • 温岭网站建设公司百度问问首页登录
  • SpringBoot配置Redis
  • MinHashLSH 详解:高维数据相似性搜索与去重的关键技术
  • 数据驱动的架构设计:通过Enterprise Architect实现基于UML的架构治理
  • 旅游网页设计模板图及代码平度网站整站优化外包公司
  • Git的原理与使用 -- 远程操作
  • jetson开发板自编译编译pytorch
  • Git 仓库分支删除及清理指南
  • gitlab解决传过大文件后删除导致pack过大问题
  • sourcefare零基础学习,创建第一个扫描项目(服务端Git方式)
  • SAP使用abapGit在云环境中迁移开发包
  • DGX Spark 实战解析:模型选择与效率优化全指南
  • 宁德蕉城城乡建设网站广州建站业务公司
  • 长乐福州网站建设交换神器
  • Unity之OpenXR+XR Interaction Toolkit交互过滤器Filtering
  • MATLAB 模拟台风路径和强度变化
  • 第3讲:创建并运行你的第一个Flutter应用
  • 使用LangChain+LangGraph自定义AI工作流,实现音视频字幕生成工具