猴子原创。欢迎转载。转载请注明: 转载自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];
}
}
}
  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. 做一个会PS切图的前端开发

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

  4. 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端

    前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...

  5. SQL如何取得一个面的中心点

    ) .sdo_point.x x, sdo_geom.sdo_centroid(t.shape, ) .sdo_point.y y from gd_zy_region t SQL如何取得一个面的中心点 ...

  6. JavaScript+svg绘制的一个饼状图

    结果: svg参考:https://www.w3.org/TR/SVG/<body onload='document.body.appendChild( pieChart([12,23,34,4 ...

  7. 用HTML5绘制的一个星空特效图

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 【Unity3D】Unity3D开发《我的世界》之四、创建一个Block

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_04.html 一.新建Block类 我们的Block类用来存储跟Block相关的信 ...

  9. 【Unity3D】Unity3D开发《我的世界》之二、创建一个立方体

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_02.html 这一篇的内容比较简单,因为所有理论内容都在上一篇中讲到了.但有两点需 ...

随机推荐

  1. Map的5种遍历方式

    public class MapF { public static void main(String[] args) { Map<String, Integer> tempMap = ne ...

  2. chrome 获取移动端页面元素信息

    一:背景在使用appium进行app端自动化测试的时候,一般使用的是uiautomatorviewer来给页面元素做定位.但如果遇到页面元素类型是webview的时候,则只能定位整个页面,而不能更进一 ...

  3. [USACO4.1]篱笆回路Fence Loops

    题目:USACO Training 4.1(在官网上提交需加文件输入输出).洛谷P2738. 题目大意:给你一张图里的边集,让你求出这张图的最小环. 解题思路:求最小环很简单,用Floyd即可.最重要 ...

  4. Linux Shell脚本编程-信号捕获

    bash编程的信号捕获:  kill -l 显示当前系统可用信号(trap -l)  获取帮助:man 7 single 常用信号: 1) SIGHUP  无须重启进程而让其重读配置文件  2) SI ...

  5. 【问题】解决python3不支持mysqldb

    Django框架使用的还是python2.x的MySQLdb,而python3.x使用的是pymysql,centos7上默认安装的python2.7,自己安装了python3.6的版本,在运行dja ...

  6. Android实战简易教程-第二十八枪(Uri转String型实例)

    接上一篇文章.我们能够轻易的获取所选图片的uri,那么我们考虑怎样将获取的uri转换成String型的地址呢? 接下来我们通过实例来研究.布局文件和上篇(二十七枪)一致,我们就不再列出,直接看Main ...

  7. jeesite 简介

    jeesite 简介 https://github.com/thinkgem/jeesite http://jeesite.com/

  8. 生成apk文件遇到的编译问题error: format not a string literal and no format arguments

    编译错误时使用的android-ndk为r9的版本号.报下面错误: "Compile++ thumb : cocosdenshion_static <= SimpleAudioEngi ...

  9. Android 取得 ListView中每个Item项目的值

    首先我们须要创建 ListView .这里假定我们已经创建好了而且使用SimpleAdapter设置好了adapter数据,看一下我们的adapter ArrayList<HashMap< ...

  10. UTF8有很明显的特征:如果最高字节为0,则表示一个英文字符(与ASCII完全相同)。如果有2个以上1,表示是首个字节。如果最高位是10,则表示一个中间字节。

    摘自<Qt中的C++技术.pdf> page 33