[英]Getting mouse position in unity
我正在嘗試將對象移動到鼠標位置。 但它給了我像 300 這樣的大 x 值,但在那個地方,預先放置的對象的 x 位置是 -4。
rigidBody.velocity = new Vector3(Input.mousePosition.x, EndPointY, 0)*4;
那么我怎樣才能獲得當前的鼠標位置呢?
謝謝..
Input.mousePosition將為您提供鼠標在屏幕上的位置(像素)。 您需要使用Camera.ScreenToWorldPoint()將這些像素轉換為世界單位。
您可以點擊此鏈接了解如何使用鼠標拖動 3d 對象,或者您可以復制此代碼以將對象從當前位置移動到鼠標位置。
//the object to move
public Transform objectToMove;
void Update()
{
Vector3 mouse = Input.mousePosition;
Ray castPoint = Camera.main.ScreenPointToRay(mouse);
RaycastHit hit;
if (Physics.Raycast(castPoint, out hit, Mathf.Infinity))
{
objectToMove.transform.position = hit.point;
}
}
使用ScreenToWorldPoint
的轉換對於 2D 矢量非常簡單:
Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
那就是當前的鼠標位置。 問題是您的對象在世界坐標系中,而鼠標正在使用屏幕坐標系。
您需要使用Camera.ScreenToWorldPoint()轉換鼠標位置。
如果您想使用新的 Unity InputSystem,您可以執行以下操作:
using UnityEngine;
using UnityEngine.InputSystem;
...
Vector2 screenPosition = Mouse.current.position.ReadValue();
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition)
請注意,您需要安裝 InputSystem 包才能使其工作。
Vector3 MousePosInWorldSpace()
{
return Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
ScreenToWorldPoint
返回世界空間中距相機提供的z
距離處的一個點。
由於Input.mousePosition.z
位置始終為 0,在上面的示例中,返回點的z
值將等於相機的z
位置。
在以下示例中, Camera.main.nearClipPlane
距離作為返回的世界空間點與相機的z
距離提供。 相機無法看到更接近此距離的幾何體。
Vector3 MousePosInWorldSpace()
{
Vector3 mousePos = Input.mousePosition;
return Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, Camera.main.nearClipPlane));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.