猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!

原文地址: http://blog.csdn.net/cocos2der/article/details/46611169

今天项目中需要修改一个Cube中每个面的贴图UV,也就是贴图中有多个矩形贴图,需要程序从贴图中读取一部分赋值给Cube每个面。

这里已经有人实现了。

CustomUVS.cs

  1. using UnityEngine;
  2. using System.Collections;
  3. [ExecuteInEditMode]
  4. public class CustomUVS : MonoBehaviour {
  5. public Vector2 topPoint;
  6. public Vector2 bottomPoint;
  7. public Vector2 leftPoint;
  8. public Vector2 rightPoint;
  9. public Vector2 frontPoint;
  10. public Vector2 backPoint;
  11. private Mesh m_mesh;
  12. public enum CubeFaceType
  13. {
  14. Top,
  15. Bottom,
  16. Left,
  17. Right,
  18. Front,
  19. Back
  20. };
  21. // Use this for initialization
  22. void Start () {
  23. MeshFilter meshFilter = GetComponent<MeshFilter>();
  24. if (meshFilter == null) {
  25. Debug.LogError("Script needs MeshFilter component");
  26. return;
  27. }
  28. #if UNITY_EDITOR
  29. Mesh meshCopy = Mesh.Instantiate(meshFilter.sharedMesh) as Mesh; // Make a deep copy
  30. meshCopy.name = "Cube";
  31. m_mesh = meshFilter.mesh = meshCopy; // Assign the copy to the meshes
  32. #else
  33. m_mesh = meshFilter.mesh;
  34. #endif
  35. if (m_mesh == null || m_mesh.uv.Length != 24) {
  36. Debug.LogError("Script needs to be attached to built-in cube");
  37. return;
  38. }
  39. UpdateMeshUVS();
  40. }
  41. // Update is called once per frame
  42. void Update ()
  43. {
  44. #if UNITY_EDITOR
  45. UpdateMeshUVS();
  46. #endif
  47. }
  48. void UpdateMeshUVS()
  49. {
  50. Vector2[] uvs = m_mesh.uv;
  51. // Front
  52. SetFaceTexture(CubeFaceType.Front, uvs);
  53. // Top
  54. SetFaceTexture(CubeFaceType.Top, uvs);
  55. // Back
  56. SetFaceTexture(CubeFaceType.Back, uvs);
  57. // Bottom
  58. SetFaceTexture(CubeFaceType.Bottom, uvs);
  59. // Left
  60. SetFaceTexture(CubeFaceType.Left, uvs);
  61. // Right
  62. SetFaceTexture(CubeFaceType.Right, uvs);
  63. m_mesh.uv = uvs;
  64. }
  65. Vector2[] GetUVS(float originX, float originY)
  66. {
  67. Vector2[] uvs = new Vector2[4];
  68. uvs[0] = new Vector2(originX / 3.0f, originY / 3.0f);
  69. uvs[1] = new Vector2((originX + 1) / 3.0f, originY / 3.0f);
  70. uvs[2] = new Vector2(originX / 3.0f, (originY + 1) / 3.0f);
  71. uvs[3] = new Vector2((originX + 1) / 3.0f, (originY + 1) / 3.0f);
  72. return uvs;
  73. }
  74. void SetFaceTexture(CubeFaceType faceType, Vector2[] uvs)
  75. {
  76. if (faceType == CubeFaceType.Front) {
  77. Vector2[] newUVS = GetUVS(frontPoint.x, frontPoint.y);
  78. uvs[0] = newUVS[0];
  79. uvs[1] = newUVS[1];
  80. uvs[2] = newUVS[2];
  81. uvs[3] = newUVS[3];
  82. }else if (faceType == CubeFaceType.Back) {
  83. Vector2[] newUVS = GetUVS(backPoint.x, backPoint.y);
  84. uvs[10] = newUVS[0];
  85. uvs[11] = newUVS[1];
  86. uvs[6] = newUVS[2];
  87. uvs[7] = newUVS[3];
  88. }else if (faceType == CubeFaceType.Top) {
  89. Vector2[] newUVS = GetUVS(topPoint.x, topPoint.y);
  90. uvs[8] = newUVS[0];
  91. uvs[9] = newUVS[1];
  92. uvs[4] = newUVS[2];
  93. uvs[5] = newUVS[3];
  94. }else if (faceType == CubeFaceType.Bottom) {
  95. Vector2[] newUVS = GetUVS(bottomPoint.x, bottomPoint.y);
  96. uvs[12] = newUVS[0];
  97. uvs[14] = newUVS[1];
  98. uvs[15] = newUVS[2];
  99. uvs[13] = newUVS[3];
  100. }else if (faceType == CubeFaceType.Left) {
  101. Vector2[] newUVS = GetUVS(leftPoint.x, leftPoint.y);
  102. uvs[16] = newUVS[0];
  103. uvs[18] = newUVS[1];
  104. uvs[19] = newUVS[2];
  105. uvs[17] = newUVS[3];
  106. }else if (faceType == CubeFaceType.Right) {
  107. Vector2[] newUVS = GetUVS(rightPoint.x, rightPoint.y);
  108. uvs[20] = newUVS[0];
  109. uvs[22] = newUVS[1];
  110. uvs[23] = newUVS[2];
  111. uvs[21] = newUVS[3];
  112. }
  113. }
  114. }
  1. 使用的贴图

  2. 给一个Cube添加改图片材质。并添加CustomUVS.cs脚本。修改需要截取的区域原点

