public void StartShake(ScreenShakeData screenShakeData) { StartShake(screenShakeData.key, screenShakeData.amount); }
public void ShakeCam(ScreenShakeData screenShakeData) { ShakeCam(screenShakeData.duration, screenShakeData.amount); }
public void StopShake(ScreenShakeData screenShakeData) { ScreenShake.instance.StopShake(screenShakeData.key); }
public void StartShake(ScreenShakeData screenShakeData) { ScreenShake.instance.StartShake(screenShakeData); }
public void ShakeOneShot(ScreenShakeData screenShakeData) { ScreenShake.instance.ShakeCam(screenShakeData); }
void Update() { transform.position = _basePos; GameObject[] players = GameObject.FindGameObjectsWithTag("Player"); Vector2 avg = Vector3.zero; for (int i = 0; i < players.Length; i++) { avg += new Vector2(players[i].transform.position.z, players[i].transform.position.x); } avg /= players.Length; avg /= 2.0f; float zVal = (players[0].transform.position - players[1].transform.position).magnitude; zVal /= 5.0f; _targetOffset = new Vector3(avg.x, -avg.y, -zVal + 5.0f); _currentOffset = (_targetOffset - _currentOffset) / 2.0f; transform.Translate(_currentOffset); for (int i = 0; i < _shakeQueue.Count; ++i) { ScreenShakeData data = _shakeQueue[i]; data.GlobalTimer += Time.deltaTime; data.ShakeTimer += Time.deltaTime; if (data.ShakeTimer >= 0.05f / data.Speed) { data.ShakeTimer = 0; float strength; if (data.DecayOverTime) { strength = data.Strength * (1.0f - (data.GlobalTimer / data.Duration)); } else { strength = data.Strength; } data.SpringForce = new Vector2(Random.Range(-strength, strength), Random.Range(-strength, strength)); } data.Offset += data.SpringForce * Time.deltaTime; data.Offset -= (data.Offset / 2.0f) * Time.deltaTime * data.Speed * 2.0f; data.SpringForce -= (data.SpringForce / 2.0f) * Time.deltaTime * data.Speed * 2.0f; _shakeQueue[i] = data; Vector3 t = new Vector3(data.Offset.x, data.Offset.y, 0); transform.Translate(t); } for (int i = 0; i < _shakeQueue.Count; ++i) { ScreenShakeData data = _shakeQueue[i]; if (data.GlobalTimer > data.Duration) { _shakeQueue.Remove(_shakeQueue[i]); } } if (_shakeQueue.Count == 0) { if ((transform.position - _basePos).magnitude > 0.05f) { transform.Translate(((_basePos - transform.position) / 2.0f) * Time.deltaTime * 5.0f, Space.World); } } }