分别改动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 这一篇的内容比较简单,因为所有理论内容都在上一篇中讲到了.但有两点需 ...
随机推荐
- Linux grep 筛选语句
1. 同时满足多个条件 cat logs.log |grep 123|grep 'abc'|more --查询logs.log中同时满足123和abc的句子 2. 满足任意一个条件 cat ...
- Python学习---Day96
转载:http://www.cnblogs.com/wupeiqi/articles/6229292.html Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可 ...
- 不实例化一个 class 的时候使用它的property
class A: @property def name(self): " print(A.name) # <property object at 0x10d54cf98> cla ...
- (WC2018模拟十二)【FJOI2016集训Day7T1】挑选子序列
题解: 这题太神仙了,先咕着,放个令人****的官方题解(精确覆盖问题是NP完全问题啊摔) Dancing Link X学习资料:QAQ TAT qwq Orz Donald Knuth大神... p ...
- 解决js计算 小数加减乘除失真的功能函数
function floatPoint(one,two,str){ //转化为字符串 one = ''+one two = ''+two //切割成整数部分和小数部分 var oneStr = one ...
- 使用VUE开发微信小程序
使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力: 彻底的组件化开发能力:提高代码复用性完整的 Vue.js 开发体验方便的 Vuex 数据管理方案:方便构建复杂应用快捷的 ...
- js各种验证
1. var Validate = function() { //账号验证 字母,数字,下划线,不能少于6位大于20位 this.isName =function(value){ var reg = ...
- centos7.3安装php7.0
需求:在Centos7.3下搭建LNMP环境 文章转载自:http://blog.csdn.net/wszll_alex/article/details/76285324 作者:狂热森林 . 关闭防火 ...
- 洛谷 P2734 游戏 A Game
P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...
- HDU 2196 Computer(求树上每一个节点到其他点的最远距离)
解题思路: 求出树的直径的两个端点.则树上每一个节点到其它点的最远距离一定是到这两个端点的距离中最长的那一个. #include <iostream> #include <cstri ...