Unity步行声音(如果和按钮错误)

时间:2014-11-13 16:27:40

标签: c# if-statement unity3d keydown

基本上,我需要一个脚本来播放行走声音,而我的播放器在行走时会发出行走声音。由于我的播放器设置方式,需要使用输入和键...

我已经制作了这个基本脚本,但它并没有很好地工作。从跑步过渡 - >走路 - >停止并运行 - >停止等等不能始终如一地工作。另一个问题是按下移位而静止不动也会播放声音。我已经尝试过SHIFT&& W || W&& SHIFT,它只是不起作用。

任何帮助都将非常感谢!!

我的Foley.cs脚本:

using UnityEngine;
using System.Collections;

public class Foley : MonoBehaviour {

public AudioClip Footsteps;

public AudioClip RunningSound;

// Update is called once per frame
void Update () {
    if (Input.GetKeyDown(KeyCode.LeftShift) && !audio.isPlaying)
    {
        audio.clip = RunningSound;
        audio.loop = true;
        audio.Play();
    } else if (Input.GetKey(KeyCode.W) && !audio.isPlaying && !Input.GetKey(KeyCode.LeftShift)) {
        audio.clip = Footsteps;
        audio.loop = true;
        audio.Play();           
    }

    if (Input.GetKeyUp(KeyCode.W) && audio.isPlaying)
    {
        audio.Stop();
    }

    if (Input.GetKeyUp(KeyCode.LeftShift) && audio.isPlaying)
    {
        if (Input.GetKey(KeyCode.W)) 
        {
            audio.clip = Footsteps;
            audio.loop = true;
            audio.Play();           
        } else {
            audio.Stop();
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

这个脚本应该基本上做你想要的。在'w'播放步行音,在w + shift上播放跑声。

 #pragma strict

 var walk : AudioClip;
 var run : AudioClip;

 var isWalking : boolean = false;
 var isRunning : boolean = false;


 function Update() 
 {
     GetState();
     PlayAudio();
 }


 function GetState() 
 {
     if ( Input.GetKey(KeyCode.W))
     {
         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;
 }
 }


 function PlayAudio() 
 {
 if ( isWalking )
 {
     if ( audio.clip != walk )
     {
         audio.Stop();
         audio.clip = walk;
     }

     if ( !audio.isPlaying )
     {
         audio.Play();
     }
 }
 else if ( isRunning )
 {
     if ( audio.clip != run )
     {
         audio.Stop();
         audio.clip = run;
     }

     if ( !audio.isPlaying )
     {
         audio.Play();
     }
 }
 else
 {
     audio.Stop();
 }
 }