我写了以下脚本:
public class SpriteUV : MonoBehaviour
{
private SpriteRenderer _spriteRenderer;
private Sprite _sprite;
[SerializeField] public Vector2[] _uv = new Vector2 [4]
{
new Vector2(0.4f, 0.5f),
new Vector2(0.6f, 0.5f),
new Vector2(0.4f, 0.35f),
new Vector2(0.6f, 0.35f)
};
void Start ()
{
_spriteRenderer = GetComponent<SpriteRenderer>();
_sprite = _spriteRenderer.sprite;
}
// Update is called once per frame
void Update ()
{
_sprite.uv = _uv;
}
}
但是有一个错误,表明Sprite.uv
没有设置器(在the documentation中不明显)如何更改精灵以映射纹理的不同部分?
答案 0 :(得分:1)
这是一个与git push origin HEAD:origin/release/BranchName
配合使用的解决方案,用于至少选择要显示的Sprite的矩形部分。 (如果程序员需要完全不同的映射,那么程序员如何在注释中正确地说出这不能“变形”您的UV。)
创建一个新的着色器并将其命名为SpriteRenderer
在VisualStudio(或任何文本编辑器)中打开它,并使用以下代码打开它
Source
BlendVertexColorWithUV
创建新材料
将 // unlit, vertex color, alpha blended, offset uv's
// cull off
Shader "BlendVertexColorWithUV"
{
Properties
{
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader
{
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
ZWrite Off Lighting Off Cull Off Fog { Mode Off } Blend SrcAlpha OneMinusSrcAlpha
LOD 110
Pass
{
CGPROGRAM
#pragma vertex vert_vct
#pragma fragment frag_mult
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
struct vin_vct
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f_vct
{
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
v2f_vct vert_vct(vin_vct v)
{
v2f_vct o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = v.color;
o.texcoord = TRANSFORM_TEX (v.texcoord, _MainTex);;
return o;
}
fixed4 frag_mult(v2f_vct i) : COLOR
{
fixed4 col = tex2D(_MainTex, i.texcoord) * i.color;
return col;
}
ENDCG
}
}
SubShader
{
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off Fog { Mode Off }
LOD 100
BindChannels
{
Bind "Vertex", vertex
Bind "TexCoord", texcoord
Bind "Color", color
}
Pass
{
Lighting Off
SetTexture [_MainTex] { combine texture * primary }
}
}
}
拖到该材料上
将此材料分配给使用BlendVertexColorWithUV
将SpriteRenderer
的{{1}}设置为SpriteRenderer
将DrawMode
设置为Tiled
注意:我在抓取时实际上犯了一个错误:您将TileMode
分配给Continous
而不是材料!您可以实际保留材料Blanc并仅调整Sprite
和SpriteRenderer
的值。
现在您可以调整材质中精灵的偏移量,例如通过使用脚本
Tiling
答案 1 :(得分:0)
我刚刚使用过Quad
,您可以为其设置uvs
,vertices
和triangles
。因此基本上可以从Sprite获取所有信息(uv,顶点)并将其传输到Quad
。