internal Attributes3D(FMOD.ATTRIBUTES_3D attributes) { Position = attributes.position.ToVector3(); Velocity = attributes.velocity.ToVector3(); ForwardVector = attributes.forward.ToVector3(); UpVector = attributes.up.ToVector3(); }
public static FMOD.ATTRIBUTES_3D To3DAttributes(this Transform transform) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.forward = transform.forward.ToFMODVector(); attributes.up = transform.up.ToFMODVector(); attributes.position = transform.position.ToFMODVector(); return(attributes); }
public static FMOD.ATTRIBUTES_3D To3DAttributes(this Vector3 pos) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.forward = ToFMODVector(Vector3.forward); attributes.up = ToFMODVector(Vector3.up); attributes.position = ToFMODVector(pos); return(attributes); }
public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody rigidbody = null) { FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes(); if (rigidbody) { attributes.velocity = rigidbody.velocity.ToFMODVector(); } return(attributes); }
public static void PreviewUpdatePosition(float distance, float orientation) { if (previewEventInstance != null) { // Listener at origin FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D(); pos.position.x = (float)Math.Sin(orientation) * distance; pos.position.y = (float)Math.Cos(orientation) * distance; pos.forward.x = 1.0f; pos.up.z = 1.0f; CheckResult(previewEventInstance.set3DAttributes(pos)); } }
static public ATTRIBUTES_3D to3DAttributes(GameObject go, Rigidbody rigidbody = null) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.forward = toFMODVector(go.transform.forward); attributes.up = toFMODVector(go.transform.up); attributes.position = toFMODVector(go.transform.position); if (rigidbody) { attributes.velocity = toFMODVector(rigidbody.velocity); } return(attributes); }
public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody2D rigidbody) { FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes(); if (rigidbody) { FMOD.VECTOR vel; vel.x = rigidbody.velocity.x; vel.y = rigidbody.velocity.y; vel.z = 0; attributes.velocity = vel; } return(attributes); }
public void Update(FMOD.ATTRIBUTES_3D attributes) { // Cull finished instances FMOD.Studio.PLAYBACK_STATE state; var finishedInstances = instances.FindAll((x) => { x.getPlaybackState(out state); return(state == FMOD.Studio.PLAYBACK_STATE.STOPPED); }); foreach (var instance in finishedInstances) { instance.release(); } instances.RemoveAll((x) => !x.isValid()); // Update 3D attributes foreach (var instance in instances) { instance.set3DAttributes(attributes); } }
public static FMOD.ATTRIBUTES_3D To3DAttributes(this Transform transform) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.forward = transform.forward.ToFMODVector(); attributes.up = transform.up.ToFMODVector(); attributes.position = transform.position.ToFMODVector(); return attributes; }
public static FMOD.ATTRIBUTES_3D To3DAttributes(this Vector3 pos) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.forward = ToFMODVector(Vector3.forward); attributes.up = ToFMODVector(Vector3.up); attributes.position = ToFMODVector(pos); return attributes; }
public static void PreviewUpdatePosition(float distance, float orientation) { if (previewEventInstance != null) { // Listener at origin FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D(); pos.position.x = (float)Math.Sin(orientation) * distance; pos.position.y = (float)Math.Cos(orientation) * distance; pos.forward.x = 1.0f; pos.up.z = 1.0f; CheckResult(previewEventInstance.set3DAttributes(pos)); } }
void Update() { if (studioSystem != null) { studioSystem.update(); bool foundListener = false; bool hasAllListeners = false; int numListeners = 0; for (int i = FMOD.CONSTANTS.MAX_LISTENERS - 1; i >= 0; i--) { if (!foundListener && HasListener[i]) { numListeners = i + 1; foundListener = true; hasAllListeners = true; } if (!HasListener[i] && foundListener) { hasAllListeners = false; } } if (foundListener) { studioSystem.setNumListeners(numListeners); } if (!hasAllListeners && !listenerWarningIssued) { listenerWarningIssued = true; UnityEngine.Debug.LogWarning("FMOD Studio Integration: Please add an 'FMOD Studio Listener' component to your a camera in the scene for correct 3D positioning of sounds"); } for (int i = 0; i < attachedInstances.Count; i++) { FMOD.Studio.PLAYBACK_STATE playbackState = FMOD.Studio.PLAYBACK_STATE.STOPPED; attachedInstances[i].instance.getPlaybackState(out playbackState); if (!attachedInstances[i].instance.isValid() || playbackState == FMOD.Studio.PLAYBACK_STATE.STOPPED || attachedInstances[i].transform == null // destroyed game object ) { attachedInstances.RemoveAt(i); i--; continue; } if (attachedInstances[i].rigidBody) { attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody)); } else { attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody2D)); } } #if UNITY_EDITOR MuteAllEvents(UnityEditor.EditorUtility.audioMasterMute); #endif #if UNITY_EDITOR // Catch any 3D events that are being played at the origin foreach (FMOD.Studio.EventDescription desc in cachedDescriptions.Values) { if (!desc.isValid()) { continue; } bool is3d; desc.is3D(out is3d); if (!is3d) { continue; } string path; desc.getPath(out path); int instanceCount; desc.getInstanceCount(out instanceCount); FMOD.Studio.EventInstance[] instances = new FMOD.Studio.EventInstance[instanceCount]; desc.getInstanceList(out instances); for (int i = 0; i < instances.Length; i++) { if (warnedInvalidInstances.ContainsKey(instances[i].getRaw())) { continue; } FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); instances[i].get3DAttributes(out attributes); if (attributes.position.x == 0 && attributes.position.y == 0 && attributes.position.z == 0) { warnedInvalidInstances.Add(instances[i].getRaw(), true); #if UNITY_5_X Debug.LogWarningFormat("FMOD Studio: Instance of Event {0} found playing at the origin. EventInstance.set3DAttributes() should be called on all 3D events", path); #else Debug.LogWarning(string.Format("FMOD Studio: Instance of Event {0} found playing at the origin. EventInstance.set3DAttributes() should be called on all 3D events", path)); #endif } } } #endif } }
public static FMOD.ATTRIBUTES_3D Make3DPosition(this Transform transform) { FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); attributes.position = transform.position.ToFMODVector(); return(attributes); }