注意:由于图片是3x3的,所以截取区域中按3等分截取。

实际效果

分别修改Cube每个面的贴图UV(Unity3D开发之十八)的更多相关文章

  1. 分别改动Cube每一个面的贴图UV(Unity3D开发之十八)

    猴子原创.欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46611169 ...

  2. Unity2D Sprite灰白图(Unity3D开发之十一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=596 昨晚看到群里问到2DSpr ...

  3. 如何修改新建脚本模板-ScriptTemplates(Unity3D开发之十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/44957631 ...

  4. Unity光照图UV显示

    美术的同学觉得 Unity 光照图烘焙的不够美丽,需要在 ps 里修一修,但是不知道每个物体对应的光照图在哪个区域,UV 是如何分布的,于是要求写一个工具显示,于是有了下面这个: 打开场景自动读取当前 ...

  5. PowerShell安全修改Windows 10 登陆背景图

    PowerShell安全修改Windows 10 登陆背景图 可以把登陆的背景图换掉,主要是修改操作pri文件 $priPath = "$env:windir\SystemResources ...

  6. 做一个会PS切图的前端开发

    系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...

  7. 美图秀秀 web开发图片编辑器

    美图秀秀web开发平台 http://open.web.meitu.com/wiki/ 1.环境配置 1.1.设置crossdomain.xml 下载crossdomain.xml文件,把解压出来的c ...

  8. Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...

  9. 开源、免费功能全面的Chart图

    简介: 每个前端都有一个Chart梦,至于真正去做的寥寥无几,无怪乎几个原因: 浏览器兼容问题 数据处理的一些算法,如自动计算坐标轴.自动排列文本等 流畅的动画 丰富的交互功能 去年一年的时间里,我一 ...

随机推荐

  1. norflash启动和nandflash启动

    S3C2440的启动时读取的第一条指令是在0x00上,分为成nand flash和nor flash上启动. 1)nand flash:适合大容量数据存储,类似硬盘: 2)nor flash:适合小容 ...

  2. SQL语言四大类

    SQL语言四大类   SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL   数据查询语言DQL基本结构是由SELECT子句, ...

  3. android galley实现画廊效果

    青春流水指间. 每段路,都有即将要来的旅程 每颗心,都有值得期待的成分 Android之ImageSwitcher,Gallery用法 今天在做一个软件界面时用到了ImageSwitcher和Gall ...

  4. 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

    在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...

  5. 6.0、Android Studio性能优化工具

    显示图像包含四个步骤.简单来说,CPU对比显示列表,GPU渲染图片显示,内存存储图片和数据,电池提供点力能源.每个部分的硬件都有限制,超过这个限制会导致应用运行较慢,显示性能差,或者耗电. 为了查找造 ...

  6. Android透明动画

    Android透明动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...

  7. 一个简单的安卓+Servlet图片上传例子

    例子比较 简单,服务端为Java Web Servlet,doPost方法中接收图片并保存,然后将保存的图片名返回给客户端,关键代码: @SuppressWarnings("deprecat ...

  8. (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在回到GameScene.m中,我们所有的碰撞处理就放在该类中 ...

  9. 下载android4.4.2源码全过程(附已下载的源码)

    今天在下载andriod源码,特来与大家分享一下我的经验.当然,网上教下载源码的教程较多,本文主要针对在GFW下下载源码出现的各种问题的解决方法. 1.首先安装下载客户端git , curl. 命令如 ...

  10. Java-IO之BufferedOutputStream(缓冲输出流)

    BufferedOutputStream是缓冲输出流,继承于FilterOutputStream,作用是为另外一个输出流提供换从功能. 主要函数列表: BufferedOutputStream(Out ...