Dis*_*tor 5 textures unity-game-engine
在我的游戏中,我在四边形上使用简单的纹理.我可以看到统一的GUI让我们通过设置"图像类型"选项,切片图像切片.
我想对我在四边形中使用的其他纹理做同样的事情.
简单来说,我不希望在缩放纹理本身时缩放纹理的边缘.
谢谢.
看起来你必须自己生成网格,而不是听起来那么难.网格必须如下所示:

每个纹理网格由顶点(图片上的红点)定义,并且(在这种情况下)每个顶点都有两个参数:
Vector3与位置.仅x和y这里所使用的,作为四是平坦的(因此,z= 0).Vector2与UV,即材料放在网格上的方式.这是纹理坐标:u和v.为了配置这个网格,我添加了参数:
b- 对于边框 - 游戏对象的边框有多大(以3d为单位)
w,h- 对于游戏对象的宽度和高度(以3d为单位)
m- 图像中的边距有多大(浮动0f到0.5f)
如何在Unity3d中执行此操作:
MeshRenderer包含所需材料的空白MeshFilter.Mesh,第一个例子. 请注意,对于unity3d,您必须使用三角形而不是四边形创建它(因此对于每个四边形创建两个三角形).
查尼巴尔的解决方案对我来说就像一个魅力,但由于我不是这方面的专家,所以实现它对我来说并不简单。我将把这段代码放在这里,以防有人发现它有用。
using UnityEngine;
public class SlicedMesh : MonoBehaviour
{
private float _b = 0.1f;
public float Border
{
get
{
return _b;
}
set
{
_b = value;
CreateSlicedMesh();
}
}
private float _w = 1.0f;
public float Width
{
get
{
return _w;
}
set
{
_w = value;
CreateSlicedMesh();
}
}
private float _h = 1.0f;
public float Height
{
get
{
return _h;
}
set
{
_h = value;
CreateSlicedMesh();
}
}
private float _m = 0.4f;
public float Margin
{
get
{
return _m;
}
set
{
_m = value;
CreateSlicedMesh();
}
}
void Start()
{
CreateSlicedMesh();
}
void CreateSlicedMesh()
{
Mesh mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
mesh.vertices = new Vector3[] {
new Vector3(0, 0, 0), new Vector3(_b, 0, 0), new Vector3(_w-_b, 0, 0), new Vector3(_w, 0, 0),
new Vector3(0, _b, 0), new Vector3(_b, _b, 0), new Vector3(_w-_b, _b, 0), new Vector3(_w, _b, 0),
new Vector3(0, _h-_b, 0), new Vector3(_b, _h-_b, 0), new Vector3(_w-_b, _h-_b, 0), new Vector3(_w, _h-_b, 0),
new Vector3(0, _h, 0), new Vector3(_b, _h, 0), new Vector3(_w-_b, _h, 0), new Vector3(_w, _h, 0)
};
mesh.uv = new Vector2[] {
new Vector2(0, 0), new Vector2(_m, 0), new Vector2(1-_m, 0), new Vector2(1, 0),
new Vector2(0, _m), new Vector2(_m, _m), new Vector2(1-_m, _m), new Vector2(1, _m),
new Vector2(0, 1-_m), new Vector2(_m, 1-_m), new Vector2(1-_m, 1-_m), new Vector2(1, 1-_m),
new Vector2(0, 1), new Vector2(_m, 1), new Vector2(1-_m, 1), new Vector2(1, 1)
};
mesh.triangles = new int[] {
0, 4, 5,
0, 5, 1,
1, 5, 6,
1, 6, 2,
2, 6, 7,
2, 7, 3,
4, 8, 9,
4, 9, 5,
5, 9, 10,
5, 10, 6,
6, 10, 11,
6, 11, 7,
8, 12, 13,
8, 13, 9,
9, 13, 14,
9, 14, 10,
10, 14, 15,
10, 15, 11
};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5350 次 |
| 最近记录: |