簡易畫筆效果

D8L`6H_JL02J$KH00X65XCR.png

使用代碼創(chuàng)建純白圖片,圖片大小要與image組件大小相同
使用OnDrag觸摸的時候?qū)⒂|摸點周圍的像素都改為透明
使用shader判斷兩張圖沪悲,只要有一張圖像素點透明的地方就都透明
shader代碼

Shader "Hidden/Draw"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _DrawTex ("drawtex", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType" = "Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            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.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;
            sampler2D _DrawTex;

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                fixed4 drawcol = tex2D(_DrawTex, i.uv);
                col.a = drawcol.a == 0 ? 0 : col.a;
                // just invert the colors
                return col;
            }
            ENDCG
        }
    }
}

腳本代碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class Drawonimage : MonoBehaviour,IDragHandler
{
    public Texture tu;
    public int r = 5;
    Texture2D texture;
    Vector2 wh;
    public void OnDrag(PointerEventData eventData)
    {
        Vector3 pos = transform.InverseTransformPoint(eventData.position);
        Debug.Log(pos);
        Vector2Int v2 = new Vector2Int((int)(pos.x + wh.x / 2), (int)(pos.y + wh.y / 2));
        int wbegin = v2.x - r;
        wbegin = wbegin > 0 ? wbegin : 0;
        int wend = v2.x + r;
        wend = wend < (int)wh.x ? wend : (int)wh.x;
        int hbegin = v2.y - r;
        hbegin = hbegin > 0 ? hbegin : 0;
        int hend = v2.y + r;
        hend = hend < (int)wh.y ? hend : (int)wh.y;

        for (int x = wbegin; x < wend; x++)
        {
            for (int y = hbegin; y < hend; y++)
            {
                if (Vector2.Distance(v2,new Vector2(x,y)) <= r)
                {
                    texture.SetPixel(x, y, new Color(1, 1, 1, 0));
                }
            }
        }
        texture.Apply();
    }

    // Start is called before the first frame update
    void Start()
    {
        wh = GetComponent<RectTransform>().sizeDelta;
        texture = new Texture2D((int)wh.x, (int)wh.y);
        for (int x = 0; x < wh.x; x++)
        {
            for (int y = 0; y < wh.y; y++)
            {
                texture.SetPixel(x, y, Color.white);
            }
        }
        texture.Apply();
        Material material = new Material(Shader.Find("Hidden/Draw"));
        material.SetTexture("_MainTex", tu);
        material.SetTexture("_DrawTex", texture);
        GetComponent<Image>().material = material;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惑淳,一起剝皮案震驚了整個濱河市咳蔚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖歹袁,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坷衍,死亡現(xiàn)場離奇詭異寝优,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枫耳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門乏矾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迁杨,你說我怎么就攤上這事钻心。” “怎么了铅协?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵捷沸,是天一觀的道長。 經(jīng)常有香客問我狐史,道長痒给,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任骏全,我火速辦了婚禮苍柏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姜贡。我一直安慰自己试吁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布楼咳。 她就那樣靜靜地躺著熄捍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪母怜。 梳的紋絲不亂的頭發(fā)上余耽,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音糙申,去河邊找鬼宾添。 笑死,一個胖子當(dāng)著我的面吹牛柜裸,可吹牛的內(nèi)容都是我干的缕陕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼疙挺,長吁一口氣:“原來是場噩夢啊……” “哼扛邑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铐然,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蔬崩,失蹤者是張志新(化名)和其女友劉穎恶座,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沥阳,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡跨琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐罕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脉让。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖功炮,靈堂內(nèi)的尸體忽然破棺而出溅潜,到底是詐尸還是另有隱情,我是刑警寧澤薪伏,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布滚澜,位于F島的核電站,受9級特大地震影響嫁怀,放射性物質(zhì)發(fā)生泄漏设捐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一眶掌、第九天 我趴在偏房一處隱蔽的房頂上張望挡育。 院中可真熱鬧,春花似錦朴爬、人聲如沸即寒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽母赵。三九已至,卻和暖如春具滴,著一層夾襖步出監(jiān)牢的瞬間凹嘲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工构韵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留周蹭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓疲恢,卻偏偏與公主長得像凶朗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子显拳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 原創(chuàng):知識探索型文章創(chuàng)作不易棚愤,請珍惜,之后會持續(xù)更新,不斷完善個人比較喜歡做筆記和寫總結(jié)宛畦,畢竟好記性不如爛筆頭哈哈...
    時光啊混蛋_97boy閱讀 1,383評論 0 8
  • 7.1 壓縮圖片 一瘸洛、基礎(chǔ)知識 1、圖片的格式 jpg:最常見的圖片格式次和。色彩還原度比較好反肋,可以支持適當(dāng)壓縮后保持...
    AndroidMaster閱讀 2,508評論 0 13
  • 本文整理一下有關(guān)計算機(jī)圖像渲染流程,以及 iOS 渲染相關(guān)知識斯够,最后介紹一下在 iOS 開發(fā)過程中保持 APP 流...
    z4ywzrq閱讀 1,021評論 0 0
  • 圓角 圓角矩形是iOS的一個標(biāo)志性審美特性囚玫。這在iOS的每一個地方都得到了體現(xiàn),不論是主屏幕圖標(biāo)读规,還是警告彈框,甚...
    charlotte2018閱讀 594評論 0 4
  • 背景 之前對iOS性能優(yōu)化總是碎片化了解燃少,而且看了之后很快就忘記了束亏。最近正好需要做一下技術(shù)調(diào)研,想要對于這個課題進(jìn)...
    theonelgq閱讀 1,760評論 1 2