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

Unity實(shí)現(xiàn)鼠標(biāo)拖動(dòng)3D物體

 更新時(shí)間:2020年10月13日 08:37:52   作者:羅松_ls  
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)鼠標(biāo)拖動(dòng)3D物體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這篇博客實(shí)現(xiàn)一個(gè)小功能,通過(guò)鼠標(biāo)拖動(dòng)3D物體。我們知道,如果是拖動(dòng) UIUG 的控件的話(huà),它是有接口可以使用的。但是3D物體就沒(méi)有可直接使用的接口(或者說(shuō)我沒(méi)找到?),就需要我們自己寫(xiě)代碼。既然如此,那我們就來(lái)實(shí)現(xiàn)以下這個(gè)功能。

首先先創(chuàng)建一個(gè)這樣的場(chǎng)景

創(chuàng)建兩個(gè) cube 只是為了看清效果。然后給 攝像機(jī)添加一個(gè) DragObject 腳本

using UnityEngine;
using System.Collections;

public class DragObject : MonoBehaviour {
  /// <summary>
  /// 將要拖動(dòng)的物體
  /// </summary>
  private Transform dragGameObject;
  /// <summary>
  /// 獲取射線(xiàn)需要碰撞的層
  /// </summary>
  private LayerMask canDrag;
  /// <summary>
  /// 直接從外部定義好層,簡(jiǎn)單理解
  /// </summary>
  public LayerMask canDrag2;
  /// <summary>
  /// 獲得鼠標(biāo)的位置和cube位置差
  /// </summary>
  private Vector3 offset;
  /// <summary>
  /// 是否點(diǎn)擊到cube
  /// </summary>
  private bool isClickCube;
  /// <summary>
  /// 目標(biāo)對(duì)象的屏幕坐標(biāo)
  /// </summary>
  private Vector3 targetScreenPoint;

  // Use this for initialization
  void Start () {
    // LayerMask.GetMask("Cube"); 得到 名字為 Cube 的層的 2 進(jìn)制
    // LayerMask.LayerToName(9); 得到一個(gè) 10 進(jìn)制表示的層 的名字 這里既第十層
    // LayerMask.NameToLayer("Cube"); 得到 名字為 Cube 的層的 10 進(jìn)制

    //使用位運(yùn)算,因?yàn)?LayerMask (好像)是以2進(jìn)制存儲(chǔ)的 Layer 的層是以0開(kāi)始
    canDrag = 1 << LayerMask.NameToLayer("Cube");
  }

  // Update is called once per frame
  void Update () {
    if (Input.GetMouseButtonDown(0))
    {
      if (CheckGameObject())
      {
        offset = dragGameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPoint.z));
      }
    }

    if (isClickCube)
    {
      //當(dāng)前鼠標(biāo)所在的屏幕坐標(biāo)
      Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPoint.z);
      //把當(dāng)前鼠標(biāo)的屏幕坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)
      Vector3 curWorldPoint = Camera.main.ScreenToWorldPoint(curScreenPoint);
      dragGameObject.position = curWorldPoint + offset;
    }

    if (Input.GetMouseButtonUp(0))
    {
      isClickCube = false;
    }
  }

  /// <summary>
  /// 檢查是否點(diǎn)擊到cbue
  /// </summary>
  /// <returns></returns>
  bool CheckGameObject ()
  {
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hitInfo;
    if (Physics.Raycast(ray, out hitInfo, 100f, canDrag))
    {
      isClickCube = true;
      //得到射線(xiàn)碰撞到的物體
      dragGameObject = hitInfo.collider.gameObject.transform;
      targetScreenPoint = Camera.main.WorldToScreenPoint(dragGameObject.position);
      return true;
    }
    return false;
  }

}

添加此腳本后運(yùn)行,就能成功看見(jiàn)效果。
今天這個(gè)工程比較簡(jiǎn)單,就不發(fā)工程了。

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

