分别改动Cube每一个面的贴图UV(Unity3D开发之十八)
猴子原创。欢迎转载。转载请注明: 转载自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等分截取。
实际效果
分别改动Cube每一个面的贴图UV(Unity3D开发之十八)的更多相关文章
- 分别修改Cube每个面的贴图UV(Unity3D开发之十八)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46611169 ...
- Unity2D Sprite灰白图(Unity3D开发之十一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=596 昨晚看到群里问到2DSpr ...
- 做一个会PS切图的前端开发
系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...
- 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...
- SQL如何取得一个面的中心点
) .sdo_point.x x, sdo_geom.sdo_centroid(t.shape, ) .sdo_point.y y from gd_zy_region t SQL如何取得一个面的中心点 ...
- JavaScript+svg绘制的一个饼状图
结果: svg参考:https://www.w3.org/TR/SVG/<body onload='document.body.appendChild( pieChart([12,23,34,4 ...
- 用HTML5绘制的一个星空特效图
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Unity3D】Unity3D开发《我的世界》之四、创建一个Block
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_04.html 一.新建Block类 我们的Block类用来存储跟Block相关的信 ...
- 【Unity3D】Unity3D开发《我的世界》之二、创建一个立方体
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_02.html 这一篇的内容比较简单,因为所有理论内容都在上一篇中讲到了.但有两点需 ...
随机推荐
- double int 类型的区别
内部组织格式不同: po [NSString stringWithFormat:@"%d", f] 107886912 (lldb) po [NSString stringWith ...
- CodeForces-722C Destroying Array 并查集 离线操作
题目链接:https://cn.vjudge.net/problem/CodeForces-722C 题意 给个数组,每次删除一个元素,删除的元素作为一个隔断,问每次删除后该元素左右两边最大连续和 思 ...
- 《Linux 进程间通信》命名管道:FIFO
命名管道的主要用途:不相关的进程之间交换数据. 命令行上创建命名管道: $ mkfifo filename 程序中创建命名管道: #include <sys/types.h> #incl ...
- mysql 密码的破解
现在的主流的数据库一般是mysql ,sql server , oracle. 有的时候我们忘记了数据库密码的时候我们要怎么办,破解别人的数据库的密码的时候我们要怎么搞 忘记密码是一件很头痛的 ...
- c traps and pitfalls reading notes(2)
1.运算符优先级,这个我是肯定记不住,每次遇到的时候都纠结下,然后去查下,或者直接括号,但是括号太多,你懂得,要用notepad才能理清各种层次.这里啦个下来,留着参考.
- 【codeforces 404D】Minesweeper 1D
[题目链接]:http://codeforces.com/problemset/problem/404/D [题意] 让你玩一个1维的扫雷游戏; 游戏的描述由数字0..2以及符号*表示; 分别表示这个 ...
- solr + eclipse 调试环境搭建
1: 在官网下载对应源码 http://www.fayea.com/apache-mirror/lucene/solr/4.1.0/ 选择源码文件,如图所示: 2: 解压后目录如图所示: 在根目录下存 ...
- CAS-ERR Cannot create a session after the response has been committed
现象: 当cas 登录人数较少时候没有错误,但是用户过多时候出现下列err May-2016 18:09:11.932 SEVERE [http-nio-8080-exec-52] org.apach ...
- STL_算法_Heap算法(堆排)(精)
C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) /***************************************** STL-算法--Heap算法 堆排序 ...
- [JAVA · 0基础]:3.转义字符
定义 全部的ASCII码都能够用"\"加数字(通常是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\ ...