文章目錄
- 一、獲取到點擊物體的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;}}
}
總結
射線生成,射線檢測,射線+距離獲得坐標