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