Простая 2D-игра на Unity 5. Часть 5

Чтобы добавить звук вам для начала нужно его подготовить в виде аудиофайла, лучше всего для этой цели использовать 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 смотрите в первой части