通过代码创建2d贴图
来源:互联网 发布:oracle 查看数据库ip 编辑:程序博客网 时间:2024/06/06 02:57
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public abstract class CustomMesh : MonoBehaviour
{
protectedbool _isMaterialInitialized;
protectedVector2 _bounds;
protectedMeshFilter _meshFilter;
protectedMeshRenderer _meshRenderer;
protectedColor _color;
protectedTexture _texture;
protectedShader _shader;
publicVector2 Bounds
{
get {return _bounds; }
}
public bool IsVisible
{
get
{
return _meshRenderer != null ? _meshRenderer.enabled :false;
}
set
{
if (_meshRenderer != null)
{
_meshRenderer.enabled =value;
}
}
}
public virtual Color Color
{
get
{
return _color;
}
set
{
_color =value;
if (_meshRenderer != null)
{
_meshRenderer.material.SetColor("_Color",value);
}
}
}
public float Alpha
{
get
{
return _color.a;
}
set
{
_color.a =value;
if (_meshRenderer != null)
{
_meshRenderer.material.SetColor("_Color", _color);
}
}
}
public Texture Texture
{
get
{
return _texture;
}
set
{
_texture =value;
if (_meshRenderer != null)
{
_meshRenderer.material.SetTexture("_MainTex",value);
}
}
}
protectedvirtual void Reset()
{
_meshRenderer = GetComponent<MeshRenderer>();
if (_meshRenderer ==null)
{
_meshRenderer = gameObject.AddComponent<MeshRenderer>();
}
_meshFilter = GetComponent<MeshFilter>();
if (_meshFilter ==null)
{
_meshFilter = gameObject.AddComponent<MeshFilter>();
}
Mesh mesh = GenerateMesh();
if (_meshFilter.sharedMesh !=null)
{
if (Application.isPlaying)
{
Destroy(_meshFilter.sharedMesh);
}
else
{
DestroyImmediate(_meshFilter.sharedMesh);
}
}
_meshFilter.mesh = mesh;
if (_isMaterialInitialized ==false)
{
_shader =Shader.Find("Unlit/Transparent");
_meshRenderer.sharedMaterial =new Material(_shader);
_meshRenderer.sharedMaterial.SetTexture("_MainTex", _texture);
_isMaterialInitialized =true;
}
}
protectedabstract Mesh GenerateMesh();
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
publicclass QuadMesh : CustomMesh
{
[SerializeField]
privateCamera _camera;
public void MakePixelPerfect()
{
if (_texture == null)
{
_texture = gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_MainTex");
}
transform.localScale = TransformSizeFromScreenToWorld(
new Vector2(_texture.width, _texture.height));
}
public void MakeHighAsScreen()
{
MakePixelPerfect();
float factor = transform.localScale.y / (_camera.orthographicSize * 2);
transform.localScale /= factor;
}
publicVector3 TransformSizeFromScreenToWorld(Vector2 screenSize)
{
float cameraSizeY = _camera.orthographicSize;
float cameraSizeX = cameraSizeY /Screen.height * Screen.width;
Vector3 worldSize =Vector3.zero;
worldSize.x = screenSize.x /Screen.width * cameraSizeX * 2;
worldSize.y = screenSize.y /Screen.height * cameraSizeY * 2;
return worldSize;
}
#region Quad Parameters
privateVector3[] quadVerts =
{
new Vector3(-0.5f, -0.5f),
new Vector3(-0.5f,0.5f),
new Vector3(0.5f,0.5f),
new Vector3(0.5f, -0.5f)
};
privateVector2[] quadUvs =
{
new Vector2(0,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(1,0)
};
privateint[] quadTriangles =
{
0, 1, 2,
2, 3, 0
};
#endregion
protectedoverride Mesh GenerateMesh()
{
_bounds =Vector2.one;
Mesh mesh =new Mesh();
List<Vector3> vertices =new List<Vector3>();
for (int i =0; i < quadVerts.Length; i++)
{
Vector3 vert =new Vector3();
vert.x = quadVerts[i].x * _bounds.x;
vert.y = quadVerts[i].y * _bounds.y;
vertices.Add(vert);
}
mesh.vertices = vertices.ToArray();
mesh.uv = quadUvs;
mesh.subMeshCount =1;
mesh.SetTriangles(quadTriangles,0);
return mesh;
}
privatevoid Awake()
{
if (GetComponent<MeshFilter>() ==null)
{
Reset();
_camera =Camera.main;
}
_meshRenderer = GetComponent<MeshRenderer>();
}
}
- 通过代码创建2d贴图
- unity 2d贴图
- 通过代码自动更换Object贴图
- Unity3D 2D入门——第一天:2D物体创建以及贴图 && C#一些知识
- Directx 2D的alpha 通道贴图
- Android OpenGL 2D贴图切换
- 记录一下GLFW的2D贴图
- GUI之绘制2D贴图
- 通过代码创建DataTemplate
- 通过代码创建按钮
- 3D 贴图算法
- MyCADCAE-3D贴图
- 关于OpenGL 2D纹理贴图的经验总结,
- 关于OpenGL 2D纹理贴图的经验总结
- Android opengl 2d绘图/贴图详细教程
- openGL学习笔记6 bmp 2D纹理贴图
- ios 3D引擎 SceneKit 开发(2) --贴图篇
- 通过代码创建Java项目
- linux 常用头文件
- 企业的SNMP号
- Resource-type-->Color State List Resource
- android系统中蓝牙初步
- hdu 2083
- 通过代码创建2d贴图
- 9个offer,12家公司,35场面试,从微软到谷歌
- 常用库函数编程实现用法总结(四)strdup strtok itoa atoi
- ssh建立socks代理原理浅析
- 模板方法-回调
- VC调试方法大全
- Neon
- hdu 2182 Frog
- beyond compare 比较文件夹