簡體   English   中英

如何僅沿 Y 軸移動對象

[英]How to move an object only by the Y-axis

現在,您只能通過局部坐標(僅當您單擊對象時)上下 (Y) 移動對象。 我需要做到這一點,以便我可以在不考慮點擊的情況下移動對象,即我可以在屏幕上的任何地方行駛。

public float dragSpeed = 1f;
Vector3 lastMousePos;

void OnMouseDown( ) {
    lastMousePos = Input.mousePosition;
}

void OnMouseDrag() {
    Vector3 delta = Input.mousePosition - lastMousePos;
    Vector3 pos = transform.position;
    pos.y += delta.y * dragSpeed;
    transform.position = pos;
    lastMousePos = Input.mousePosition;
}

您的問題標題以某種方式提出了與問題正文完全相反的問題......

如果我正確理解您的問題,您只想始終跟隨鼠標,而不僅僅是在按住按鈕時。

只需在Update進行移動即可。 然后使用Vector3.MoveTowards 您甚至不需要存儲鼠標位置並為此計算增量。 MoveTowards已經為您處理好了。

請注意,只有當您確實想在屏幕空間像素坐標中移動對象時,整個代碼才有意義。 例如,如果您的對象在 Screespace Overlay Canvas 內。 否則,您可能希望使用以下方法將位置轉換為世界空間

var worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition + Vector3.forward * distanceToCamera);

另請注意,目前您的代碼依賴於幀率! 您正在以dragSpeed Units / frame固定速度移動對象。 您更願意使用dragSpeed Units / real-time seconds的幀率獨立值。 因此,您應該使用Time.deltaTime並調整dragSpeed值,現在需要或多或少60才能獲得相同的效果。

public float dragSpeed = 60f;

void Update() 
{
    transform.position = Vector3.MoveTowards(transform.position, Input.mousePosition, dragSpeed * Time.deltaTime);
}

現在它只是以恆定速度向鼠標位置移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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