2017-12-14 6 views
3

Unity에서 오디오 클립을 재생할 때 문제가 있습니다.유니티 불일치 된 오디오

플레이어가 감지되었지만 사운드가 왜곡되면 내 상어가 "물린 소리"를 내고 싶습니다.

나머지 코드는 의도 한대로 실행됩니다.

코드 검토 및 제안을 해주실 수 있습니까?

(오디오 소스를 재생으로 호출 할 때) 내가 잘못했을 가능성은 무엇입니까? 내가 볼

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Shark2Controller : MonoBehaviour { 

    public Transform leftPoint; 
    public Transform rightPoint; 

    public float startSpeed; 
    public float swimSpeed; 
    private Rigidbody2D myRigidBody; 
    public bool swimmingRight; 


    public float superSpeed; 
    public Transform puntoA; 
    public Transform puntoB; 
    public LayerMask whatIsPlayer; 
    public bool playerDetected; 

    private Animator myAnim; 

    public AudioSource bite; 

    // Use this for initialization 
    void Start() 
    { 
     myRigidBody = GetComponent<Rigidbody2D>(); 
     myAnim = GetComponent<Animator>(); 
     swimSpeed = startSpeed; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     playerDetected = Physics2D.OverlapArea (puntoA.position, puntoB.position, whatIsPlayer); 
     myAnim.SetBool ("Player Detected", playerDetected); 

     if (playerDetected) 
     { 
      swimSpeed = superSpeed; 
      bite.Play(); 
     } 


     if (swimmingRight && transform.position.x > rightPoint.position.x) 
     { 
      swimmingRight = false; 
     } 

     if (!swimmingRight && transform.position.x < leftPoint.position.x) 
     { 
      swimmingRight = true; 
     } 



     if (swimmingRight) 
     { 
      myRigidBody.velocity = new Vector3 (swimSpeed, myRigidBody.velocity.y, 0f); 
      transform.localScale = new Vector3 (1f, 1f, 1f); 
     } 
     else 
     { 
      myRigidBody.velocity = new Vector3 (-swimSpeed, myRigidBody.velocity.y, 0f); 
      transform.localScale = new Vector3 (-1f, 1f, 1f); 
     } 
    } 

    public void ResetShark2Speed() 
    { 
     swimSpeed = startSpeed; 
    } 
} 
+0

_ "소리가 왜곡됩니다."_ 어떻게? 볼륨 레벨 왜곡입니까? 또한 'bite.Play();'가 모든 프레임 업데이트를 트리거해야합니까? FPS가 60이라면, 1 초마다 60 회씩 '물기'를 시작하길 원하십니까? 그것은 좋은 소리가 안 들려요, 나는 (가능한) 윙윙 거리는/말더듬는 잡음을 기대합니다 ... 어쩌면 그것이 왜 왜곡이라고 부릅니까? –

+0

맞습니다. 윙윙 거리는 소리였습니다. 귀하의 설명에 진심으로 감사드립니다. 업데이트() – Rub

답변

1

하나의 문제는 당신이 (앱의 프레임 속도 기준) 모든 화면 갱신의 사운드를 다시 연주하는 것입니다. 루프를 반복 할 것인지 (반복되는 지침을 보려면 void Update 함수에 들어 있기 때문에) 원하는지 확실하지 않거나 검색 당 한 번만 재생되기를 원할 것입니다.

유니티가 사운드가 재생되거나 끝났을 때를 감지 할 수 있다면 이것을 사용하여 문제를 해결할 수 있습니다.

루핑 논리는 다음과 같습니다 소리가 "재생"모드에있을 경우

각 프레임 업데이트에
  • 확인합니다.
  • 아니요 ... 소리가 "종료되었습니다"라고 가정하면 이제 bite.Play();을 할 수 있습니다.
  • Else-If Yes ... 소리가 계속됩니다 (어쩌면 미래의 프레임 검사에서 "종료"될 것입니다).

의사 코드 예제 : 한 번 당 검출

if (playerDetected == true) 
{ 
    swimSpeed = superSpeed; 

    if(bite.isPlaying == true) 
    { 
     //# Do nothing or whatever you need 
    } 
    else 
    { 
     //# Asssume it's not playing (eg: stopped, ended, not started, etc) 
     bite.Play(); 
    } 
} 

: 재설정 될 때까지

public bool detect_snd_Played; 

detect_Snd_Played = false; //# Not yet played since no "detect" 

//# Update is called once per frame 
void Update() 
{ 
    if (playerDetected == true) { swimSpeed = superSpeed; } 

    if (detect_Snd_Played == false) 
    { 
     bite.Play(); 
     detect_Snd_Played = true; //# Stops future playback until you reset to false 
    } 
} 

이 줄 detect_Snd_Played = true; 여러 플레이 백을 중지해야합니다. 플레이어가 상어에 의해 "탐지되지 않음"상태가되어 다음 번 새로운 "탐지"프로세스를 위해 재설정 할 수있는 경우입니다 ...

+0

Wao에서 오디오 소스를 사용하는 것에 대해 명확하지 않았습니다. 빠른 응답과 믿을 수없는 설명에 대해 감사드립니다. 플레이어가 감지되었을 때 사운드 효과를 재생하기를 원하므로 두 번째 코드를 사용합니다. 나는 유니티에 익숙하지 않고, 오디오 클립에 관한이 이슈는 내 머리를 부러 뜨리며, 이것은 나에게 매우 유용 할 것이다. : Gracias amigo! – Rub

+0

플레이어가 감지되는 동안 사운드가 반복되기를 원하기 때문에 코드의 첫 번째 부분을 사용하여 완벽하게 작동합니다. 다시 한 번 감사드립니다! – Rub