Fazer um terremoto convincente para jogo 3d

Como eu poderia fazer para criar um terremoto convincente para um simulador de desastres naturais? Eu estou trabalhando em um projeto, e a única coisa que eu preciso é que o personagem sobreviva a desastres variados, mas não faço ideia de como posso fazer um terremoto ou furacão. Se fosse um jogo 2d seria até mais fácil, mas já que é um projeto tridimensional, gostaria de saber do pessoal se vocês sabem o que fazer

Oi LucasPDA, acho que independente da plataforma, o básico para um terremoto, é tremer a camera e simultaneamente um som de terremoto.

se vc não estiver usando Cinemachine, este código na camera deve fazer essa simulação.
using System.Collections;
using UnityEngine;

public class CameraShake : MonoBehaviour
{
public float shakeDuration = 5f; // Duração do tremor em segundos
public float shakeMagnitude = 0.2f; // Intensidade do tremor

private Vector3 originalPosition;

public void StartShake()
{
    originalPosition = transform.position;
    StartCoroutine(ShakeCoroutine());
}

private IEnumerator ShakeCoroutine()
{
    float elapsedTime = 0f;

    while (elapsedTime < shakeDuration)
    {
        float offsetX = Random.Range(-shakeMagnitude, shakeMagnitude);
        float offsetY = Random.Range(-shakeMagnitude, shakeMagnitude);

        transform.position = originalPosition + new Vector3(offsetX, offsetY, 0f);

        elapsedTime += Time.deltaTime;
        yield return null;
    }

    transform.position = originalPosition; // Retorna à posição original
}

}

caso esteja usando cinemachine, esse funciona pq testei:
using System.Collections;
using UnityEngine;
using Unity.Cinemachine;

public class CinemachineShake : MonoBehaviour
{
public CinemachineVirtualCameraBase cinemachineCamera; // Atualizado para usar CinemachineVirtualCameraBase
public float shakeDuration = 5f;
public float shakeAmplitude = 2f; // Intensidade do tremor
public float shakeFrequency = 2f; // Frequência da oscilação

private CinemachineBasicMultiChannelPerlin noise;

private void Start()
{
    if (cinemachineCamera != null)
    {
        // Corrigido: use GetComponent para obter o Perlin
        noise = cinemachineCamera.GetComponent<CinemachineBasicMultiChannelPerlin>();
        Terremoto(); // Inicia o terremoto ao iniciar o script
    }
}

public void StartShake()
{
    if (noise != null)
    {
        StartCoroutine(ShakeCoroutine());
    }
}

private IEnumerator ShakeCoroutine()
{
    noise.AmplitudeGain = shakeAmplitude;
    noise.FrequencyGain = shakeFrequency;

    yield return new WaitForSeconds(shakeDuration);

    noise.AmplitudeGain = 0f;  // Para o tremor
    noise.FrequencyGain = 0f;
}

// Método para simular terremoto
public void Terremoto()
{
    if (noise != null)
    {
        StartCoroutine(TerremotoCoroutine());
    }
}

private IEnumerator TerremotoCoroutine()
{
    float duracao = 5f;
    float intensidade = 3f; // ajuste conforme necessário
    float frequencia = 2.5f; // ajuste conforme necessário

    noise.AmplitudeGain = intensidade;
    noise.FrequencyGain = frequencia;

    yield return new WaitForSeconds(duracao);

    noise.AmplitudeGain = 0f;
    noise.FrequencyGain = 0f;
}

}
Pode anexar este script ao objeto Cinemachine.
no editor, atribua o objeto cinemachine ao campo em aberto do script que ele vai obter o componente Cinemachine Camera do objeto.
No objeto cinemachine, adicione o componente “Cinemachine Basic Multi Channel” em Noise Profile, no simbolo de engrenagem, escolha o primeiro “Presets/6D Shake”, pronto. pode simular.
Obs: estou usando o Unity 6.1

Para dar mais realismo ao terremoto, aconselho usar umas animações de pedra rolando ou coisas caindo.