Чтобы добавить звук вам для начала нужно его подготовить в виде аудиофайла, лучше всего для этой цели использовать wav-файлы, а не mp3. В конце материала будет ссылка на файл navigate_36.wav, можно взять его для примера.
Итак, после того как со звуковыми файлами разобрались. Нужно добавить их в проект. В нашем случае нужно перенести один-единственный файл, просто перебросив его мышкой из папки в область вкладки Project среды разработки Unity3D. Предварительно, конечно, лучше всего создать отдельную папку Sounds.
Далее, таким же образом, нужно перенести этот звуковой файл на объект в игре. В нашем случае для этого подойдет объект игрока – тарелка. После переноса, будет создан компонент Audio Source, в нем нужно отключить пункт Play On Awake, так как нам не нужно, чтобы звук проигрывался в самом начале игры.
С подготовительной частью мы закончили, теперь откроем файл CompletePlayerController.cs. Объявим новую приватную переменную audioSource, чтобы далее в коде можно было к ней обращаться:
private AudioSource audioSource;
В методе Start() инициализируем объявленную ранее переменную:
audioSource = GetComponent();
Теперь эта переменная хранит ссылку на звуковой файл, который мы можем проиграть в нужный момент, а именно в момент сбора кристалла:
if (other.gameObject.CompareTag ("PickUp"))
{
audioSource.Play ();
…
Далее привожу полный текст файла CompletePlayerController.cs.
using UnityEngine;
using System.Collections;
//Adding this allows us to access members of the UI namespace including Text.
using UnityEngine.UI;
public class CompletePlayerController : MonoBehaviour {
public float speed; //Floating point variable to store the player's movement speed.
public Text countText; //Store a reference to the UI Text component which will display the number of pickups collected.
public Text winText; //Store a reference to the UI Text component which will display the 'You win' message.
private Rigidbody2D rb2d; //Store a reference to the Rigidbody2D component required to use 2D Physics.
private int count; //Integer to store the number of pickups collected so far.
public GameObject gameController;
private AudioSource audioSource;
// Use this for initialization
void Start()
{
audioSource = GetComponent();
//Get and store a reference to the Rigidbody2D component so that we can access it.
rb2d = GetComponent ();
//Initialize count to zero.
count = 0;
//Initialze winText to a blank string since we haven't won yet at beginning.
winText.text = "";
//Call our SetCountText function which will update the text with the current value for count.
SetCountText ();
}
//FixedUpdate is called at a fixed interval and is independent of frame rate. Put physics code here.
void FixedUpdate()
{
//Store the current horizontal input in the float moveHorizontal.
float moveHorizontal = Input.GetAxis ("Horizontal");
//Store the current vertical input in the float moveVertical.
float moveVertical = Input.GetAxis ("Vertical");
//Use the two store floats to create a new Vector2 variable movement.
Vector2 movement = new Vector2 (moveHorizontal, moveVertical);
//Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
rb2d.AddForce (movement * speed);
}
//OnTriggerEnter2D is called whenever this object overlaps with a trigger collider.
void OnTriggerEnter2D(Collider2D other)
{
//Check the provided Collider2D parameter other to see if it is tagged "PickUp", if it is...
if (other.gameObject.CompareTag ("PickUp"))
{
audioSource.Play ();
//... then set the other object we just collided with to inactive.
other.gameObject.SetActive(false);
//Add one to the current value of our count variable.
count = count + 1;
//Update the currently displayed count by calling the SetCountText function.
SetCountText ();
}
}
//This function updates the text displaying the number of objects we've collected and displays our victory message if we've collected all of them.
void SetCountText()
{
//Set the text property of our our countText object to "Count: " followed by the number stored in our count variable.
countText.text = "Всего собрано: " + count.ToString ();
//Check if we've collected all 12 pickups. If we have...
if (count >= 12) {
gameController.SendMessage("activateRestartButton", true);
//... then set the text property of our winText object to "You win!"
winText.text = "Вы выиграли!";
}
}
}
Перевод комментариев файла CompletePlayerController.cs смотрите в первой части.