UnityShader实例(1) 基于2DSprite实现圆环

本文介绍如何在Unity2D中使用Shader实现高清且可自定义宽度的圆环效果。通过对UV坐标的分析,逐步探索并实现了圆环的Shader绘制方法,并提供了参数化的C#脚本来控制圆环的大小和宽度。

想要在Unity2D中实现一个漂亮的圆环,但是除了前面做过的各种笔记和自学,啥都不会,
但是成功摸索出来,在这里记录一下理解流程。
源代码和使用方式在最下面。

2D圆环的最简单实现

圆环最简单的实现就是自己画一个背景色透明的圆环:
(下面是一张图片,不信你把浏览器背景色调一下)
BigCircleEdge

然后直接往场景里一放就行:
20220130134430

当然这种方式很不行,拉伸大了之后模糊感太大,很难看,而且不易控制大小:
在这里插入图片描述

使用Shader实现

2DShader的简单探索(最终代码在最后)

首先2D中用的都是Sprite做渲染,所有显然不适合直接用Mesh顶点作图的方案,
当然如果用Mesh的话也有现成的方案:
https://blog.csdn.net/liuzonrze/article/details/83280463

但只要涉及到渲染肯定就用到Shader
所以先看看Sprite中怎么用上Shader吧。

首先在场景中创建一个新的2D正方形
新建一个Shader和材质作用到它上面,编写Shader代码进行探索。

这里就是用到Shader的一种主要调试方式:将值直接当作颜色输出来
下面这一段代码做的工作就是,
试图将模型顶点在裁剪空间中的坐标输出,
结果是输出全白:

Shader "Custom/CircleEdgeShader"
{
   
   
    Properties{
   
   
        _MainTex ("Main Tex", 2D) = "white" {
   
   }
    }

    SubShader
    {
   
   
        // No culling or depth
        Cull Off ZWrite Off ZTest Always
        // 开启透明度
        Blend SrcAlpha OneMinusSrcAlpha
        // 设置渲染队列
        Tags {
   
    "Queue"="Transparent" "RenderType"="Opaque" }

        Pass
        {
   
   
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            struct appdata
            {
   
   
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
   
   
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };
            // 顶点着色获取
            v2f vert (appdata v)
            {
   
   
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值