2016-01-10 44 views
1

我越來越瘋狂,無限的背景和速度。無限背景速度Unity2D

基本上我想控制速度順利,以增加/減少它。

我該如何做到這一點?

void Start() { 
    speed = 0.4f; 
} 

void Update() { 
    float x = Mathf.Repeat((Time.time * speed),1); 
    GetComponent<Renderer>().material.mainTextureOffset = new Vector2 (x, 0f); 
} 

public void IncreaseSpeed(float newSpeed){ 
    ? 
} 

public void DecreaseSpeed(float newSpeed){ 
    ? 
} 
+1

你不能只是增加和減少你的速度變量在這些方法? 「speed = newSpeed」 – Savlon

+0

我可以,但它會跳到新的速度並且變化是可見的。我想順利過渡到「新速度」,而不會造成可見的奇怪效果。 – fran

+0

而不是將速度變量設置爲newSpeed,只需將少量添加到當前速度即可。繼續這樣做,直到你的速度變量是所需的速度。 – Savlon

回答

1

根據您的要求,我不認爲您有任何需要分別增加和減少速度的功能。相反,只需要一個設置目標速度的單個設備,並根據需要每幀增加/減少實際速度,直到達到目標。

示例實現可能看起來像:

float speed = 0; 
float targetSpeed = 0; 
float speedStepSize = 0.1f; // Change as needed based on how quickly speed should change 

void Start() { 
    targetSpeed = 0.4f; 
} 

void Update() { 
    float x = Mathf.Repeat((Time.time * speed),1); 
    GetComponent<Renderer>().material.mainTextureOffset = new Vector2 (x, 0f); 

    if (targetSpeed < speed) { 
     speed = Mathf.Max(speed - speedStepSize, targetSpeed); 
    } 
    else if (targetSpeed > speed){ 
     speed = Mathf.Min(speed + speedStepSize, targetSpeed); 
    } 
} 

public void SetTargetSpeed(float newSpeed){ 
    targetSpeed = newSpeed; 
} 

(您也可以用Time.deltaTime乘以步長,如果你不想綁定到的幀速率的速度。)

希望這有助於!如果您有任何問題,請告訴我。

+0

酷!它做的工作,謝謝!是否可以使用小於0.1f(0.01f)的值?如果我將speedStepSize設置爲0.01f(實際上會更快),我會收到一個奇怪的行爲。另外,如何使用Time.deltaTime來「緩和」到targetSpeed的轉換? – fran

+0

很高興我能幫忙。我不確定爲什麼使用小於0.1f的值會增加速度變化的速度 - 在邏輯上,它應該使速度變慢,因爲它需要更多的步驟才能從當前速度變爲目標速度。添加/減少'speedStepSize * Time.deltaTime'不會產生緩動效果,但會確保速度以與遊戲幀速率無關的速率變化(這通常是可取的)。如果你確實想要寬鬆(非線性變化率),那麼這種方法將會有很大的不同(並且更加複雜)。 – Serlite