如何在Unity中更改Sprite uv?

时间:2018-09-18 15:03:26

标签: c# unity3d sprite uv-mapping

我写了以下脚本:

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中不明显)如何更改精灵以映射纹理的不同部分?

2 个答案:

答案 0 :(得分:1)

这是一个与git push origin HEAD:origin/release/BranchName配合使用的解决方案,用于至少选择要显示的Sprite的矩形部分。 (如果程序员需要完全不同的映射,那么程序员如何在注释中正确地说出这不能“变形”您的UV。)

  1. 创建一个新的着色器并将其命名为SpriteRenderer

  2. 在VisualStudio(或任何文本编辑器)中打开它,并使用以下代码打开它
    Source

    BlendVertexColorWithUV
  3. 创建新材料

  4. // 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 } } } } 拖到该材料上

  5. 将此材料分配给使用BlendVertexColorWithUV

  6. 的对象
  7. SpriteRenderer的{​​{1}}设置为SpriteRenderer

  8. DrawMode设置为Tiled

enter image description here

注意:我在抓取时实际上犯了一个错误:您将TileMode分配给Continous而不是材料!您可以实际保留材料Blanc并仅调整SpriteSpriteRenderer的值。

现在您可以调整材质中精灵的偏移量,例如通过使用脚本

Tiling

答案 1 :(得分:0)

我刚刚使用过Quad,您可以为其设置uvsverticestriangles。因此基本上可以从Sprite获取所有信息(uv,顶点)并将其传输到Quad