這就是我要做的:
if(transform.localScale.x > 7)
{
for(int i = 7; i > 1; i--)
{
transform.localScale -= new Vector3(1, 1, 1) * Time.deltaTime;
}
}
else
{
transform.localScale = new Vector3(1, 1, 1) * Time.deltaTime;
}
執行 else 陳述句以增加規模,當它達到 7 時,if 陳述句應該將其減少回 1,這要歸功于 for 回圈應該運行 6 次迭代并減少規模 6 次。但是只有當比例達到 7 時,else 部分才能正常作業,它只會減少到 6,然后在一秒鐘內回到 7。它不會一直下??降到 1。
uj5u.com熱心網友回復:
您知道您的整個for回圈將在一幀內立即執行嗎?然后乘以Time.deltaTime假設每秒 60 幀的值約為0.0166666666....
所以你在回圈中所做的基本上等于做
transform.localScale -= Vector3.one * 6 * 0.017f;
就在下一幀中,您可能已經再次低于7=> 您降落在else案例中并再次增加比例。
所以在下一幀它已經會再次減少它等等
據我了解,您更希望在兩個音階之間有一種乒乓球效果。
我寧愿使用類似的東西
// adjust via the Inspector
public float speed = 1;
public float amplitude = 7f;
private Vector3 originalScale;
private float timePassed;
private void Start()
{
originalScale = transform.localScale;
}
private void Update()
{
timePassed = Time.deltaTime * speed;
// see https://docs.unity3d.com/ScriptReference/Mathf.PingPong.html
transform.localScale = originalScale * (1 Mathf.PingPong(timePassed, amplitude - 1));
// or with ease-in and ease-out
//transform.localScale = originalScale * (1 (amplitude - 1) * Mathf.SmoothStep(0, 1, Mathf.PingPong(timePassed, 1)));
}
在哪里 Mathf.PingPong
回傳一個值,該值將在值 0 和長度之間遞增和遞減。
或者,如果你確實需要一個不同的上升和下降時間我寧愿提出一個協程一樣
// adjust via the Inspector
public float increaseDuration = 1f;
public float decreaseDuration = 7f;
public float amplitude = 7f;
private IEnuemerator Start()
{
var originalScale = transform.localScale;
var maxScale = originalScale * amplitude;
while(true)
{
for(var timePassed = 0f; timePassed < increaseDuration; timePassed = Time.deltaTime)
{
var factor = timePassed / increaseDuration;
// optinal add ease-in and ease-out
//factor = Mathf.SmoothStep(0, 1, factor);
transform.localScale = Vector3.Lerp(originalScale, maxScale, factor);
yield return null;
}
for(var timePassed = 0f; timePassed < decreaseDuration; timePassed = Time.deltaTime)
{
var factor = timePassed / decreaseDuration;
// optinal add ease-in and ease-out
//factor = Mathf.SmoothStep(0, 1, factor);
transform.localScale = Vector3.Lerp(maxScale, originalScale, factor);
yield return null;
}
}
}
uj5u.com熱心網友回復:
您可以創建其他變數,例如:
public bool isDecreasing=false;
if(!isDecreasing && transform.localScale.x > 7)
{
isDecreasing=true
}else if(isDecreasing&&transform.localScale.x==1)
{
isDecreasing=false
}
if(isDecreasing)
{
transform.localScale -= new Vector3(1, 1, 1) * Time.deltaTime;
}else
{
transform.localScale = new Vector3(1, 1, 1) * Time.deltaTime;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331424.html
上一篇:如何將物件列印到控制臺?
