- Home /
 
How to add Elements? Multiple ones!????? Help PLease
Okay so i have an footsteps script that works but for walking it only plays the same footstep sound because i cant change the size and add different audio clips:

Where it says Walk footsteps, that is the only clip i can use... i want to be able to add different sounds. Here is the script i am using:
 #pragma strict
 @script RequireComponent( AudioSource )
  
 var walk : AudioClip; // fill this array with the sounds at the Inspector
 var run : AudioClip;
  
 var walkAudioSpeed : float = 0.4;
 var runAudioSpeed : float = 0.2;
  
 private var walkAudioTimer : float = 0.0;
 private var runAudioTimer : float = 0.0;
  
 var isWalking : boolean = false;
 var isRunning : boolean = false;
  
 var walkSpeed: float = 7; // regular speed
 var runSpeed: float = 20; // run speed
  
 private var chCtrl: CharacterController;
 private var chMotor: CharacterMotor;
  
 function Start()
 {
     chCtrl = GetComponent(CharacterController);
     chMotor = GetComponent(CharacterMotor);
 }
 
 function Update()
 {
     SetSpeed();
  
     if ( chCtrl.isGrounded )
     {
         PlayFootsteps();
     }
     else
     {
         walkAudioTimer = 0.0;
         runAudioTimer = 0.0;
         audio.pitch = 0.9 + 0.2*Random.value; // randomize pitch in the range 1 +/- 0.1 
     }
 }
  
 function SetSpeed()
 {
     var speed = walkSpeed;
  
     if ( chCtrl.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift") )
     {
         speed = runSpeed;
     }
  
     chMotor.movement.maxForwardSpeed = speed;
 }
  
 function PlayFootsteps() 
 {
     if ( Input.GetAxis( "Horizontal" ) || Input.GetAxis( "Vertical" ) )
     {
        if ( Input.GetKey( "left shift" ) || Input.GetKey( "right shift" ) )
        {
          // Running
          isWalking = false;
          isRunning = true;
        }
        else
        {
          // Walking
          isWalking = true;
          isRunning = false;
        }
     }
     else
     {
        // Stopped
        isWalking = false;
        isRunning = false;
     }
  
     // Play Audio
     if ( isWalking )
     {
        if ( audio.clip != walk )
        {
          audio.Stop();
          audio.clip = walk;
        }
  
        //if ( !audio.isPlaying )
        if ( walkAudioTimer > walkAudioSpeed )
        {
          audio.Stop();
          audio.Play();
          walkAudioTimer = 0.0;
        }
     }
     else if ( isRunning )
     {
        if ( audio.clip != run )
        {
          audio.Stop();
          audio.clip = run;
        }
  
        //if ( !audio.isPlaying )
        if ( runAudioTimer > runAudioSpeed )
        {
          audio.Stop();
          audio.Play();
          runAudioTimer = 0.0;
        }
     }
     else
     {
        audio.Stop();
     }
  
     // increment timers
     walkAudioTimer += Time.deltaTime;
     runAudioTimer += Time.deltaTime;    
 }
 
              Answer by MikeNewall · Feb 23, 2013 at 10:28 PM
Use an array to hold all of your clips:
 var footsteps : AudioClip[];
 
               You can add elements to it in the inspector. Then when you want to play a footstep you generate a random number between 0 and the length of your array and you can play a random footstep at that random index.
when i add [] it gives me this error: Assets/Standard Assets/Character Controllers/Sources/Scripts/FootSteps.js(86,23): BCE0022: Cannot convert 'UnityEngine.AudioClip[]' to 'UnityEngine.AudioClip'.
line 86:
 audio.clip = walk;
 
                  You need to give it an index to tell it which of the clips you want to play:
 audio.clip = walk[0]; // replace walk with whatever you called your array
 
                  0 would be the first element. You can put a random number in there between 0 and however many footsteps you have using Random.Range
Nice script, looks familiar ;)
I do like the addition of the pitch variation. Now regarding this comment, think about it There is an array of sounds, and you want to pick a sound .... replace :
 audio.clip = walk;
 
                  with
 audio.clip = walk[ Random.Range( 0, walk.Length - 1 ) ];
 
                  yeah?
Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Help with walking script 0 Answers
Changing the audio on key press! Help 3 Answers
PLEASE Help me with this Audio Issue 1 Answer
Audio on Collision code doesn't work? 2 Answers