Unity_通過鼠標點擊屏幕移動屏幕里的一個對象

文章目錄

  • 一、獲取到點擊物體的Tansform(摁下鼠標左鍵的瞬間)
  • 二、移動點擊的物體(摁著鼠標左鍵不放)
  • 三、松開左鍵清理被移動對象屬性
  • 總結

注:本文章只是學習總結的筆記,視頻鏈接


一、獲取到點擊物體的Tansform(摁下鼠標左鍵的瞬間)

實現思路:通過Camera的ScreenPointToRay方法和Input.mousePosition鼠標坐標生成創建Ray射線,再通過Physics的Raycast方法和射線,獲得被碰撞的物體相關信息存儲在RaycastHit里。
實現代碼:

using UnityEngine;public class 點擊移動物體 : MonoBehaviour
{public Camera cam;public Transform 被點擊物體;//clickedOBJ// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;Physics.Raycast(ray, out hit);被點擊物體 = hit.transform;}}
}

二、移動點擊的物體(摁著鼠標左鍵不放)

思路:通過相機的射線和距離獲得一個點,設置給物體從而達到移動物體。
距離如何獲取:
方法一:獲取到點擊物體時hit對象中存射線起點到碰撞點的距離
方法二:通過兩個點算一個距離,也就的那被移動對象的坐標和相機坐標算一個距離
代碼如下:

using System.Globalization;
using UnityEngine;public class 點擊移動物體 : MonoBehaviour
{public Camera cam;public Transform 被點擊物體;//clickedOBJpublic float 距離;//distance// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray, out hit)){被點擊物體 = hit.transform;距離 = Vector3.Distance(cam.transform.position, hit.transform.position);float 距離1 = hit.distance; //這是視頻老師寫的獲取應該相機和碰撞點的距離Debug.Log($"1:{距離}\n2:{距離1}");}}if(Input.GetMouseButton(0)){if(被點擊物體){Ray ray = cam.ScreenPointToRay(Input.mousePosition);被點擊物體.position = ray.GetPoint(距離);}}}
}

三、松開左鍵清理被移動對象屬性

using System.Globalization;
using UnityEngine;public class 點擊移動物體 : MonoBehaviour
{public Camera cam;public Transform 被點擊物體;//clickedOBJpublic float 距離;//distance// Start is called once before the first execution of Update after the MonoBehaviour is createdvoid Start(){}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {Ray ray = cam.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray, out hit)){被點擊物體 = hit.transform;距離 = Vector3.Distance(cam.transform.position, hit.transform.position);float 距離1 = hit.distance; //這是視頻老師寫的獲取應該相機和碰撞點的距離Debug.Log($"1:{距離}\n2:{距離1}");}}if(Input.GetMouseButton(0)){if(被點擊物體){Ray ray = cam.ScreenPointToRay(Input.mousePosition);被點擊物體.position = ray.GetPoint(距離);}}if (Input.GetMouseButtonUp(0)) {被點擊物體 = null;}}
}

總結

射線生成,射線檢測,射線+距離獲得坐標

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91980.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UDP中的單播,多播,廣播(代碼實現)

文章目錄1. UDP 單播(Unicast)示例2. UDP 廣播(Broadcast)示例3. UDP 多播(Multicast)示例3.1 多播發送方示例3.2 多播接收方示例總結1. UDP 單播(Unicast)示例 發送方向指定單個目…

神經網絡:卷積層

神經網絡 卷積操作 例子: 輸入:二維圖像 [1,2,0,3,1] [0,1,2,3,1] [1,2,1,0,0] [5,2,3,1,1] [2,1,0,1,1] 卷積核: [1,2,1] [0,1,0] [2,1,0] 然后需要將輸入圖像和卷積核轉化為4維張量 為什么轉為4維張量?因為卷積操作需要輸入圖像…

2.4 組件間通信Props(父傳子)

父組件 在父組件模板上的子組件上加上屬性值&#xff0c;屬性值就是想要傳遞給子組件的信息。 例如&#xff1a; <template> <div class"Big-box"><testBox :personList"p"></testBox> </div> </template>子組件 子組…

從零開始學習 Redux:React Native 項目中的狀態管理

Redux 是一個用于 JavaScript 應用程序的狀態管理庫&#xff0c;通常與 React 或 React Native 配合使用&#xff0c;幫助管理應用的狀態和數據流。其核心原理是通過集中式的“單一數據源”來管理應用狀態&#xff0c;避免組件之間的“層層傳遞”狀態和副作用。 Redux 的原理單…

[特殊字符] CentOS 7 離線安裝 MySQL 5.7 實驗

&#x1f427; CentOS 7 離線安裝 MySQL 5.7 實驗 針對企業無互聯網環境的系統&#xff0c;設計了如何在 CentOS 7 系統中&#xff0c;使用一臺可以聯網的主機&#xff08;NodeA&#xff09;為另一臺無法聯網的主機&#xff08;NodeB&#xff09;安裝 MySQL 5.7 數據庫及其依賴…

Redis 概率型數據結構實戰指南

1. 為什么要用「近似」&#xff1f; 隨著業務量爆發式增長&#xff0c;精確統計 的內存或 CPU 成本可能難以接受。例如&#xff1a; 統計一天內 唯一 IP 數 —— 用 SET 精確去重&#xff0c;百萬 IP→占用數百 MB。統計海量商品銷量、實時計算 P99 延遲、獲取 TOP-N 熱門頁面……

