64 lines
1.5 KiB
C#
64 lines
1.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Cinemachine;
|
|
|
|
public class CameraVR : MonoBehaviour
|
|
{
|
|
private CinemachineVirtualCamera _cinemachineVirtualCamera;
|
|
private CinemachineBasicMultiChannelPerlin _multiChannelPerlin;
|
|
|
|
//当前持续时间
|
|
private float _shakeTime;
|
|
//总时间
|
|
private float _shakeTimeTotal;
|
|
//强度
|
|
private float _shakeIntensity;
|
|
|
|
|
|
private void Awake()
|
|
{
|
|
|
|
_cinemachineVirtualCamera = GetComponent<CinemachineVirtualCamera>();
|
|
|
|
_multiChannelPerlin = _cinemachineVirtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if (_shakeTime > 0)
|
|
{
|
|
_shakeTime -= Time.deltaTime;
|
|
_multiChannelPerlin.m_AmplitudeGain = Mathf.Lerp(0, _shakeIntensity, _shakeTime / _shakeTimeTotal);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 抖动
|
|
/// </summary>
|
|
/// <param name="Time">抖动时间</param>
|
|
/// <param name="Intensity">强度</param>
|
|
public void ShakeCamera(float time, float intensity)
|
|
{
|
|
if (_cinemachineVirtualCamera != null)
|
|
{
|
|
_shakeTimeTotal = time;
|
|
_shakeIntensity = intensity;
|
|
|
|
_shakeTime = _shakeTimeTotal;
|
|
_multiChannelPerlin.m_AmplitudeGain = _shakeIntensity;
|
|
}
|
|
}
|
|
|
|
private void OnDrawGizmos()
|
|
{
|
|
Ray ray = new Ray(transform.position, transform.forward);
|
|
Gizmos.color = Color.blue;
|
|
|
|
Gizmos.DrawRay(ray);
|
|
|
|
}
|
|
}
|