欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity使用LineRender斷筆寫字

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

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

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

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

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

工程目錄圖如下:

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

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

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

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)保存和下標
  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;
 
      //將鼠標按下的屏幕坐標轉(zhuǎn)換成世界坐標
      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))
    {
      // 鼠標左鍵抬起結(jié)束當前筆畫
      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ōu)化建議歡迎評論。

工程下載

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

相關(guān)文章

  • C# BinaryReader實現(xiàn)讀取二進制文件

    C# BinaryReader實現(xiàn)讀取二進制文件

    在 C# 以二進制形式讀取數(shù)據(jù)時使用的是 BinaryReader 類。本文介紹了C# BinaryReader實現(xiàn)讀取二進制文件,感興趣的可以了解一下
    2021-06-06
  • C#中this用法系列(二) 通過this修飾符為原始類型擴展方法

    C#中this用法系列(二) 通過this修飾符為原始類型擴展方法

    定義一個靜態(tài)類,類中定義靜態(tài)方法,方法中參數(shù)類型前邊加上this修飾符,即可實現(xiàn)對參數(shù)類型的方法擴展,下面通過實例代碼給大家介紹下,需要的朋友參考下吧
    2016-12-12
  • Unity使用物理引擎實現(xiàn)多旋翼無人機的模擬飛行

    Unity使用物理引擎實現(xiàn)多旋翼無人機的模擬飛行

    這篇文章主要介紹了Unity使用物理引擎實現(xiàn)多旋翼無人機的模擬飛行,包括了詳細的原理介紹和代碼實現(xiàn),對物理引擎感興趣的同學(xué),可以參考下
    2021-04-04
  • C#實現(xiàn)Excel數(shù)據(jù)導(dǎo)入到SQL server數(shù)據(jù)庫

    C#實現(xiàn)Excel數(shù)據(jù)導(dǎo)入到SQL server數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了在C#中如何實現(xiàn)Excel數(shù)據(jù)導(dǎo)入到SQL server數(shù)據(jù)庫中,文中的示例代碼簡潔易懂,希望對大家有一定的幫助
    2024-03-03
  • C#使用log4net打日志

    C#使用log4net打日志

    本文主要介紹了C#使用log4net打日志,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Barrier來控制線程同步示例

    使用Barrier來控制線程同步示例

    這篇文章主要介紹了使用Barrier來控制線程同步示例,需要的朋友可以參考下
    2014-04-04
  • C#簡單數(shù)字圖像處理程序

    C#簡單數(shù)字圖像處理程序

    這篇文章主要為大家詳細介紹了C#簡單數(shù)字圖像處理程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 基于WPF實現(xiàn)3D導(dǎo)航欄控件

    基于WPF實現(xiàn)3D導(dǎo)航欄控件

    這篇文章主要介紹了如何基于WPF實現(xiàn)簡單的3D導(dǎo)航欄控件效果,文中的示例代碼講解詳細,對我們的學(xué)習或工作有一定幫助,需要的小伙伴可以參考一下
    2024-03-03
  • C# 7.0中解構(gòu)功能詳解

    C# 7.0中解構(gòu)功能詳解

    這篇文章主要為大家詳細介紹了C# 7.0中的解構(gòu)功能,解構(gòu)元組、解構(gòu)對象等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 一篇文章教會你用Unity制作網(wǎng)格地圖生成組件

    一篇文章教會你用Unity制作網(wǎng)格地圖生成組件

    網(wǎng)格地圖這個功能在策略型游戲中應(yīng)用比較廣泛,基本情況下會將地圖分割成正方形網(wǎng)格或者六邊形網(wǎng)格,這篇文章主要給大家介紹了如何通過一篇文章學(xué)會用Unity制作網(wǎng)格地圖生成組件的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評論