본문 바로가기

유니티 3D기본(Roll A Ball)

17. 오디오 넣고 재생하기

유니티 상단 메뉴 -> Window -> Asset Store에서 에셋스토어에 접속할 수 있습니다. 물론 그냥 구글에 쳐도 나옵니다.

 

무료 에셋을 체크하면 편하게 볼 수 있습니다. 아래 Casual Game Sounds 에셋을 클릭하고 다운로드 합니다.

 

아까의 상단메뉴 Window -> Package Manager에서 다운받은 에셋들을 관리할 수 있습니다. Project에 쓸 에셋을 우측하단에 Import를 눌러 불러와줍니다.

 

그럼 이렇게 Project에 내가 Import한 에셋 폴더가 생깁니다.

 

이제 오디오를 재생할 오브젝트에 오디오 컴포넌트를 넣어줍니다.

저는 PlayerBall에 오디오 컴포넌트를 넣어주겠습니다.

 

Project에 있는 오디오 파일 중 하나를 AudioClip에 드래그 앤 드랍하거나, 우측 동그라미를 눌러 소스를 선택합니다.

Mute : 음소거

Play On Awake : 오브젝트 생성 시 바로 재생

Loop : 반복 여부

Volume : 볼륨

 

Play On Awake는 쓸 거 아니니까 꺼줍니다.

 

이제 소스코드에 오디오 컴포넌트를 가져오고, play() 함수로 오디오를 재생시키기만 하면 됩니다.

* 주의 : 오디오를 재생시키고, setAtive(false)로 오브젝트를 비활성화 시키면 소리가 안나옵니다. 오브젝트가 비활성화 되었기 때문입니다.

 

PlayBall 소스코드

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

public class PlayerBall : MonoBehaviour
{
    Rigidbody rigid;
    AudioSource audio; // 오디오 컴포넌트 변수 선언
    public float jumpPower;
    bool isJumping;
    public int itemCount;

    void Awake()
    {
        rigid = GetComponent<Rigidbody>();
        audio = GetComponent<AudioSource>(); //초기화
        jumpPower = 30;
        isJumping = false;
        itemCount = 0;
    }

    void FixedUpdate()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");
        Vector3 move = new Vector3(x, 0, z);

        rigid.AddForce(move, ForceMode.Impulse);

    }

    void Update()
    {
        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            isJumping = true;
            rigid.AddForce(new Vector3(0, jumpPower, 0), ForceMode.Impulse);
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Floor")
        {
            isJumping = false;
        }
    }
    void OnTriggerEnter(Collider other) //Item 스크립트에 있던 onTrigger 함수를 PlayerBall 스크립트로 옮겼습니다.
    {
        if (other.tag == "Item")
        {
            itemCount++;
            audio.Play(); //재생
            other.gameObject.SetActive(false);
        }

    }
}

 

Item 소스코드

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

public class Item : MonoBehaviour
{
    public float rotateSpeed;

    void Update() //Item 스크립트에서는 회전만 담당
    {
        transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime, Space.World);
    }


}

 

결과