fixed camera shake, fixed scroll pickup
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
namespace Beyond
|
||||
{
|
||||
public class CameraShaker : MonoBehaviour
|
||||
{
|
||||
[Header("Shake Settings")]
|
||||
public float amplitude = 0.1f; // Si³a drgania
|
||||
public float amplitude = 0.1f; // Si<EFBFBD>a drgania
|
||||
public float duration = 1.0f; // Czas trwania drgania
|
||||
public float frequency = 20f; // Prêdkoœæ drgania
|
||||
public float frequency = 20f; // Pr<EFBFBD>dko<EFBFBD><EFBFBD> drgania
|
||||
|
||||
[Header("Shake Curve")]
|
||||
public AnimationCurve shakeCurve = AnimationCurve.EaseInOut(0, 1, 1, 0); // Krzywa efektu drgania
|
||||
@@ -17,6 +19,7 @@ namespace Beyond
|
||||
private Transform mainCamera;
|
||||
private bool isShaking = false;
|
||||
private Vector3 lastShakeOffset = Vector3.zero;
|
||||
private Vector3 orginalPos;
|
||||
|
||||
void Start()
|
||||
{
|
||||
@@ -27,39 +30,46 @@ namespace Beyond
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
enabled = true; // Skrypt mo¿e byæ w³¹czony, ale shake dzia³a tylko po evencie
|
||||
RenderPipelineManager.endCameraRendering += OnEndCameraRendering;
|
||||
enabled = true; // Skrypt mo<EFBFBD>e by<EFBFBD> w<EFBFBD><EFBFBD>czony, ale shake dzia<EFBFBD>a tylko po evencie
|
||||
}
|
||||
|
||||
void Oestroy()
|
||||
{
|
||||
RenderPipelineManager.endCameraRendering -= OnEndCameraRendering;
|
||||
}
|
||||
|
||||
[Button]
|
||||
public void StartShake()
|
||||
{
|
||||
if (isShaking) return; // Jeœli shake ju¿ dzia³a, nie uruchamiaj ponownie
|
||||
if (isShaking) return; // Je<EFBFBD>li shake ju<EFBFBD> dzia<EFBFBD>a, nie uruchamiaj ponownie
|
||||
|
||||
isShaking = true;
|
||||
shakeTime = 0f;
|
||||
lastShakeOffset = Vector3.zero; // Reset poprzedniego przesuniêcia
|
||||
lastShakeOffset = Vector3.zero; // Reset poprzedniego przesuni<EFBFBD>cia
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
/*
|
||||
if (isShaking && shakeTime < duration)
|
||||
{
|
||||
shakeTime += Time.deltaTime;
|
||||
float shakeStrength = amplitude * shakeCurve.Evaluate(shakeTime / duration);
|
||||
|
||||
// P³ynne drgania na bazie Perlin Noise
|
||||
// P<EFBFBD>ynne drgania na bazie Perlin Noise
|
||||
float x = (Mathf.PerlinNoise(Time.time * frequency, 0) * 2 - 1) * shakeStrength;
|
||||
float y = (Mathf.PerlinNoise(0, Time.time * frequency) * 2 - 1) * shakeStrength;
|
||||
float z = (Mathf.PerlinNoise(Time.time * frequency, Time.time * frequency) * 2 - 1) * shakeStrength;
|
||||
|
||||
// Nowe przesuniêcie
|
||||
// Nowe przesuni<EFBFBD>cie
|
||||
localShakeOffset = new Vector3(x, y, z);
|
||||
|
||||
// Usuwamy poprzednie przesuniêcie, dodajemy nowe
|
||||
// Usuwamy poprzednie przesuni<EFBFBD>cie, dodajemy nowe
|
||||
mainCamera.localPosition -= lastShakeOffset;
|
||||
mainCamera.localPosition += localShakeOffset;
|
||||
|
||||
// Zapamiêtujemy ostatnie przesuniêcie
|
||||
// Zapami<EFBFBD>tujemy ostatnie przesuni<EFBFBD>cie
|
||||
lastShakeOffset = localShakeOffset;
|
||||
}
|
||||
else if (shakeTime >= duration)
|
||||
@@ -68,6 +78,36 @@ namespace Beyond
|
||||
mainCamera.localPosition -= lastShakeOffset; // Resetujemy shake
|
||||
lastShakeOffset = Vector3.zero;
|
||||
}
|
||||
*/
|
||||
if (isShaking && shakeTime < duration)
|
||||
{
|
||||
shakeTime += Time.deltaTime;
|
||||
float shakeStrength = amplitude * shakeCurve.Evaluate(shakeTime / duration);
|
||||
|
||||
// P<>ynne drgania na bazie Perlin Noise
|
||||
float x = (Mathf.PerlinNoise(Time.time * frequency, 0) * 2 - 1) * shakeStrength;
|
||||
float y = (Mathf.PerlinNoise(0, Time.time * frequency) * 2 - 1) * shakeStrength;
|
||||
float z = (Mathf.PerlinNoise(Time.time * frequency, Time.time * frequency) * 2 - 1) * shakeStrength;
|
||||
|
||||
// Nowe przesuni<6E>cie
|
||||
localShakeOffset = new Vector3(x, y, z);
|
||||
orginalPos = transform.position;
|
||||
// Usuwamy poprzednie przesuni<6E>cie, dodajemy nowe
|
||||
transform.position += localShakeOffset;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OnEndCameraRendering(ScriptableRenderContext context, Camera camera)
|
||||
{
|
||||
if (isShaking)
|
||||
{
|
||||
transform.position = orginalPos;
|
||||
if (shakeTime >= duration)
|
||||
{
|
||||
isShaking = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user