Tengo un script de Unity que reproducirá audio (paso de pie) mientras el reproductor está en movimiento. El guión está funcionando, pero hay un problema más, el audio parece demasiado tosco (y tal vez pueda dañar a mi altavoz, jeje) durante la transición entre reproducción y pausa.

Este es mi guion

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

public class PlayerController : MonoBehaviour {
    Rigidbody playerRigid;
    private Vector3 pindah;
    public AudioSource audioSource;
    public AudioClip audioClip;
    public float lowPitchRange = .95f;
    public float hiPitchRange = 1.05f;

    void Awake () {
        audioSource = GetComponent<AudioSource> ();
        audioSource.clip = audioClip;
        float randomPitch = Random.Range (lowPitchRange, hiPitchRange);
        audioSource.pitch = randomPitch;
    }

    // Use this for initialization
    void Start () {
        //mengambil komponen rigidbody player
        playerRigid = GetComponent<Rigidbody> ();
    }

    // Update is called once per frame
    void Update () {
        //untuk mendapatkan input dari virtual joystick button
        float h = CrossPlatformInputManager.GetAxisRaw ("Horizontal");
        float v = CrossPlatformInputManager.GetAxisRaw ("Vertical");

        if ((h != 0f || v != 0f) && !audioSource.isPlaying) {
            audioSource.Play ();
        } else {
            audioSource.Pause ();
        }
        //memindah posisi player sesuai input yang didapat
        pindah = new Vector3 (h, 0.0f, v);
        playerRigid.velocity = pindah;
    }
}
0
cahyowhy 15 nov. 2017 a las 11:14

2 respuestas

La mejor respuesta

Supongo que necesitas cambiar el código así:

if (h != 0f || v != 0f) {
     if (!audioSource.isPlaying) audioSource.Play ();
} else {
     audioSource.Pause ();
}
1
ZayedUpal 15 nov. 2017 a las 09:59

Si el problema es que la fuente de audio aparece cuando la pausas, tal vez deberías considerar atenuar el volumen con algo similar a esto (no me he probado, lo intentaré más tarde):

// fade/increase time in seconds
public float rateTime = 1; 

public FadeSound() { 
    //audioSource.Play ();
    StartCoroutine(_FadeSound); 
    }

public IncreaseSound() { 
    StartCoroutine(_IncreaseSound); 
}

IEnumerator _FadeSound() {
    float t = rateTime;

    while (t > 0) {
        yield return null;
        t-= Time.deltaTime;
        source.volume = t/rateTime;
    }
    yield break;
    //yield audioSource.Pause ();
}

IEnumerator _IncreaseSound() {
    float t = 0;

    while (t < 1) {
        yield return null;
        t+= Time.deltaTime;
        source.volume = t/rateTime;
    }
    yield break;
}

if ((h != 0f || v != 0f) && !audioSource.isPlaying) {
    IncreaseSound();
} else {
    FadeSound();
}
2
Ignacio Alorre 15 nov. 2017 a las 11:29