57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using UnityEngine; | |||
|  | using System.Collections; | |||
|  | public class ScreenShake : MonoBehaviour | |||
|  | { | |||
|  |     private float SHAKE_DELTA = 0.01f; | |||
|  | 
 | |||
|  |     private float shakeTime = 0.0f; | |||
|  |     private float fps = 20.0f; | |||
|  |     private float frameTime = 0.0f; | |||
|  |     private float shakeDelta = 0.005f; | |||
|  |     public Camera cam; | |||
|  |     private bool isshakeCamera = false; | |||
|  | 
 | |||
|  |     public void Shake(float pShakeTime) | |||
|  |     { | |||
|  |         shakeTime = pShakeTime; | |||
|  |         isshakeCamera = true; | |||
|  |     } | |||
|  | 
 | |||
|  |     void Start() | |||
|  |     { | |||
|  |         shakeTime = 1.0f; | |||
|  |         fps = 20.0f; | |||
|  |         frameTime = 0.03f; | |||
|  |         shakeDelta = SHAKE_DELTA; | |||
|  |     } | |||
|  | 
 | |||
|  |     void Update() | |||
|  |     { | |||
|  |         if (isshakeCamera) | |||
|  |         { | |||
|  |             if (shakeTime > 0) | |||
|  |             { | |||
|  |                 shakeTime -= Time.deltaTime; | |||
|  |                 if (shakeTime <= 0) | |||
|  |                 { | |||
|  |                     cam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f); | |||
|  |                     isshakeCamera = false; | |||
|  |                     shakeTime = 1.0f; | |||
|  |                     fps = 20.0f; | |||
|  |                     frameTime = 0.03f; | |||
|  |                     shakeDelta = SHAKE_DELTA; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     frameTime += Time.deltaTime; | |||
|  | 
 | |||
|  |                     if (frameTime > 1.0 / fps) | |||
|  |                     { | |||
|  |                         frameTime = 0; | |||
|  |                         cam.rect = new Rect(shakeDelta * (-1.0f + 2.0f * Random.value), shakeDelta * (-1.0f + 2.0f * Random.value), 1.0f, 1.0f); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |