简短而简单,我只是不明白为什么会这样:
using UnityEngine;
using System.Collections.Generic;
// this struct holds data for a single 'shake' source
public struct Shake
{
public float AmountX;
public float AmountY;
public float Duration;
private float percentageComplete;
public float PercentageComplete { get { return percentageComplete; } }
public Shake(float _amountX, float _amountY, float _duration)
{
AmountX = _amountX;
AmountY = _amountY;
Duration = _duration;
percentageComplete = 0f;
Debug.Log("wtf");
}
public void Update()
{
Debug.Log("a " + percentageComplete);
percentageComplete += Time.deltaTime;
Debug.Log("b " + percentageComplete);
AmountX = Mathf.Lerp(AmountX, 0f, percentageComplete);
AmountY = Mathf.Lerp(AmountY, 0f, percentageComplete);
}
}
// This class uses that data to implement the shakes on a game camera
public class CameraShake : MonoBehaviour
{
// components
private Transform myTransform;
// vars
private List<Shake> shakes;
private float totalShakeX;
private float totalShakeY;
private void Awake()
{
myTransform = transform;
shakes = new List<Shake>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
AddShake(new Shake(.1f, .1f, 1f));
}
totalShakeX = 0f;
totalShakeY = 0f;
for (int i = 0; i < shakes.Count; i++)
{
shakes[i].Update();
Debug.Log("c " + shakes[i].PercentageComplete);
totalShakeX += shakes[i].AmountX;
totalShakeY += shakes[i].AmountY;
if (shakes[i].PercentageComplete >= 1f)
{
shakes.RemoveAt(i);
i--;
}
}
myTransform.position += new Vector3(totalShakeX, 0f, totalShakeY);
}
public void AddShake(Shake shake)
{
shakes.Add(shake);
}
}
当我运行此代码(使用 Unity3D 游戏引擎)时,struct Shake 不会记录正确的值。
完成百分比记录这些值(每一帧): a 0 b 0.001(或大约,它的 Time.deltaTime,处理前一帧所花费的时间) c 0
是什么赋予了?为什么percentageComplete 每帧都重置为0?
如果我将 Shake 更改为一个类而不是一个结构,它可以正常工作。