最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity使用LineRender斷筆寫字

 更新時(shí)間:2021年10月10日 13:45:38   作者:御雪妃舞  
這篇文章主要為大家詳細(xì)介紹了Unity使用LineRender斷筆寫字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

做多媒體項(xiàng)目時(shí),經(jīng)常會最后來個(gè)客戶簽名并保存之類的,簽名保存之前的博客Unity3d截圖方法合集有介紹過了,今天閑著把斷筆寫字的也貼出來吧,以前用leap motion時(shí)嘗試用 leap motion演示中的食指寫字,當(dāng)時(shí)的寫字其實(shí)只能一筆畫,說白了其實(shí)就是個(gè)壽命無限長的拖尾,雖然效果不太好,但是很流暢,嘗試過用leap motion斷筆寫字,但是效果不好,很容易誤寫,然后就產(chǎn)生了此方法,就是鼠標(biāo)或者觸摸屏寫字了。

講一下思路,就是不斷的將鼠標(biāo)的屏幕坐標(biāo)轉(zhuǎn)換成世界坐標(biāo),然后用LineRender持續(xù)畫線,添加到隊(duì)列中,這樣做的好處是可持續(xù)撤銷誤寫的筆畫,知道全部撤銷,重新寫。

來來來,鄙人寫字很丑,不許笑,先上圖:

下面言歸正傳,這個(gè)做起來比較簡單,一個(gè)腳本就能實(shí)現(xiàn)了

工程目錄圖如下:

只有一個(gè)腳本,一個(gè)材質(zhì),一個(gè)場景就可以了

場景中新建一個(gè)lineRender和write物體,write物體掛上DrawLine腳本。

下面重點(diǎn)來了,主要就是這個(gè)腳本:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class DrawLine : MonoBehaviour
{
  //線段預(yù)制
  [Tooltip("Line renderer used for the line drawing.")]
  public LineRenderer linePrefab;
 
  //線段相關(guān)保存和下標(biāo)
  private List<GameObject> linesDrawn = new List<GameObject>();
  private LineRenderer currentLine;
  private int lineVertexIndex = 2;
 
  void Update()
  {
    //刪除最近一筆
    if (Input.GetKeyDown(KeyCode.U))
    {
      // U-key means Undo
      DeleteLastLine();
    }
 
    if (currentLine == null &&
      Input.GetMouseButton(0))
    {
      // 鼠標(biāo)按下,開始畫線
      currentLine = Instantiate(linePrefab).GetComponent<LineRenderer>();
      currentLine.name = "Line" + linesDrawn.Count;
      currentLine.transform.parent = transform;
 
      Vector3 cursorPos = Input.mousePosition;
      cursorPos.z = 0f;
 
      //將鼠標(biāo)按下的屏幕坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)
      Vector3 cursorSpacePos = Camera.main.ScreenToWorldPoint(cursorPos);
      cursorSpacePos.z = 0f;
      currentLine.SetPosition(0, cursorSpacePos);
      currentLine.SetPosition(1, cursorSpacePos);
 
      lineVertexIndex = 2;
      linesDrawn.Add(currentLine.gameObject);
 
      StartCoroutine(DrawLines());
    }
 
    if (currentLine != null &&
      Input.GetMouseButtonUp(0))
    {
      // 鼠標(biāo)左鍵抬起結(jié)束當(dāng)前筆畫
      currentLine = null;
    }
  }
 
  //撤銷最后一筆
  public void DeleteLastLine()
  {
    if (linesDrawn.Count > 0)
    {
      GameObject goLastLine = linesDrawn[linesDrawn.Count - 1];
      linesDrawn.RemoveAt(linesDrawn.Count - 1);
      Destroy(goLastLine);
    }
  }
 
  //持續(xù)畫線
  IEnumerator DrawLines()
  {
    while (Input.GetMouseButton(0))
    {
      yield return new WaitForEndOfFrame();
 
      if (currentLine != null)
      {
        lineVertexIndex++;
        currentLine.SetVertexCount(lineVertexIndex);
 
        Vector3 cursorPos = Input.mousePosition;
        cursorPos.z = 0f;
 
        Vector3 cursorSpacePos = Camera.main.ScreenToWorldPoint(cursorPos);
        cursorSpacePos.z = 0f;
        currentLine.SetPosition(lineVertexIndex - 1, cursorSpacePos);
      }
    }
  }
}

