分别改动Cube每一个面的贴图UV(Unity3D开发之十八)
2017-06-19 21:18
190 查看
猴子原创。欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/46611169
今天项目中须要改动一个Cube中每一个面的贴图UV。也就是贴图中有多个矩形贴图。须要程序从贴图中读取一部分赋值给Cube每一个面。
这里已经有人实现了。
CustomUVS.cs
使用的贴图
给一个Cube加入改图片材质。
并加入CustomUVS.cs脚本。改动须要截取的区域原点
注意:因为图片是3x3的。所以截取区域中按3等分截取。
实际效果
原文地址: http://blog.csdn.net/cocos2der/article/details/46611169
今天项目中须要改动一个Cube中每一个面的贴图UV。也就是贴图中有多个矩形贴图。须要程序从贴图中读取一部分赋值给Cube每一个面。
这里已经有人实现了。
CustomUVS.cs
using UnityEngine; using System.Collections; [ExecuteInEditMode] public class CustomUVS : MonoBehaviour { public Vector2 topPoint; public Vector2 bottomPoint; public Vector2 leftPoint; public Vector2 rightPoint; public Vector2 frontPoint; public Vector2 backPoint; private Mesh m_mesh; public enum CubeFaceType { Top, Bottom, Left, Right, Front, Back }; // Use this for initialization void Start () { MeshFilter meshFilter = GetComponent<MeshFilter>(); if (meshFilter == null) { Debug.LogError("Script needs MeshFilter component"); return; } #if UNITY_EDITOR Mesh meshCopy = Mesh.Instantiate(meshFilter.sharedMesh) as Mesh; // Make a deep copy meshCopy.name = "Cube"; m_mesh = meshFilter.mesh = meshCopy; // Assign the copy to the meshes #else m_mesh = meshFilter.mesh; #endif if (m_mesh == null || m_mesh.uv.Length != 24) { Debug.LogError("Script needs to be attached to built-in cube"); return; } UpdateMeshUVS(); } // Update is called once per frame void Update () { #if UNITY_EDITOR UpdateMeshUVS(); #endif } void UpdateMeshUVS() { Vector2[] uvs = m_mesh.uv; // Front SetFaceTexture(CubeFaceType.Front, uvs); // Top SetFaceTexture(CubeFaceType.Top, uvs); // Back SetFaceTexture(CubeFaceType.Back, uvs); // Bottom SetFaceTexture(CubeFaceType.Bottom, uvs); // Left SetFaceTexture(CubeFaceType.Left, uvs); // Right SetFaceTexture(CubeFaceType.Right, uvs); m_mesh.uv = uvs; } Vector2[] GetUVS(float originX, float originY) { Vector2[] uvs = new Vector2[4]; uvs[0] = new Vector2(originX / 3.0f, originY / 3.0f); uvs[1] = new Vector2((originX + 1) / 3.0f, originY / 3.0f); uvs[2] = new Vector2(originX / 3.0f, (originY + 1) / 3.0f); uvs[3] = new Vector2((originX + 1) / 3.0f, (originY + 1) / 3.0f); return uvs; } void SetFaceTexture(CubeFaceType faceType, Vector2[] uvs) { if (faceType == CubeFaceType.Front) { Vector2[] newUVS = GetUVS(frontPoint.x, frontPoint.y); uvs[0] = newUVS[0]; uvs[1] = newUVS[1]; uvs[2] = newUVS[2]; uvs[3] = newUVS[3]; }else if (faceType == CubeFaceType.Back) { Vector2[] newUVS = GetUVS(backPoint.x, backPoint.y); uvs[10] = newUVS[0]; uvs[11] = newUVS[1]; uvs[6] = newUVS[2]; uvs[7] = newUVS[3]; }else if (faceType == CubeFaceType.Top) { Vector2[] newUVS = GetUVS(topPoint.x, topPoint.y); uvs[8] = newUVS[0]; uvs[9] = newUVS[1]; uvs[4] = newUVS[2]; uvs[5] = newUVS[3]; }else if (faceType == CubeFaceType.Bottom) { Vector2[] newUVS = GetUVS(bottomPoint.x, bottomPoint.y); uvs[12] = newUVS[0]; uvs[14] = newUVS[1]; uvs[15] = newUVS[2]; uvs[13] = newUVS[3]; }else if (faceType == CubeFaceType.Left) { Vector2[] newUVS = GetUVS(leftPoint.x, leftPoint.y); uvs[16] = newUVS[0]; uvs[18] = newUVS[1]; uvs[19] = newUVS[2]; uvs[17] = newUVS[3]; }else if (faceType == CubeFaceType.Right) { Vector2[] newUVS = GetUVS(rightPoint.x, rightPoint.y); uvs[20] = newUVS[0]; uvs[22] = newUVS[1]; uvs[23] = newUVS[2]; uvs[21] = newUVS[3]; } } }
使用的贴图
给一个Cube加入改图片材质。
并加入CustomUVS.cs脚本。改动须要截取的区域原点
注意:因为图片是3x3的。所以截取区域中按3等分截取。
实际效果
相关文章推荐
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
- unity3D游戏开发十八之NGUI动画
- [Unity3D]Unity3D游戏开发之2D贴图实现血条组件
- Unity3d开发(十八) 监听编辑器状态改变,制定自定义回调
- unity3d游戏开发之UV贴图教程
- Unity3D开发小贴士(十八)各种事件的执行顺序
- Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
- 降龙十八掌分别是哪十八掌? ZT
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八)
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八)
- GTK+图形化应用程序开发学习笔记(十八)—滚动窗口构件、分栏窗口构件
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八)
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八) 推荐
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八)
- PC Camera开发日志(十八)------- 非模态对话框
- 焦油坑---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十八)[转]
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识 - A
- 使用 C# 开发智能手机软件:推箱子(十八)
- [3D数学]Quake3平面Surface的光照贴图(light map)UV坐标与Surface顶点世界3D坐标之间的转换原理