91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity使用LineRender斷筆寫字

發布時間:2020-09-01 17:29:23 來源:腳本之家 閱讀:235 作者:御雪妃舞 欄目:編程語言

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

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

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

Unity使用LineRender斷筆寫字

Unity使用LineRender斷筆寫字

下面言歸正傳,這個做起來比較簡單,一個腳本就能實現了

工程目錄圖如下:

Unity使用LineRender斷筆寫字

只有一個腳本,一個材質,一個場景就可以了

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

下面重點來了,主要就是這個腳本:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class DrawLine : MonoBehaviour
{
  //線段預制
  [Tooltip("Line renderer used for the line drawing.")]
  public LineRenderer linePrefab;
 
  //線段相關保存和下標
  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))
    {
      // 鼠標按下,開始畫線
      currentLine = Instantiate(linePrefab).GetComponent<LineRenderer>();
      currentLine.name = "Line" + linesDrawn.Count;
      currentLine.transform.parent = transform;
 
      Vector3 cursorPos = Input.mousePosition;
      cursorPos.z = 0f;
 
      //將鼠標按下的屏幕坐標轉換成世界坐標
      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))
    {
      // 鼠標左鍵抬起結束當前筆畫
      currentLine = null;
    }
  }
 
  //撤銷最后一筆
  public void DeleteLastLine()
  {
    if (linesDrawn.Count > 0)
    {
      GameObject goLastLine = linesDrawn[linesDrawn.Count - 1];
      linesDrawn.RemoveAt(linesDrawn.Count - 1);
      Destroy(goLastLine);
    }
  }
 
  //持續畫線
  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);
      }
    }
  }
}

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

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

工程下載

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建德市| 自贡市| 天镇县| 新乐市| 宜黄县| 平湖市| 肥乡县| 本溪| 宜君县| 三台县| 永川市| 邳州市| 罗平县| 利辛县| 九寨沟县| 象山县| 纳雍县| 杭锦旗| 白山市| 政和县| 新竹县| 金秀| 金湖县| 铜山县| 新邵县| 左权县| 南皮县| 伊川县| 上虞市| 九江县| 湖州市| 肃南| 葫芦岛市| 洛宁县| 临夏市| 鹤峰县| 莫力| 郁南县| 新巴尔虎左旗| 武义县| 盐边县|