掛上腳本,你運(yùn)行就可以寫字了,就這么簡單,嘗試一下。

謝謝支持!有問題或者代碼優(yōu)化建議歡迎評論。

工程下載

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#編程實(shí)現(xiàn)查看剪切板內(nèi)容的方法

    C#編程實(shí)現(xiàn)查看剪切板內(nèi)容的方法

    這篇文章主要介紹了C#編程實(shí)現(xiàn)查看剪切板內(nèi)容的方法,涉及C#針對剪切板操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C#正則表達(dá)式大全

    C#正則表達(dá)式大全

    本文詳細(xì)講解了C#正則表達(dá)式的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# OpenCvSharp利用白平衡技術(shù)實(shí)現(xiàn)圖像修復(fù)功能

    C# OpenCvSharp利用白平衡技術(shù)實(shí)現(xiàn)圖像修復(fù)功能

    這篇文章主要為大家詳細(xì)介紹了C# OpenCvSharp如何利用白平衡技術(shù)實(shí)現(xiàn)圖像修復(fù)功能,文中的示例代碼講解詳細(xì),希望對大家有一定的幫助
    2024-02-02
  • C#實(shí)現(xiàn)控制Windows系統(tǒng)關(guān)機(jī)、重啟和注銷的方法

    C#實(shí)現(xiàn)控制Windows系統(tǒng)關(guān)機(jī)、重啟和注銷的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)控制Windows系統(tǒng)關(guān)機(jī)、重啟和注銷的方法,涉及C#調(diào)用windows系統(tǒng)命令實(shí)現(xiàn)控制開機(jī)、關(guān)機(jī)等操作的技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-04-04
  • C#中委托的進(jìn)一步理解

    C#中委托的進(jìn)一步理解

    這篇文章主要介紹了C#中委托的進(jìn)一步理解,本文講解了委托類型、建立委托鏈、移除委托鏈等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • C# Char結(jié)構(gòu)中IsLetterOrDigit(Char)的方法詳解

    C# Char結(jié)構(gòu)中IsLetterOrDigit(Char)的方法詳解

    這篇文章給大家介紹了C#的Char 結(jié)構(gòu)的IsLetterOrDigit(Char)的方法,并通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • C#調(diào)用RabbitMQ實(shí)現(xiàn)消息隊(duì)列的示例代碼

    C#調(diào)用RabbitMQ實(shí)現(xiàn)消息隊(duì)列的示例代碼

    這篇文章主要介紹了C#調(diào)用RabbitMQ實(shí)現(xiàn)消息隊(duì)列的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#中異步Socket通信編程代碼實(shí)例

    C#中異步Socket通信編程代碼實(shí)例

    這篇文章主要介紹了C#中異步Socket通信編程代碼實(shí)例,本文講解了什么是Socket編程的異步是實(shí)現(xiàn)、如何實(shí)現(xiàn)Socket異步通信并給出了代碼實(shí)例,需要的朋友可以參考下
    2015-03-03
  • C#微信公眾號開發(fā)之用戶管理

    C#微信公眾號開發(fā)之用戶管理

    這篇文章介紹了C#微信公眾號開發(fā)之用戶管理,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#如何將DataTable導(dǎo)出到Excel解決方案

    C#如何將DataTable導(dǎo)出到Excel解決方案

    由于公司項(xiàng)目中需要將系統(tǒng)內(nèi)用戶操作的所有日志進(jìn)行轉(zhuǎn)存?zhèn)浞?,考慮到以后可能還需要還原,所以最后決定將日志數(shù)據(jù)備份到Excel中
    2012-11-11

最新評論

永靖县| 信阳市| 鹤庆县| 项城市| 格尔木市| 沙湾县| 西青区| 宣汉县| 贵港市| 昌黎县| 嘉禾县| 忻城县| 峨眉山市| 庆云县| 花垣县| 瑞安市| 怀柔区| 德阳市| 楚雄市| 徐闻县| 宁远县| 天门市| 留坝县| 三台县| 乐都县| 长宁区| 新建县| 曲水县| 满城县| 威远县| 平罗县| 丰顺县| 修文县| 郁南县| 大同市| 民权县| 额尔古纳市| 那曲县| 兴文县| 金溪县| 寿阳县|