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

Unity 材质系统优化(mesh相同,图片不同,但是可以将所有的图片合成一张图集)

今天提供一个Unity材质优化的思路,流程是这样的,模型的mesh相同只是图片不同,我想着能不能将所有的图片合成一张图集呢,于是我就试着在Blender里面开搞了,所有的mesh相同的模型,共用一个材质(图集相同),

一:前期准备 TP图片打包,Blender UV展开

利用TP将所有的图片打包出一个图片 我这里使用TexturePacker打包的,导入到Blender里面,效果如下:

对模型展开UV,将UV进行缩放,缩放到合适位置,下一步就是导出模型文件,在Unity C#脚本里面进行UV坐标的偏移了,这样做的目的就是保证所有的球都用的是 同一个mesh,同一个材质,达到优化的目的

二: Unity C#脚本编写

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// URP 现代管线中 每增加一个台球会增加4个drawcall
/// 通用管线中,每增加一个台球会增加2个drawcall
/// </summary>
public class Ball : MonoBehaviour
{[SerializeField]private Material ballMaterial;private List<Vector2> offsetList = new();public int ballNumber = 1;public int BallNumber {get {return ballNumber;}private set {ballNumber = value;}}// Start is called before the first frame updatevoid Start(){InitAllOffset();InitMat();}private void InitAllOffset() {offsetList.Add(new Vector2(0,0));offsetList.Add(new Vector2(0.33f,0));offsetList.Add(new Vector2(0.67f,0));offsetList.Add(new Vector2(0,-0.2f));offsetList.Add(new Vector2(0.34f,-0.2f));offsetList.Add(new Vector2(0.67f,-0.2f));offsetList.Add(new Vector2(0,-0.4f));offsetList.Add(new Vector2(0.33f,-0.4f));offsetList.Add(new Vector2(0.67f,-0.4f));offsetList.Add(new Vector2(0f,-0.6f));offsetList.Add(new Vector2(0.34f,-0.6f));offsetList.Add(new Vector2(0.67f,-0.6f));offsetList.Add(new Vector2(0f,-0.8f));offsetList.Add(new Vector2(0.33f,-0.8f));offsetList.Add(new Vector2(0.67f,-0.8f));}private void InitMat() {Vector2 targetUvOffset = offsetList[BallNumber - 1];// mat.SetTextureOffset("_BaseMap",targetUvOffset);// mat.SetVector("Offset",);Renderer render = GetComponent<Renderer>();if(render != null) {Debug.Log("重新设置材质");render.material.SetTextureOffset("_MainTex",targetUvOffset);}}// Update is called once per framevoid Update(){}
}

相关文章:

  • 1V升3V升压LED驱动WT7013
  • 解析文字示例
  • Starknet架构之Starknet state、State commitment
  • 000003 - Hadoop集群配置
  • 快人一步!利用LLM实现数据处理自动化
  • Linux之管道符
  • 嵌入式操作系统_2.嵌入式操作系统的一般架构
  • Redis-数据结构-跳表详解
  • 中国银行信息科技运营中心、软件中心春招笔试测评面试体检全记录
  • KIVY AliasProperty 运用报错汇总
  • 一行代码实现鼠标横向滚动
  • Ubuntu的文件权限介绍
  • node.js学习
  • 2024年最佳插电式混合动力电动汽车
  • MySQLWorkbench导出sql文件
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • javascript面向对象之创建对象
  • Laravel 菜鸟晋级之路
  • node 版本过低
  • PaddlePaddle-GitHub的正确打开姿势
  • Redis学习笔记 - pipline(流水线、管道)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • VUE es6技巧写法(持续更新中~~~)
  • vuex 笔记整理
  • 百度地图API标注+时间轴组件
  • 从tcpdump抓包看TCP/IP协议
  • 第十八天-企业应用架构模式-基本模式
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 记一次删除Git记录中的大文件的过程
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 探索 JS 中的模块化
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 智能网联汽车信息安全
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​香农与信息论三大定律
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • (16)Reactor的测试——响应式Spring的道法术器
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net 代码性能 - (1)
  • .NetCore 如何动态路由
  • .NET开源、简单、实用的数据库文档生成工具
  • .Net中的设计模式——Factory Method模式
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [BZOJ] 2044: 三维导弹拦截
  • [bzoj2957]楼房重建
  • [Codeforces1137D]Cooperative Game
  • [H贪心] lc100376. 新增道路查询后的最短距离 II(贪心+读题+代码实现+周赛409_3)