/// <summary> /// Step on Terrain /// </summary> /// <param name="footStepObject"></param> public void StepOnTerrain(FootStepObject footStepObject) { if (currentStep != null && currentStep == footStepObject.sender) { return; } currentStep = footStepObject.sender; if (terrainData) { surfaceIndex = GetMainTexture(footStepObject.sender.position); } //bool valid = (terrainData != null && terrainData.splatPrototypes != null && terrainData.splatPrototypes.Length > 0 //&& terrainData.splatPrototypes.Length <= surfaceIndex && terrainData.splatPrototypes[surfaceIndex].texture != null); var name = (terrainData != null && terrainData.splatPrototypes.Length > 0)? (terrainData.splatPrototypes[surfaceIndex]).texture.name:""; footStepObject.name = name; PlayFootFallSound(footStepObject); if (debugTextureName) { Debug.Log(name); } }
public void PlayRandomClip(FootStepObject footStepObject) { // If there are no clips to play return. if (audioClips == null || audioClips.Count == 0) { return; } // initialize variable if not already started if (randomSource == null) { randomSource = new FisherYatesRandom(); } // Find a random clip and play it. var audioObject = new GameObject("audioObject"); audioObject.transform.position = footStepObject.sender.position; var source = audioObject.AddComponent <AudioSurfaceControl>(); if (audioMixerGroup != null) { source.outputAudioMixerGroup = audioMixerGroup; } int index = randomSource.Next(audioClips.Count); if (particleObject) { var particle = Instantiate(particleObject, footStepObject.sender.position, footStepObject.sender.rotation) as GameObject; particle.SendMessage("StepMark", footStepObject.sender, SendMessageOptions.DontRequireReceiver); } source.PlayOneShot(audioClips[index]); }
/// <summary> /// Step on Mesh /// </summary> /// <param name="footStepObject"></param> public void StepOnMesh(FootStepObject footStepObject) { if (currentStep != null && currentStep == footStepObject.sender) { return; } currentStep = footStepObject.sender; PlayFootFallSound(footStepObject); if (debugTextureName) { Debug.Log(footStepObject.name); } }
void StepMark(FootStepObject footStep) { RaycastHit hit; if (Physics.Raycast(footStep.sender.transform.position + new Vector3(0, 0.1f, 0), -footStep.sender.up, out hit, 1f, stepLayer)) { if (stepMark) { var angle = Quaternion.FromToRotation(footStep.sender.up, hit.normal); var step = Instantiate(stepMark, hit.point, angle * footStep.sender.rotation) as GameObject; //step.transform.SetParent(footStep.ground.transform); Destroy(step, timeToDestroy); } } }
public void PlayFootFallSound(FootStepObject footStepObject) { for (int i = 0; i < customSurfaces.Count; i++) { if (customSurfaces[i] != null && ContainsTexture(footStepObject.name, customSurfaces[i])) { customSurfaces[i].PlayRandomClip(footStepObject); return; } } if (defaultSurface != null) { defaultSurface.PlayRandomClip(footStepObject); } }
public void PlayRandomClip(FootStepObject footStepObject) { // if there are no clips to play return. if (audioClips == null || audioClips.Count == 0) { return; } // initialize variable if not already started if (randomSource == null) { randomSource = new vFisherYatesRandom(); } // find a random clip and play it. GameObject audioObject = null; if (audioSource != null) { audioObject = Instantiate(audioSource.gameObject, footStepObject.sender.position, Quaternion.identity) as GameObject; } else { audioObject = new GameObject("audioObject"); audioObject.transform.position = footStepObject.sender.position; } var source = audioObject.AddComponent <vAudioSurfaceControl>(); if (audioMixerGroup != null) { source.outputAudioMixerGroup = audioMixerGroup; } int index = randomSource.Next(audioClips.Count); if (particleObject && footStepObject.ground && stepLayer.ContainsLayer(footStepObject.ground.gameObject.layer)) { Instantiate(particleObject, footStepObject.sender.position, footStepObject.sender.rotation); } if (useStepMark) { StepMark(footStepObject); } source.PlayOneShot(audioClips[index]); }
/// <summary> /// 발자국 on /// </summary> /// <param name="stepMark"></param> /// <param name="footStep"></param> /// <param name="stepLayer"></param> public void TriggerStepMarkPaticle(GameObject stepMark, FootStepObject footStep, LayerMask stepLayer) { RaycastHit hit; if (Physics.Raycast(footStep.sender.position + new Vector3(0, 0.1f, 0), -footStep.sender.up, out hit, 1f, stepLayer)) { var angle = Quaternion.FromToRotation(footStep.sender.up, hit.normal); if (stepMark != null) { objectPool.Register(stepMark, stepMark.transform.parent); var step = objectPool.GetInstance(); step.transform.position = hit.point; step.transform.rotation = angle * footStep.sender.rotation; StartCoroutine(objectPool.UnUseInsert(step, 3f)); } } }
/// <summary> /// 발걸음 소리 풀링 /// </summary> /// <param name="audioSource"></param> /// <param name="footStepObject"></param> /// <param name="audioMixerGroup"></param> public void TriggerStepSound(GameObject audioSource, FootStepObject footStepObject, AudioMixerGroup audioMixerGroup, List <AudioClip> audioClips) { GameObject audioObject = null; if (audioSource != null) { objectPool.Register(audioSource, footStepObject.sender); audioObject = objectPool.GetInstance(); audioObject.transform.position = footStepObject.sender.position; audioObject.transform.rotation = Quaternion.identity; } var source = audioObject.GetComponent <AudioSurfaceControl>(); if (audioMixerGroup != null) { source.outputAudioMixerGroup = audioMixerGroup; } int index = randomSource.Next(audioClips.Count); source.PlayOneShot(audioClips[index], objectPool); }
/// Step on Terrain public void StepOnTerrain(FootStepObject footStepObject) { if (currentStep != null && currentStep == footStepObject.sender) { return; } currentStep = footStepObject.sender; if (terrainData) { surfaceIndex = GetMainTexture(footStepObject.sender.position); } var name = terrainData != null ? terrainData.splatPrototypes[surfaceIndex].texture.name : ""; PlayFootFallSound(footStepObject); if (debugTextureName) { Debug.Log(name); } }