所以,大家好。我是Unity的新手,我在嘗試一個非常簡單的代碼,讓玩家可以放大和縮小。下面是它的代碼:
[
if (Input.GetMouseButtonDown(0)
{
initialPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition)。
Debug.Log(initialPosition.y)。
}
if (Input.GetMouseButton(0)
{
Vector3 newPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition)。
Debug.Log("newPosition" newPosition.y)。
if (newPosition.y < initialPosition.y)
{
縮放((zoomSpeed * Time.deltaTime) * -1f) 。
}
if (newPosition.y > initialPosition.y)
{
縮放(zoomSpeed * Time.deltaTime)。
}
intialPosition = newPosition;
}
}
private void Zoom() title">Zoom(float inZoomSpeed)?
{
transform.Translate(mCamRef.transform.position.z * inZoomSpeed * transform.forward)。
所以,如果你看到上面的代碼。當滑鼠按下時,我們記下了初始位置,當按住滑鼠按鈕時,我們不斷地跟蹤新的位置。我想要的東西很簡單。參照我最初的滑鼠點擊,我正在檢查我的新位置是否大于y,如果是,我需要放大。如果新的位置在y軸上低于初始位置。那我就需要放大。我已經這樣做了,但由于某些原因,它沒有作業。 這里有兩個問題:
- 盡管如果新位置沒有變化,也就是說,即使我的新位置變數和初始位置變數都在同一個位置,我的相機也會移動(在我的例子中是放大),但這不應該發生。只有當我的newPosition.y變數大于initialposition.y時才會發生這種情況。我試著用bool條件來做這件事,但失敗了。
- 如果我在我的手機上進行測驗。在我的案例中,雖然我的變焦條件滿足,但它只持續地變焦。但在unity游戲視窗中進行測驗時。當我的滑鼠離開游戲螢屏的時候,放大的效果是有效的。因為它只在游戲螢屏外作業。這就是它在手機上不作業的原因,因為手機顯示屏外沒有空間。我不知道為什么會發生這種情況,也不知道如何克服這個問題。
讓我知道為什么! 我被困在這里很長時間了,沒有得到任何想法。謝謝 <3
如果有任何疑問,請告訴我。很抱歉做了這么多解釋。只是想非常精確地說明問題。 我已經看到有人建議通過使用FOV來放大縮小。但我想通過翻譯或移動攝像機來實作。
uj5u.com熱心網友回復:
所以你的問題是在screenToViewPort點上進行計算。 相反,你可以試試這個。
。
if (Input.GetMouseButtonDown(0)
{
mInitialPosition = Input.mousePosition.y。
}
if (Input.GetMouseButton(0)
{
mChangedPosition = Input.mousePosition.y。
if (mChangedPosition == mInitialPosition)
{
return;
}
if (mChangedPosition < mInitialPosition)
{
Zoom((mZoomSpeed * -1f) * Time.deltaTime) 。
}
if (mChangedPosition > mInitialPosition)
{
縮放(mZoomSpeed * Time.deltaTime)。
}
}
private void Zoom(float inZoomSpeed)?
{
transform.Translate(mCamRef.transform.position.z * inZoomSpeed * transform.forward)。
不確定ScreenToViewport點如何作業... 但我想這段代碼應該能為你帶來神奇的效果... 在這里,我只是在點擊和按住滑鼠時直接獲取滑鼠的y值,并做了和你一樣的函式,同時告訴它當兩個y值都相同時不要做任何事情,并回傳函式... 因此,這意味著你的代碼中已經有了一切...... 祝你有個愉快的一天
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329097.html
標籤:
