sphere speaking

This commit is contained in:
2023-05-14 19:04:46 +02:00
parent e2699061da
commit 48742e7d14
5 changed files with 72 additions and 9 deletions

View File

@@ -5156,7 +5156,7 @@ PrefabInstance:
- target: {fileID: 8137769401290482906, guid: 1358b4ef564c4704682417dff526766a, - target: {fileID: 8137769401290482906, guid: 1358b4ef564c4704682417dff526766a,
type: 3} type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []

View File

@@ -1,3 +1,23 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: e9879de5b83a4547be8ec1c406fb0556 guid: e9879de5b83a4547be8ec1c406fb0556
timeCreated: 1684016482 AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 0
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1369,7 +1369,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 2147483647 m_StaticEditorFlags: 2147483647
m_IsActive: 0 m_IsActive: 1
--- !u!4 &6534859180971967246 --- !u!4 &6534859180971967246
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -9612,7 +9612,7 @@ Transform:
- {fileID: 1776039877960258817} - {fileID: 1776039877960258817}
- {fileID: 1772644945931633228} - {fileID: 1772644945931633228}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &4758909792356742116 --- !u!54 &4758909792356742116
Rigidbody: Rigidbody:
@@ -14949,7 +14949,12 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
minDistance: 0.01 minDistance: 0.01
speed: 100 speed: 100
sizeFactor: 4
brightnessFactor: 12
target: {fileID: 0} target: {fileID: 0}
audioSource: {fileID: 2877895139439227182}
centerTransform: {fileID: 6097717622075189454}
sphereRenderer: {fileID: 4939631329203768008}
--- !u!82 &2877895139439227182 --- !u!82 &2877895139439227182
AudioSource: AudioSource:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -1,19 +1,41 @@
using EscapeRoomEngine.VR.Runtime; using System;
using System.Linq;
using EscapeRoomEngine.VR.Runtime;
using NaughtyAttributes;
using UnityEngine; using UnityEngine;
namespace Station46.Environments.Intro_Sphere.Scripts namespace Station46.Environments.Intro_Sphere.Scripts
{ {
public class FollowSphere : MonoBehaviour public class FollowSphere : MonoBehaviour
{ {
public float minDistance = 0.001f; private const int AverageLength = 3;
public float speed = 200; private static readonly int FresnelPower = Shader.PropertyToID("_FresnelPower");
public float
minDistance = 0.001f,
speed = 200,
sizeFactor = 1,
brightnessFactor = 1;
[SerializeField] private Transform target; [SerializeField] private Transform target;
[BoxGroup("Internal")] [SerializeField] private AudioSource audioSource;
[BoxGroup("Internal")] [SerializeField] private Transform centerTransform;
[BoxGroup("Internal")] [SerializeField] private MeshRenderer sphereRenderer;
private float[] _audioSamples;
private float[] _samplesAverage = new float[AverageLength];
private int averageIndex;
private float _initialBrightness;
private Material _sphereMaterial;
private Rigidbody _rigidbody; private Rigidbody _rigidbody;
private void Awake() private void Awake()
{ {
var clip = audioSource.clip;
_audioSamples = new float[clip.samples*clip.channels];
clip.GetData(_audioSamples, 0);
_sphereMaterial = sphereRenderer.material;
_initialBrightness = _sphereMaterial.GetFloat(FresnelPower);
_rigidbody = GetComponent<Rigidbody>(); _rigidbody = GetComponent<Rigidbody>();
target = Player.Instance.sphereFollow; target = Player.Instance.sphereFollow;
} }
@@ -27,5 +49,21 @@ namespace Station46.Environments.Intro_Sphere.Scripts
_rigidbody.AddForce(speed * (followPosition - position)); _rigidbody.AddForce(speed * (followPosition - position));
} }
} }
private void Update()
{
if (audioSource.isPlaying)
{
_samplesAverage[averageIndex] = Mathf.Abs(_audioSamples[audioSource.timeSamples]);
averageIndex = (averageIndex + 1) % AverageLength;
var average = _samplesAverage.Average();
SetCenterSize(1 + sizeFactor * average);
SetSphereMaterialBrightness(_initialBrightness - brightnessFactor * average);
}
}
private void SetCenterSize(float size) => centerTransform.localScale = new Vector3(size, size, size);
private void SetSphereMaterialBrightness(float brightness) => _sphereMaterial.SetFloat(FresnelPower, brightness);
} }
} }