相關(guān)文章

  • 使用Cursor進(jìn)行C#編程的詳細(xì)步驟

    使用Cursor進(jìn)行C#編程的詳細(xì)步驟

    Cursor 是一款功能強(qiáng)大的代碼編輯器,它憑借其人工智能輔助功能,為開(kāi)發(fā)者帶來(lái)了諸多便利,本文將給大家介紹了用Cursor 進(jìn)行C#編程的超詳細(xì)指南,需要的朋友可以參考下
    2025-03-03
  • C#中LinkedList<T>的存儲(chǔ)結(jié)構(gòu)詳解

    C#中LinkedList<T>的存儲(chǔ)結(jié)構(gòu)詳解

    這篇文章主要介紹了深度解析C#中LinkedList<T>的存儲(chǔ)結(jié)構(gòu),本文將從鏈表的基礎(chǔ)特性、C#中LinkedList的底層實(shí)現(xiàn)邏輯,.NET的不同版本對(duì)于Queue的不同實(shí)現(xiàn)方式的原因分析等幾個(gè)視角進(jìn)行簡(jiǎn)單的解讀,需要的朋友可以參考下
    2023-12-12
  • Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法匯總

    Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法匯總

    這篇文章主要介紹了Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法,本文通過(guò)四種方法在 Unity 中實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和讀取方法的案例內(nèi)容,結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Unity UI實(shí)現(xiàn)循環(huán)播放序列圖

    Unity UI實(shí)現(xiàn)循環(huán)播放序列圖

    這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)循環(huán)播放序列圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C#計(jì)算2個(gè)字符串的相似度

    C#計(jì)算2個(gè)字符串的相似度

    這篇文章主要為大家詳細(xì)介紹了C#計(jì)算2個(gè)字符串相似度的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • c#數(shù)據(jù)庫(kù)與TXT導(dǎo)入導(dǎo)出的實(shí)例

    c#數(shù)據(jù)庫(kù)與TXT導(dǎo)入導(dǎo)出的實(shí)例

    最近剛學(xué)完ADO.NET,做了個(gè)數(shù)據(jù)導(dǎo)入導(dǎo)出的題目,是將txt中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),然后將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到txt中,這里說(shuō)的數(shù)據(jù)的格式是“tom|23”,tom指名字,23指年齡。廢話(huà)也不多說(shuō)了,大家直接看代碼。
    2013-04-04
  • C# networkcomms 3.0實(shí)現(xiàn)模擬登陸總結(jié)

    C# networkcomms 3.0實(shí)現(xiàn)模擬登陸總結(jié)

    這篇文章主要介紹了C# networkcomms 3.0實(shí)現(xiàn)模擬登陸總結(jié),需要的朋友可以參考下
    2017-06-06
  • C#處理datagridview虛擬模式的方法

    C#處理datagridview虛擬模式的方法

    這篇文章主要介紹了C#處理datagridview虛擬模式的方法,實(shí)例分析了C#中datagridview的使用技巧,需要的朋友可以參考下
    2015-06-06
  • DataGridView清除顯示的數(shù)據(jù)、設(shè)定右鍵菜單

    DataGridView清除顯示的數(shù)據(jù)、設(shè)定右鍵菜單

    這篇文章介紹了DataGridView清除顯示的數(shù)據(jù)、設(shè)定右鍵菜單的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#代碼實(shí)現(xiàn)PDF文檔操作類(lèi)

    C#代碼實(shí)現(xiàn)PDF文檔操作類(lèi)

    本篇文章給大家介紹使用pdf文檔操作C#代碼,本文代碼非常簡(jiǎn)單,代碼附有注釋?zhuān)枰⒁獾氖牵盒枰砑觟textsharp.dll引用才可以正常通過(guò)編譯,感興趣的朋友可以參考下
    2015-10-10

最新評(píng)論

南平市| 鄱阳县| 齐齐哈尔市| 都兰县| 闵行区| 屯门区| 麻阳| 治多县| 吴川市| 福清市| 古田县| 紫云| 定日县| 洞口县| 永安市| 阿坝县| 巴里| 延边| 孟津县| 安西县| 瑞安市| 木兰县| 安岳县| 临漳县| 三江| 全州县| 永新县| 永德县| 武义县| 泸溪县| 页游| 明水县| 加查县| 西畴县| 土默特右旗| 平远县| 沭阳县| 丰城市| 奉节县| 兴海县| 开化县|