Unity 模型尺寸自适应
在开发过程中可能会因为美术资源规格不统一或者其他项目上的硬性需求遇到模型在被加载出以后大小不一的情况,基本的解决方案都是修改scale值进行直接的缩放,但是有时量级太多无法判定scale的数值时就需要针对模型的render进行调节,以下为详细的解决方案
一、计算模型的标准尺寸
在适配前,先对标准的尺寸进行计算,即选定想要适配的标准模型,对该模型进行参数的抽取作为标准参数。
/// <summary>/// 获取标准模型参数/// </summary>/// <param name="gameObj">目标游戏物体</param>/// <returns></returns>private Vector3 GetNormalSize(GameObject gameObj){Vector3 modelSize = Vector3.zero;allChild = gameObj.GetComponentsInChildren<Transform>();for (int i = 0; i < allChild.Length; i++){if (allChild[i].GetComponent<SkinnedMeshRenderer>()){//获取模型的规格尺寸modelSize = allChild[i].GetComponent<SkinnedMeshRenderer>().bounds.size; }if (allChild[i].GetComponent<MeshRenderer>()){ modelSize = allChild[i].GetComponent<MeshRenderer>().bounds.size;return modelSize;}}return modelSize;}
二、针对render类型对模型的Scale进行缩放
获取到标准模型参数后可以对需要做适配的模型进行数据的适配,具体的参数可以做限制,基本原理就是依据标准的模型参数数据做比值,依据比值进行scale的缩放,两层计算后就可以得到对应的适配效果。
/// <summary>/// 设置模型尺寸/// </summary>/// <param name="gameObj">模型游戏物体</param>private void SetModelSize(GameObject gameObj){allChild = gameObj.GetComponentsInChildren<Transform>();for (int i = 0; i < allChild.Length; i++){if (allChild[i].GetComponent<SkinnedMeshRenderer>()){Vector3 modelSize;//获取模型的规格尺寸modelSize = allChild[i].GetComponent<SkinnedMeshRenderer>().bounds.size;//限定模型尺寸的规格if (modelSize.y < 2){gameObj.transform.localScale = Vector3.one * 10;}else{gameObj.transform.localScale = new Vector3(gameObj.transform.localScale.x / (modelSize.x / 1f),gameObj.transform.localScale.y / (modelSize.x / 1f),gameObj.transform.localScale.z / (modelSize.x / 1f));}}if (allChild[i].GetComponent<MeshRenderer>()){Vector3 modelSize;modelSize = allChild[i].GetComponent<MeshRenderer>().bounds.size;if (modelSize.y < 2){gameObj.transform.localScale = Vector3.one * 10;}else{gameObj.transform.localScale = new Vector3(gameObj.transform.localScale.x / (modelSize.x / 1f),gameObj.transform.localScale.y / (modelSize.x / 1f),gameObj.transform.localScale.z / (modelSize.x / 1f));}Debug.Log(modelSize);Debug.Log(gameObj.transform.localScale);}}}
【这种粗糙的计算方式会导致部分模型的缩放出现拉伸变形的效果,需要对模型进行细节上的计算来最大化保证模型的表现效果】
Unity 模型尺寸自适应相关推荐
- [Unity实战] UGUI 背景框(图片)尺寸自适应内容(图片、按钮、文字等)
第一次发布时间:2020-09-18 修改时间: UGUI 背景框尺寸自适应内容 一.引言 二.研究方法与过程 2.1 关键技术 2.2 功能模块 2.3 数据结构 2.4 关键代码 三.研究结论和成 ...
- Unity模型制作导出规范
Unity模型制作导出规范 一.模型制作流程 素材采集-模型制作(高低模)-展UV-贴图制作-场景整合-层级整理.命名.(展lightmapUV)-(动画烘焙)-场景调整导出 二.模型制作规范 1. ...
- UNITY 模型与动画优化选项
UNITY 模型与动画优化选项 1,RIG: Optimze Game Objects,[默认是没勾选的] 效果:将骨骼层级从模型中移除,放到动画控制器中,这样性能提高明显.实测中发现原来瞬间加载5个 ...
- Unity快速入门之四 - Unity模型动画相关
最近要给公司的小伙伴做Unity入门,针对几个常用的知识进行快速入门介绍. Unity快速入门之一 3D基础概念.Camera.Canvas RenderMode的几种方式对比_翕翕堂 Unity快速 ...
- unity模型制作(终章):柔体布料绘制
在前六章模型绘制的基础上,加一些几何算法,很容易制作出不同样式的模型,例如下图中的几种模型:直梯.曲梯.各种屋顶等等. 不过最终章主要想讲一下柔体的绘制:所谓柔体,其实就是物体在受力的作用时,会产生形 ...
- Unity 模型导入材质丢失解决方案
Unity 模型导入材质丢失解决方案 1.模型导入材质丢失解决方案 步骤如下: 1.打开材质球 2.,反射率和法线贴图分别赋值,即下面的两个物体对号入座 3.渲染成功 2.3d人物模型材质丢失 步骤如 ...
- 【threejs】透视相机,实现相机根据模型大小自适应,将模型放置在视角内
透视相机,实现相机根据模型大小自适应,将模型放置在视角内 const box3_2 = new THREE.Box3().setFromObject(object); //新建一个Box3包裹盒把模型 ...
- 解决Unity模型贴图反转的问题
解决Unity模型贴图反转的问题 设置shader的贴图属性:tiling x为-1 参考链接:https://www.cnblogs.com/vivid-stanley/p/5494218.html
- unity模型木桶木桩木船木板木梯木房子绳子木箱模型石头模型
unity模型,常见的木制品模型 点我下载资源 模型如下图所示:可以自行拼凑搭建场景 点我下载资源 https://download.csdn.net/download/weixin_43474701 ...
最新文章
- Linux配置SSH无密码登陆
- [bootStrap]代码块出现横线滚动条
- 信号量函数 semget() semop() semctl()
- Get Requests with Json Data Get Requests with Url Parameters
- python2.0_day19_后台数据库设计思路
- ecnu1244 积木游戏
- jq使用教程09_ 教程集合帖-伙伴们贡献,不断更新(4.17)
- SQL基础面试题(五)
- jmake 编译当前目录所有c/c++单文件
- Qt qss 动态属性-不同条件不同显示
- 升压和升降压拓扑中IDC与IO的关系推导 // 《精通开关电源设计》P41式2-2
- i春秋-CTF-web文件上传
- 诡异!意识何以意识到意识自身?道翰天琼认知智能机器人API接口平台为您揭秘。
- 颜色RGB对照表(颜色大全)
- Java堆空间(Heap Space)
- kaldi中的egs文件夹中的demo都是干什么的
- python判断循环小数_python如果一个数是为无限循环小数,返回分数格式,否则返回小数格式...
- Android多媒体应用开发之MP3音乐播放器
- 从 IT 时代到 DT 时代的转型
- 桌面软件大屏通用交叉输入功能设计实例