Android開發工程師:Linux一條find grep命令通關搜索內容與文件

find . -type f \( -name "*.java" -o -name "*.xml" \) -not -path "./out/*" -exec grep -irnE activity|class {} 多關鍵詞搜索&#xff1a;使用正則表達式 pattern1|pattern2 同時搜索多個關鍵詞&#xff08;如 activity|class&#xff09;單…

深入理解瀏覽器解析機制和XSS向量編碼

URL 編碼 "javascript:alert(1)"---->%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>-------瀏覽器解析不了。 頁面識別在url解碼之前&#xff0c;在…

ThinkPHP8極簡上手指南:開啟高效開發之旅

目錄一、環境搭建1.1 安裝 PHP1.2 安裝 Composer二、安裝 ThinkPHP8三、目錄結構解析四、第一個簡單示例&#xff1a;Hello, ThinkPHP84.1 創建控制器4.2 編寫控制器方法4.3 配置路由4.4 訪問測試五、進階示例&#xff1a;數據庫查詢5.1 配置數據庫連接5.2 創建模型5.3 編寫查詢…

智能制造之物料詳解

在制造業業務系統中&#xff0c;物料流轉貫穿“需求→采購→入庫→生產→成品→交付”全流程&#xff0c;各系統通過數據協同實現物料狀態、位置、數量的精準追蹤。以下按流轉階段拆解&#xff1a;一、需求發起與計劃階段&#xff08;CRM/ERP/PLM主導&#xff09;1. 需求源頭…

Qt的安裝和環境配置

QT開發環境的搭建&#xff0c;需要安裝3個部分&#xff0c;C編譯器、Qt SDK(SDK是軟件開發工具包)、QT的集成開發環境(IDE)Qt的3種集成開發環境&#xff1a;Qt Creator&#xff1a;是由Qt官方提供的&#xff0c;容易上手&#xff0c;不需要額外的配置&#xff0c;但是有一些bug…

解析MCUboot的實現原理和Image結構

目錄 概述 1 MCUboot的功能 1.1 代碼包結構 1.2 限制 2 MCUboot Image 2.1 Image格式 2.2 Flash Map 2.3 Image 槽 2.4 使用scratch交換 2.5 Image 尾部數據結構 3 交換區 3.1 單交換區 3.2 Multiple Image boot 3.3 Image交換 4 交換狀態&#xff08;swap statu…

YOLOv8目標檢測項目代碼詳解與習題

YOLOv8目標檢測項目代碼詳解與習題一、項目代碼詳解該代碼是基于 YOLOv8 和 OpenCV 實現的圖像目標檢測項目&#xff0c;核心功能是加載預訓練的 YOLOv8 模型&#xff0c;對指定圖像進行目標檢測&#xff0c;然后可視化檢測結果并保存或顯示。以下是逐行解析&#xff1a;# -*- …

gradle關于dependency-management的使用

1、相關文檔Spring官方文檔&#xff1a;https://docs.spring.io/dependency-management-plugin/docs/current-SNAPSHOT/reference/html/#introduction倉庫版本查看&#xff1a;https://mvnrepository.com/artifact/io.spring.gradle/dependency-management-plugin/1.0.15.RELEA…

Java SpringBoot 對接FreeSwitch

1.增加Maven依賴<dependency><groupId>org.freeswitch.esl.client</groupId><artifactId>org.freeswitch.esl.client</artifactId><version>0.9.2</version></dependency><!-- XML-RPC --><dependency><groupI…

限流算法與實現

費曼學習法學習限流算法為什么要限流mysql插入600次/秒超過這個閾值&#xff0c;要么使用mysql集群、要么限流&#xff0c;防止宕機有哪些算法固定窗口就是個計數器&#xff0c;一秒內超過閾值&#xff0c;不允許訪問缺點&#xff1a;不均勻&#xff0c;跨越臨界點的一秒內&…

Android本地瀏覽PDF(Android PDF.js 簡要學習手冊)

環境 Min SDK: 21 依賴&#xff1a; implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1" implementation "androidx.webkit:webkit:1.12.0"權限&#xff1a; <uses-permission android:name"android.permission.INTERNE…

CVE-2022-41128

概述CVE-2022-41128 是 Microsoft Internet Explorer&#xff08;IE&#xff09;瀏覽器中 JavaScript 引擎&#xff08;JScript/Chakra&#xff09;的一個 0day 漏洞&#xff08;披露時無官方補丁&#xff09;&#xff0c;屬于內存破壞類漏洞&#xff0c;可被用于遠程代碼執行&…

基于LSTM的時間序列到時間序列的回歸模擬

獲取項目源碼點擊文末名片項目背景與目標 本項目旨在開發一種基于長短期記憶網絡&#xff08;LSTM&#xff09;的模型&#xff0c;用于時間序列到時間序列的回歸模擬任務。通過處理多組不同來源的時間序列數據&#xff0c;本模型的目標是從給定的輸入序列中預測相應的輸出序列。…

Linux基礎命令詳解:從入門到精通

本文整理了Linux系統中最常用的基礎命令&#xff0c;每個命令都配有詳細說明和具體示例&#xff0c;幫助你快速掌握Linux操作技巧。文章中用的終端是XShell,系統是Centos&#x1f4c1; 1. ls - 列出目錄&#xff08;文件夾&#xff09;內容 功能&#xff1a;顯示當前目錄下的文…