Post by Strider on Oct 6, 2017 6:26:12 GMT
Hi, i've been using this script for my shake camera effect:
i call it from an Animation Event inside my character animations using my cast effect and shake control script:
But since i updated to 2.2.2 my camera shake effect no longer works, unless the game is on pause. If i pause in a moment when the shake camera script is in action, the paused screen shakes as it should, but during gameplay it doesn't. I think it has something to do with the new lock on system.
Thanks!
///Daniel Moore (Firedan1176) - Firedan1176.webs.com/
///26 Dec 2015
///
///Shakes camera parent object
using UnityEngine;
using System.Collections;
public class CameraShake : MonoBehaviour {
public bool debugMode = false;//Test-run/Call ShakeCamera() on start
public float shakeAmount;//The amount to shake this frame.
public float shakeDuration;//The duration this frame.
//Readonly values...
float shakePercentage;//A percentage (0-1) representing the amount of shake to be applied when setting rotation.
float startAmount;//The initial shake amount (to determine percentage), set when ShakeCamera is called.
float startDuration;//The initial shake duration, set when ShakeCamera is called.
bool isRunning = false; //Is the coroutine running right now?
public bool smooth;//Smooth rotation?
public float smoothAmount = 5f;//Amount to smooth
void Start () {
if(debugMode) ShakeCamera ();
}
void ShakeCamera() {
startAmount = shakeAmount;//Set default (start) values
startDuration = shakeDuration;//Set default (start) values
if (!isRunning) StartCoroutine (Shake());//Only call the coroutine if it isn't currently running. Otherwise, just set the variables.
}
public void ShakeCamera(float amount, float duration) {
shakeAmount += amount;//Add to the current amount.
startAmount = shakeAmount;//Reset the start amount, to determine percentage.
shakeDuration += duration;//Add to the current time.
startDuration = shakeDuration;//Reset the start time.
if(!isRunning) StartCoroutine (Shake());//Only call the coroutine if it isn't currently running. Otherwise, just set the variables.
}
IEnumerator Shake() {
isRunning = true;
while (shakeDuration > 0.01f) {
Vector3 rotationAmount = Random.insideUnitSphere * shakeAmount;//A Vector3 to add to the Local Rotation
rotationAmount.z = 0;//Don't change the Z; it looks funny.
shakePercentage = shakeDuration / startDuration;//Used to set the amount of shake (% * startAmount).
shakeAmount = startAmount * shakePercentage;//Set the amount of shake (% * startAmount).
shakeDuration = Mathf.Lerp(shakeDuration, 0, Time.deltaTime);//Lerp the time, so it is less and tapers off towards the end.
if(smooth)
transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(rotationAmount), Time.deltaTime * smoothAmount);
else
transform.localRotation = transform.localRotation * Quaternion.Euler (rotationAmount);//Set the local rotation the be the rotation amount.
yield return null;
}
transform.localRotation = Quaternion.Euler(0.0f, transform.localRotation.eulerAngles.y, 0.0f);//Set the local rotation to 0 when done, just to get rid of any fudging stuff.
isRunning = false;
}
}
i call it from an Animation Event inside my character animations using my cast effect and shake control script:
function ShakeCamera()
{
var camaraTemporal:Camera = Camera.main;
camaraTemporal.GetComponent(CameraShake).ShakeCamera(amount,duration);
}
But since i updated to 2.2.2 my camera shake effect no longer works, unless the game is on pause. If i pause in a moment when the shake camera script is in action, the paused screen shakes as it should, but during gameplay it doesn't. I think it has something to do with the new lock on system.
Thanks!