90 lines
2.0 KiB
C#
90 lines
2.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace HP.Generics
|
|
{
|
|
public class AmbianceVolumeInsideOutside : MonoBehaviour
|
|
{
|
|
public float outsideVolume = .137f;
|
|
public float insideVolume = .1f;
|
|
public AudioSource aSource;
|
|
|
|
public bool isOutside = true;
|
|
|
|
// Start is called before the first frame update
|
|
|
|
|
|
private void Update()
|
|
{
|
|
Detection();
|
|
}
|
|
|
|
IEnumerator NewVolumeRoutine(float newVolume)
|
|
{
|
|
isOutside = !isOutside;
|
|
|
|
float t = 0;
|
|
float duration = .5f;
|
|
|
|
float startValue = aSource.volume;
|
|
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime / duration;
|
|
|
|
aSource.volume = Mathf.Lerp(startValue, newVolume, t);
|
|
|
|
yield return null;
|
|
}
|
|
|
|
|
|
yield return null;
|
|
}
|
|
|
|
Vector3 lastPos = new Vector3();
|
|
bool lastCheckHitDetected = false;
|
|
|
|
|
|
void Detection()
|
|
{
|
|
RaycastHit hit;
|
|
if (Physics.Linecast(transform.position, lastPos, out hit))
|
|
{
|
|
if(!lastCheckHitDetected)
|
|
ChangeVolume(hit);
|
|
|
|
lastCheckHitDetected = true;
|
|
|
|
}
|
|
else
|
|
{
|
|
lastCheckHitDetected = false;
|
|
}
|
|
|
|
|
|
lastPos = transform.position;
|
|
}
|
|
|
|
|
|
void ChangeVolume(RaycastHit hit)
|
|
{
|
|
if (hit.transform.GetComponent<EyeAdaptTriggerTag>())
|
|
{
|
|
//Debug.Log("Check)");
|
|
if (aSource && isOutside)
|
|
{
|
|
StopAllCoroutines();
|
|
StartCoroutine(NewVolumeRoutine(insideVolume));
|
|
}
|
|
else if (aSource && !isOutside)
|
|
{
|
|
StopAllCoroutines();
|
|
StartCoroutine(NewVolumeRoutine(outsideVolume));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|