Ejemplo n.º 1
0
    /// <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]);
    }
Ejemplo n.º 3
0
 /// <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);
     }
 }
Ejemplo n.º 4
0
    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);
            }
        }
    }
Ejemplo n.º 5
0
 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);
     }
 }
Ejemplo n.º 6
0
    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]);
    }
Ejemplo n.º 7
0
    /// <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));
            }
        }
    }
Ejemplo n.º 8
0
    /// <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);
    }
Ejemplo n.º 9
0
    /// 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);
        }
    }