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

Unity實現(xiàn)鼠標(biāo)拖動3D物體

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

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

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

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

using UnityEngine;
using System.Collections;

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

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

    //使用位運算,因為 LayerMask (好像)是以2進(jìn)制存儲的 Layer 的層是以0開始
    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>
  /// 檢查是否點擊到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;
      //得到射線碰撞到的物體
      dragGameObject = hitInfo.collider.gameObject.transform;
      targetScreenPoint = Camera.main.WorldToScreenPoint(dragGameObject.position);
      return true;
    }
    return false;
  }

}

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

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

相關(guān)文章

  • C#生成本地配置文件的實現(xiàn)示例

    C#生成本地配置文件的實現(xiàn)示例

    本文將介紹如何使用C#語言生成本地配置文件,以便為應(yīng)用程序提供靈活的配置選項,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 基于WPF實現(xiàn)路徑圖標(biāo)控件

    基于WPF實現(xiàn)路徑圖標(biāo)控件

    這篇文章主要介紹了如何利用WPF實現(xiàn)路徑圖標(biāo)控件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的小伙伴可以參考一下
    2023-07-07
  • c#數(shù)學(xué)表示法(后綴表示法)詳解

    c#數(shù)學(xué)表示法(后綴表示法)詳解

    什么是后綴表達(dá)式,查了下原來是一種比較特殊的數(shù)學(xué)表達(dá)式,有三種表達(dá)式:前綴表達(dá)式、中綴表達(dá)式和后綴表達(dá)式,下面我們使用示例學(xué)習(xí)一下
    2014-01-01
  • c# 類型轉(zhuǎn)換

    c# 類型轉(zhuǎn)換

    CLR最重要的特性之一就是類型安全性。在運行時,CLR總是知道一個對象是什么類型。調(diào)用GetType方法可以返回類型
    2012-10-10
  • C#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受的方法

    C#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受的方法

    這篇文章主要介紹了c#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受,使用TCP協(xié)議實現(xiàn)數(shù)據(jù)的發(fā)送和接受包括客戶端和服務(wù)端兩個部分,本文通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • C#使用selenium實現(xiàn)爬蟲

    C#使用selenium實現(xiàn)爬蟲

    這篇文章介紹了C#使用selenium實現(xiàn)爬蟲的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)合并多個word文檔的方法

    C#實現(xiàn)合并多個word文檔的方法

    這篇文章主要介紹了C#實現(xiàn)合并多個word文檔的方法,是C#針對Word文檔操作的一個非常重要的技巧,需要的朋友可以參考下
    2014-09-09
  • 使用JsonConverter處理上傳文件的路徑問題

    使用JsonConverter處理上傳文件的路徑問題

    我們上傳一個文件,把文件保存到服務(wù)器上,會有一個明確的物理路徑,由于需要從前端訪問這個文件,還需要web服務(wù)器中的一個虛擬路徑,我們可以使用JsonConverter 來自動處理一下,這篇文章主要介紹了使用JsonConverter處理上傳文件的路徑,需要的朋友可以參考下
    2022-12-12
  • C#并發(fā)編程之Task類詳解

    C#并發(fā)編程之Task類詳解

    Task是建立在線程池之上的一種多線程技術(shù),它的出現(xiàn)使Thread成為歷史。其使用方法非常簡單,本文就來通過幾個示例為大家講講它的具體使用吧
    2023-03-03
  • Winform實現(xiàn)將網(wǎng)頁生成圖片的方法

    Winform實現(xiàn)將網(wǎng)頁生成圖片的方法

    這篇文章主要介紹了Winform實現(xiàn)將網(wǎng)頁生成圖片的方法,類似于一般瀏覽器自帶的網(wǎng)頁生成圖片的功能,需要的朋友可以參考下
    2014-09-09

最新評論