我有一個腳本可以讓我的相機在按下右鍵時圍繞目標旋轉。目前,當釋放右鍵時,旋轉完全停止,這是完全可以預料的行為。我希望它在滑鼠按鈕向上后繼續旋轉一段時間,然后再完全停止,就像它正在減速一樣。這是處理圍繞給定目標旋轉的代碼:
if (!target)
return;
if (Input.GetMouseButtonDown(1))
previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
if (Input.GetMouseButton(1))
{
Vector3 nextDirection = previousPosition - cam.ScreenToViewportPoint(Input.mousePosition);
direction = Vector3.SmoothDamp(direction, nextDirection, ref smoothVelocity, smoothTime);
cam.transform.position = target.position;
cam.transform.Rotate(new Vector3(1, 0, 0), direction.y * 180);
cam.transform.Rotate(new Vector3(0, 1, 0), -direction.x * 180, Space.World);
cam.transform.Translate(new Vector3(0, 0, -distanceFromSphere));
previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
}
以下是所需的參考資料:
public Camera cam;
public Vector3 previousPosition;
public Transform target;
public float distanceFromSphere = 100;
public Vector3 direction;
public Vector3 smoothVelocity = Vector3.zero;
public float smoothTime = 3f;
有沒有辦法讓滑鼠按鈕按下時相機旋轉加速,滑鼠抬起時減速?
uj5u.com熱心網友回復:
您需要的是慣性,在 if 陳述句之外獲取 Rotate 和 Translate 呼叫,最后將方向乘以 0.98 或 0.99,具體取決于您需要多少 intertia。
public float inertia = 0.98f;
direction *= inertia;
uj5u.com熱心網友回復:
Chris Ch 的解決方案作業正常,但我已經做了一些不同的事情,這是我對原始問題的解決方案:
void UpdateWorldRotation()
{
if (!target)
return;
if (Input.GetMouseButtonDown(1))
previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
Vector3 currentSmoothVelocity = new Vector3();
if (Input.GetMouseButton(1))
{
nextDirection = previousPosition - cam.ScreenToViewportPoint(Input.mousePosition);
currentSmoothVelocity = smoothVelocity;
}
if (Input.GetMouseButtonUp(1))
{
StartCoroutine(SmoothStop());
currentSmoothVelocity = smoothVelocity / 2;
}
direction = Vector3.SmoothDamp(direction, nextDirection, ref currentSmoothVelocity, smoothTime, 100, 10f * Time.deltaTime);
cam.transform.position = target.position;
cam.transform.Rotate(new Vector3(1, 0, 0), direction.y * 180);
cam.transform.Rotate(new Vector3(0, 1, 0), -direction.x * 180, Space.World);
cam.transform.Translate(new Vector3(0, 0, -distanceFromSphere));
previousPosition = cam.ScreenToViewportPoint(Input.mousePosition);
}
IEnumerator SmoothStop()
{
yield return new WaitForSeconds(smoothStopTime);
nextDirection = Vector3.zero;
}
這樣,球體在完全停止之前以較慢的速度保持特定的時間量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461617.html
上一篇:我正在嘗試在Unity中實作時間延遲。我已經使用while回圈、for回圈和協程完成了它,但它們似乎都不起作用
下一篇:返回列表