This commit is contained in:
Daniel Tyomin
2024-08-20 03:30:14 +02:00
41 changed files with 12351 additions and 9792 deletions

View File

@@ -32,6 +32,14 @@ public class SlidingCrane : MonoBehaviour
public Transform cradleTransform;
public Rigidbody cradleRb;
public AudioSource longMotionAudio;
public AudioSource longMotionAudio2;
public float longMotionPitchMult = 1;
public AudioSource sideMotionAudio;
public float sideMotionPitchMult = 1;
public AudioSource heightMotionAudio;
public float heightMotionPitchMult = 1;
private void Start()
{
targetPoint = transform.position;
@@ -47,6 +55,11 @@ public class SlidingCrane : MonoBehaviour
heightMotion.AccelerateTo(0);
if (Input.GetKeyDown(KeyCode.F))
heightMotion.AccelerateTo(1);
longMotionAudio.pitch = yMotion.velocity * longMotionPitchMult;
longMotionAudio2.pitch = yMotion.velocity * (longMotionPitchMult + 0.05f);
sideMotionAudio.pitch = xMotion.velocity * sideMotionPitchMult;
heightMotionAudio.pitch = heightMotion.velocity * heightMotionPitchMult;
}
void FixedUpdate()

View File

@@ -0,0 +1,84 @@
using UnityEngine;
using System.Collections;
using UnityEngine.Audio;
namespace Nothke.Audio
{
public class CollisionSounds : MonoBehaviour
{
const float RELATIVE_VELOCITY_TRESHOLD = 0.1f;
// impulse based, currently unused:
//const float IMPULSE_VOLUME_MULT = 0.00001f;
//const float IMPULSE_THRESHOLD = 1;
public CollisionSoundsProfile profile;
public float volumeVelocityMult = 0.05f;
public float timeout = 0.05f;
public float pitchMult = 1;
float lastTime;
public bool preventDoubleSound;
public AudioMixerGroup mixerGroup;
#if UNITY_EDITOR
private void Start()
{
if (!profile)
Debug.LogError("No collision sounds profile assigned", this);
}
#endif
public void ResetTimeout()
{
lastTime = Time.time;
}
void OnCollisionEnter(Collision collision)
{
if (!enabled)
return;
// Prevent sound in the first second
float time = Time.time;
if (time < 1)
return;
if (timeout > 0)
{
if (time - lastTime < timeout)
return;
lastTime = time;
}
if (preventDoubleSound)
{
var colSound = collision.collider.GetComponent<CollisionSounds>();
if (colSound)
colSound.ResetTimeout();
}
//float impulse = (collision.impulse / Time.fixedDeltaTime).magnitude;
//Debug.Log("Impulse: " + impulse);
//if (impulse < IMPULSE_THRESHOLD) return;
var relVel = collision.relativeVelocity.magnitude;
if (relVel < RELATIVE_VELOCITY_TRESHOLD)
return;
Debug.Assert(profile, "No collision sounds profile assigned", this);
// TODO: Move parameters to AudioManager:
profile.clips.Play(collision.GetContact(0).point,
volume: relVel * volumeVelocityMult,
pitch: Random.Range(0.95f, 1.05f) * pitchMult,
minDistance: 10, mixerGroup: mixerGroup);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 075e36d3d3303934bac79dda1017c56c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Nothke.Audio
{
[CreateAssetMenu(menuName = "CollisionSoundsProfile", fileName = "CollisionSoundsProfile")]
public class CollisionSoundsProfile : ScriptableObject
{
public AudioClip[] clips;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f998237f81278234b950080600e80b74
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: