【Unity3D】陰陽師畫符

前言

眾所周知泪姨,2016年對“陰陽師”而言是不一樣的一年虐译。作為網(wǎng)易在第三季度推出的新游,創(chuàng)新地將原汁原味的和風(fēng)美學(xué)體驗帶給用戶捂龄,獲得了超出預(yù)期的市場反應(yīng)。9月2日首發(fā)當(dāng)天即獲App Store編輯選薦加叁,更在12月發(fā)布的App Annie中國區(qū)2016年度十佳游戲中占據(jù)一席之地倦沧。10月初它匕,其中文版在全球多個國家的蘋果應(yīng)用商店上架展融,根據(jù)11月11日首部資料片上線時的App Annie數(shù)據(jù),《陰陽師》獲得極具突破的矚目和成績:中國免費榜第1豫柬、暢銷榜第1告希,加拿大暢銷榜第1,澳大利亞暢銷榜第1烧给,新西蘭暢銷榜第1燕偶,英國暢銷榜第8,美國暢銷榜第10等等傲人的成績础嫡。

2016年度十佳游戲

作為其中的核心玩法-畫符指么,是其受到眾多玩家青睞的重大原因。
本篇將告訴你怎么在Unity3D中怎么實現(xiàn)這一效果榴鼎。

思路伯诬?

如何實現(xiàn)在屏幕上畫東西?

  1. Unity內(nèi)置的LineRenderer
  2. Shader
  • 這里我們選擇用OpenGL來實現(xiàn)巫财。
    官方幫助文檔里面盗似,我們可以找到GL這個API。

代碼實現(xiàn)

using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public void GenerateText()
    {
        Texture2D tmpTex = new Texture2D(300,400);

        for (int i = 1; i < allPoints.Count; i++)
        {
            Vector2 tmpFront = allPoints[i - 1];
            Vector2 tmpBack = allPoints[i];

            for (int j = 1; j < 100; j++)
            {
                int xx = (int)(Mathf.Lerp(tmpFront.x * tmpTex.width, tmpBack.x*tmpTex.width, j / 100f));
                int yy = (int)(Mathf.Lerp(tmpFront.y * tmpTex.height, tmpBack.y * tmpTex.height, j / 100f));
                tmpTex.SetPixel(xx, yy, Color.yellow);
            }
        }

        tmpTex.Apply();

        GetComponent<Renderer>().material.mainTexture = tmpTex;

    }


    static Material lineMaterial;
    static void CreateLineMaterial()
    {
        if (!lineMaterial)
        {
            // Unity has a built-in shader that is useful for drawing
            // simple colored things.
            Shader shader = Shader.Find("Hidden/Internal-Colored");
            lineMaterial = new Material(shader);
            lineMaterial.hideFlags = HideFlags.HideAndDontSave;
            // Turn on alpha blending
            lineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            // Turn backface culling off
            lineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
            // Turn off depth writes
            lineMaterial.SetInt("_ZWrite", 0);
        }
    }

    // Will be called after all regular rendering is done
    public void OnRenderObject()
    {
        CreateLineMaterial();
        // Apply the line material
        lineMaterial.SetPass(0);

        GL.PushMatrix();
        // Set transformation matrix for drawing to
        // match our transform
        GL.MultMatrix(transform.localToWorldMatrix);

        // Draw lines
        GL.Begin(GL.LINES);

        // 將透視投影變成正交投影
        GL.LoadOrtho();

        GL.Color(Color.yellow);

        for (int i = 1; i < allPoints.Count; i++)
        {
            Vector2 tmpFront = allPoints[i-1];
            Vector2 tmpBack = allPoints[i];

            GL.Vertex3(tmpFront.x, tmpFront.y, 0);
            GL.Vertex3(tmpBack.x, tmpBack.y, 0);
        }

        GL.End();
        GL.PopMatrix();
    }

    List<Vector2> allPoints = new List<Vector2>();

    private void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Vector2 tmpPos = Camera.main.ScreenToViewportPoint(Input.mousePosition);

            allPoints.Add(tmpPos);
        }

        if (Input.GetMouseButtonUp(0))
        {
            GenerateText();
            //清空屏幕上的點
            allPoints.Clear();
        }
    }
}

效果

畫符.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末平项,一起剝皮案震驚了整個濱河市赫舒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闽瓢,老刑警劉巖号阿,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸳粉,居然都是意外死亡扔涧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門届谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枯夜,“玉大人,你說我怎么就攤上這事艰山『ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵曙搬,是天一觀的道長摔吏。 經(jīng)常有香客問我鸽嫂,道長,這世上最難降的妖魔是什么征讲? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任据某,我火速辦了婚禮,結(jié)果婚禮上诗箍,老公的妹妹穿的比我還像新娘癣籽。我一直安慰自己,他們只是感情好滤祖,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布筷狼。 她就那樣靜靜地躺著,像睡著了一般匠童。 火紅的嫁衣襯著肌膚如雪埂材。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天汤求,我揣著相機與錄音楞遏,去河邊找鬼。 笑死首昔,一個胖子當(dāng)著我的面吹牛寡喝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勒奇,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼预鬓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赊颠?” 一聲冷哼從身側(cè)響起格二,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竣蹦,沒想到半個月后顶猜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡痘括,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年长窄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纲菌。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡挠日,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翰舌,到底是詐尸還是另有隱情嚣潜,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布椅贱,位于F島的核電站懂算,受9級特大地震影響只冻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜计技,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一喜德、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酸役,春花似錦、人聲如沸驾胆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丧诺。三九已至入桂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驳阎,已是汗流浹背抗愁。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呵晚,地道東北人蜘腌。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像饵隙,于是被迫代替她去往敵國和親撮珠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 1.產(chǎn)品優(yōu)化概述 1.1影響ASO主要因素 1.應(yīng)用名稱金矛; 2.應(yīng)用的關(guān)鍵字或者標(biāo)簽芯急; 3.應(yīng)用的描述; 4.應(yīng)用...
    其名為鯤北冥有魚閱讀 5,337評論 1 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 2017年憑借自己的力量驶俊,終于弄好小窩娶耍,妥妥的安置了肉身,實現(xiàn)了有尊嚴(yán)的住和有規(guī)律的吃饼酿¢啪疲。現(xiàn)在故俐,我的精神卻無...
    幾點周閱讀 116評論 0 0
  • 再次踏上這片熟悉的土地奈应,回到家,窗外的一切都已不復(fù)存在购披,你杖挣,還記得我嗎?我刚陡,從未忘記惩妇! 還記得那個炎熱的夏天株汉,太陽...
    像風(fēng)如云閱讀 485評論 0 1
  • 今天逛慶山的微博,看到一句話:“每個人都有自己的故事歌殃。每個人都很珍貴乔妈。” 忽然覺得很感動氓皱。 慶山叫做“安妮寶貝”的...
    安桐2016閱讀 362評論 2 2