簡體   English   中英

統一獲取鼠標位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM