private IEnumerator Shake(ShakeSettings settings) { float completionPercent = 0; float movePercent = 0; float angle_radians = settings.angle * Mathf.Deg2Rad - Mathf.PI; Vector3 previousWaypoint = new Vector3(0, 0, -10); Vector3 currentWaypoint = new Vector3(0, 0, -10); float moveDistance = 0; while (true) { if (movePercent >= 1 || completionPercent == 0) { float dampingFactor = DampingCurve(completionPercent, settings.dampingPercent); float noiseAngle = (Random.value - .5f) * 2 * Mathf.PI / 2f; angle_radians += Mathf.PI + noiseAngle * settings.noisePercent; currentWaypoint = new Vector3(Mathf.Cos(angle_radians), Mathf.Sin(angle_radians)) * settings.strength * dampingFactor; currentWaypoint.z = -10; previousWaypoint = transform.localPosition; moveDistance = Vector2.Distance(currentWaypoint, previousWaypoint); movePercent = 0; } completionPercent += Time.deltaTime / settings.duration; movePercent += Time.deltaTime / moveDistance * settings.speed; transform.localPosition = Vector3.Lerp(previousWaypoint, currentWaypoint, movePercent); yield return(null); } }
private Vector2 CalculateRandomVector(ref ShakeInstance shake, ShakeSettings currentSettings) { float noise = Mathf.PerlinNoise(Time.realtimeSinceStartup * m_DirectionNoiseScale, shake.duration); float deviation = noise * shake.magnitude * currentSettings.maxAngle; return(shake.direction.Rotate(deviation)); }
public static void S_ShakeAllCameras(ShakeSettings settings) { foreach (var transform in transforms.Where(t => t.GetComponent <CameraShaker>() != null)) { transform.Shake(settings); } }
//public static void S_ShakeAllCameras(ShakeSettings settings) //{ // foreach (var camera in transforms) // camera.Shake(settings); //} //public void ShakeAllCameras(ShakeSettings settings) //{ // CameraShaker.S_ShakeAllCameras(settings); //} public void Shake(ShakeSettings settings) { if (UseLocalSettings) { settings = this.Settings; } if (settings.duration <= 0) { return; } List <ShakeData> shakeDatas; if (!shakes.ContainsKey(this)) { shakes[this] = new List <ShakeData>(); } shakeDatas = shakes[this]; shakeDatas.Add(new ShakeData(settings)); //start new coroutine if (shakeDatas.Count == 1) { StartCoroutine(ShakeTransform(Transform, shakeDatas)); } //else we olready have coroutine with shakeDatas list }
public void DoGunScreenShake(ShakeSettings settings) { if (currentShakeCoroutine != null) { StopCoroutine(currentShakeCoroutine); } currentShakeCoroutine = Shake(settings); StartCoroutine(currentShakeCoroutine); }
private float CalculateShakeMagnitude(ref ShakeInstance shake, ShakeSettings currentSettings) { var t = shake.normalizedProgress; var noise = Mathf.PerlinNoise(Time.realtimeSinceStartup * m_MagnitudeNoiseScale, shake.duration); noise *= 0.6f + 0.4f; return(Mathf.Lerp(shake.magnitude, 0, t) * noise * currentSettings.maxShake); }
private float CalculateShakeMagnitude(ref ShakeInstance shake, ShakeSettings currentSettings) { float t = shake.normalizedProgress; float noise = Mathf.PerlinNoise(Time.realtimeSinceStartup * m_MagnitudeNoiseScale, shake.duration); // Rescale noise so it shakes primarily towards direction rather than in both directions // This changes the noise range from [1,-1] to [1, -0.2], noise *= 0.6f + 0.4f; return(Mathf.Lerp(shake.magnitude, 0, t) * noise * currentSettings.maxShake); }
/// <summary> /// Process and accumulate each shake /// </summary> protected virtual void ProcessShake(ref ShakeInstance shake, ref Vector2 shakeVector) { if (shake.maxDuration > 0) { shake.duration = Mathf.Clamp(shake.duration + Time.deltaTime, 0, shake.maxDuration); } ShakeSettings settings = m_ShakingCamera.orthographic ? m_OrthographicSettings : m_PerspectiveSettings; float magnitude = CalculateShakeMagnitude(ref shake, settings); Vector2 additionalShake = CalculateRandomVector(ref shake, settings); shakeVector += additionalShake * magnitude; }
public ShakeID AddShake(ShakeSettings shake, float strength, Vector2 dir) { ActiveShakeData data; data.Settings = shake; data.Strength = strength; data.Direction = dir; data.StartTime = Time.time; data.ID = _ShakeID++; _ActiveShakes.Add(data); return(new ShakeID() { ID = data.ID }); }
public void ShakeAllCameras(ShakeSettings settings) { CameraShaker.S_ShakeAllCameras(settings); }
public void ShakeAllVirtualCameras(ShakeSettings settings) { VirtualCameraShaker.S_ShakeAllVirtualCameras(settings); }
public void SetSettings(ShakeSettings settings) { Settings = settings; }
public Shake(ShakeSettings settings) { Settings = settings; }
public Shake() { Settings = ShakeSettings.Default; }
public ShakeData(ShakeSettings settings) { this.settings = settings; }