分别修改Cube每个面的贴图UV(Unity3D开发之十八)
来源:互联网 发布:淘宝店铺要交税吗 编辑:程序博客网 时间:2024/06/06 02:57
猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: 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等分截取。
实际效果
2 0
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
- unity3d游戏开发之UV贴图教程
- UnityShader之纹理贴图滚动实现(修改UV坐标)
- Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
- UV Mapping(UV贴图)
- unity之uv贴图画圆弧,圆弧面,不规则图形
- 【Unity Shaders】学习笔记之通过修改UV坐标实现纹理贴图的滚动(八)
- unity 贴图材质的调整-uv通道修改
- shader学习基础之五(详解uv坐标,c#类似uv坐标的值以及贴图操作)
- Unity3d游戏开发之如何使用烘焙贴图(二)
- unity3D游戏开发十八之NGUI动画
- unity3D游戏开发十八之NGUI动画
- unity3D游戏开发十八之NGUI动画
- unity之不规则多边形uv贴图
- Unity3D开发小贴士(十八)各种事件的执行顺序
- Unity3D之动态修改烘培贴图的大小&脚本烘培场景
- 立方体环境贴图(Cube Mapping)之OpenGL原理
- Unity3D之调整画质(贴图)质量
- Java基础之多线程2
- HALCON11+VS2012配置
- Linux系统下挂载光盘
- POJ 3321 Apple Tree(DFS序 ,修改节点值,子树求和)
- 11.Eclipse安装了genymotion 没有图标显示?
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
- [CF 297E]Mystic Carvings解题报告
- 平衡二叉树之一(基本性质、查询、添加)
- HDOJ 2899 Strange fuction(二分,求导。。)
- 黑马程序员——c语言宏定义
- GitLab 官方安装文档中文翻译
- RANSAC算法简介
- java exception 详解
- [2014-08-21 19:36:41 - Other] Warning: No instrumentation runner found for the launch, using a