Юніті 2Д гра платформер (урок для початківців)

Як зробити стіну:

Як збирати та підраховувати монети:

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine;

public class CoinController : MonoBehaviour

//звук збирання монети public AudioClip CoinSound; // змінна кількість зібраних монет public int coin;

//запуститься якщо collider2D потрапив у тригер void OnTriggerEnter2D ( Collider2D other) //перевірка, чи має об'єкт, що потрапив, тег Coin if (other.tag == "Coin" ) //збільшити лічильник монет coin = coin + 1; //програти звук підняття монети на позиції щура AudioSource .PlayClipAtPoint (CoinSound, transform.position); //видалити монету зі сцени Destroy (other.gameObject); > > >

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine; //ця бібліотека потрібна для роботи з інтерфейсом using UnityEngine.UI;

public class CoinController : MonoBehaviour

//запуститься один раз при запуску скрипту void Start() //робимо лінк на текстовий компонент, який знаходиться на текстовому об'єкті textComponent = TextObject.GetComponent Text > (); >

//запуститься якщо collider2D потрапив у тригер void OnTriggerEnter2D ( Collider2D other) //перевірка, чи має об'єкт тег Coin if (other.tag == "Coin" ) //збільшити змінну підрахунку монет coin = coin + 1; //записати в текст результат рахунку монет, перетворений на текстову змінну textComponent.text = coin.ToString(); //програти звук підняття монети на позиції щура AudioSource .PlayClipAtPoint (CoinSound, transform.position); //видалити монету зі сцени Destroy (other.gameObject); > > >

Як зробити яму:

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine; //це бібліотека для роботи зі сценами using UnityEngine.SceneManagement;

Public class DeadEndController : MonoBehaviour

//запуститься якщо 2D collider потрапив у тригер void OnTriggerEnter2D ( Collider2D other) //перевірка, чи має об'єкт тег Player if (other.tag == "Player" ) //подивитися назву поточної сцени та завантажити її (reload) SceneManager .LoadScene ( SceneManager .GetActiveScene().name); > > >

Як зробити простого ворога:

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine; //Бібліотека для керування сценами using UnityEngine.SceneManagement;

Public class MushroomController : MonoBehaviour

//як далеко гриб може відійти від початкової точки public float distanceToRun; //швидкість руху public float speed; //напрямок погляду гриба public bool isLookingLeft = true; //стартова позиція Vector3 startPos; //лінк на компонент Rigidbody2D Rigidbody2D rb;

//виконається 1 раз при старті гри void Start () //робимо лінк на компонент Rigidbody2D rb = GetComponent Rigidbody2D > (); // запам'ятовуємо стартову точку гриба startPos = transform.position; //порівнюватимемо квадрат вектора відстані з квадратом відстані //так як вилучення кореня повільний процес distanceToRun = distanceToRun * distanceToRun; >

//виконується на кожному фіксованому інтервалі void FixedUpdate () //перевірити, чи дивиться гриб вліво if (isLookingLeft) //порахувати вектор напрямки від стартової точки до гриба Vector2 dist = transform.position - startPos; //перевірити, що гриб ліворуч від стартової точки //і відстань між грибом і стартовою точкою більше дозволеного видалення if (transform.position.x distanceToRun) //викликати функцію повороту гриба TurnTheMushroom (); //почати рух праворуч rb.velocity = new Vector2 (speed, rb.velocity.y); //якщо перевірка була негативною > else // продовжити рух вліво rb.velocity = new Vector2 (-speed, rb.velocity.y); > > //перевірити, що гриб дивиться вправо if (!isLookingLeft) //порахувати вектор напрямки від стартової точки до гриба Vector2 dist = transform.position - startPos; //перевірити, що гриб праворуч від стартової точки ///і відстань між грибом і стартовою точкою більше дозволеного видалення if (transform.position.x > startPos.x &&dist. sqrMagnitude distanceToRun) //викликати функцію повороту гриба TurnTheMushroom (); //почати рух ліворуч rb.velocity = new Vector2 (-speed, rb.velocity.y); //якщо перевірка була негативною > else // продовжити рух праворуч rb.velocity = new Vector2 (speed, rb.velocity.y); > > > //функція повороту гриба void TurnTheMushroom () //інвертувати (змінити на протилежний) покажчик напряму погляду isLookingLeft = !isLookingLeft; //повернути гриб transform.localScale = новий Vector3 (transform.localScale.x * -1 , transform.localScale.y, transform.localScale.z); >

//запуститься, якщо колайдер торкнувся іншого колайдера void OnCollisionEnter2D ( Collision2D other) //перевірити, що у колайдера тег Player if (other.coll >"Player" ) //подивитися ім'я завантаженої сцени і завантажити таку сцену (reload) SceneManager .LoadScene ( SceneManager .GetActiveScene().name); > >

//запуститься, якщо інший колайдер потрапив у тригер void OnTriggerEnter2D ( Collider2D other) //перевірити, що у колайдера тег Player if (other.tag == "Player" ) //видалити гриб Destroy (gameObject); > > >

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine;

Public class ExplosionsDestroyer : MonoBehaviour

//як довго вибух буде у сцені public float timeToDestroy;

//виконається один раз при старті скрипту void Start() //видалити вибух зі сцени Destroy (gameObject, timeToDestroy); > >

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine; //Бібліотека для керування сценами using UnityEngine.SceneManagement;

Public class MushroomController : MonoBehaviour

//Префаб вибуху public GameObject Explosion; //звук вибуху public AudioClip Boom; //як далеко гриб може відійти від початкової точки public float distanceToRun; //швидкість руху гриба public float speed; //напрямок погляду гриба public bool isLookingLeft = true; //стартова позиція гриба Vector3 startPos; //лінк на компонент Rigidbody2D Rigidbody2D rb;

//виконається один раз при старті гриба void Start() //робимо лінк на компонент Rigidbody2D rb = GetComponent Rigidbody2D > (); //запам'ятовуємо стартову позицію гриба startPos = transform.position; //порівнюватимемо квадрат вектора відстані з квадратом відстані //так як вилучення кореня повільний процес distanceToRun = distanceToRun * distanceToRun; >

//виконується на кожному фіксованому інтервалі void FixedUpdate () //перевірити, що гриб дивиться наліво if (isLookingLeft) //порахувати векторнапрямки від стартової точки до гриба Vector2 dist=transform.position - startPos; //перевірити, що гриб ліворуч від стартової точки //і відстань між грибом і стартовою точкою більше дозволеного видалення if (transform.position.x distanceToRun) //викликати функцію повороту TurnTheMushroom ( ); //почати рух праворуч rb.velocity = new Vector2 (speed, rb.velocity.y); //якщо перевірка була негативною > else // продовжити рух ліворуч rb.velocity = new Vector2 (-speed, rb.velocity.y); > > //перевірити, що гриб дивиться праворуч if (!isLookingLeft) //порахувати вектор напрямки від стартової точки до гриба Vector2 dist = transform.position - startPos; //перевірити, що гриб праворуч від стартової точки //і відстань між грибом і стартовою точкою більше дозволеного видалення if (transform.position.x > startPos.x && dist.sqrMagnitude >distanceToRun) //викликати функцію повороту TurnTheMushroom(); //почати рух ліворуч rb.velocity = new Vector2 (-speed, rb.velocity.y); //якщо перевірка була негативною > else // продовжити рух праворуч rb.velocity = new Vector2 (speed, rb.velocity.y); > > > //функція повороту гриба void TurnTheMushroom () //змінити покажчик напрямку погляду на протилежний isLookingLeft = !isLookingLeft; //повернути гриб transform.localScale = новий Vector3 (transform.localScale.x * -1 , transform.localScale.y, transform.localScale.z); >

///запуститься, якщо колайдер торкнувся іншого колайдера void OnCollisionEnter2D ( Collision2D other) //перевірити, що у колайдера тег Player if (other.coll >"Player" ) //подивитися ім'я завантаженої сцени і завантажити таку сцену (reload) SceneManager.LoadScene ( SceneManager .GetActiveScene().name); > >

//запуститься, якщо інший колайдер потрапив у тригер void OnTriggerEnter2D ( Collider2D other) //перевірити, що у колайдера тег Player if (other.tag == "Player" ) //спавн вибуху Instantiate (Explosion, transform.position, Quaternion .identity); //програти звук вибуху AudioSource .PlayClipAtPoint (Boom, transform.position); //видалити гриб Destroy (gameObject); > > >

Сприйняття звуку:

Як зробити платформу, що рухається:

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine;

Public class PlatformMoving: MonoBehaviour

//швидкість руху платформи public float speed; //позиція, де платформа має повернути назад public Transform endPoint; //позиція початку руху Vector3 startPoint; //посилальна змінна для компонента Rigidbody2D Rigidbody2D rb; //швидкість платформи в даний момент float currentSpeed;

//виконається при запуску скрипту void Start() //запам'ятає стартову точку платформи startPoint = transform.position; //зробити посилання на Rigidbody2D rb = GetComponent Rigidbody2D > (); //початковий напрямок руху currentSpeed ​​= speed; >

//виконаються через інтервали void FixedUpdate () //перевірка, чи платформа знаходиться вище кінцевої точки if (transform.position.y > endPoint.position.y) //швидкість для вектора руху вниз currentSpeed ​​= -speed; //перевірка, чи знаходиться платформа нижче початкової точки if (transform.position.y //швидкість для вектора руху вгору currentSpeed ​​= speed; //направити платформу по вектору руху >rb.velocity = новий Vector3 ( 0 , currentSpeed, 0 ); > >

Як додати фізичні об'єкти:

Кінець рівня:

Як зробити рухомий фон з ефектом паралакс:

використовуючи System.Collections; using System.Collections.Generic; using UnityEngine;

Public class Parallax : MonoBehaviour

//посилальна змінна на гравця GameObject player; //позиція гравця у попередньому кадрі //і різниця в позиції між кадрами Vector3 lastPos, offset; //швидкість руху фону public float speed;

//виконається один раз при запуску скрипту void Start() //робимо лінк на гравця player = GameObject .FindWithTag ("Player"); //запам'ятовуємо його позицію lastPos = player.transform.position; >

//виконується кожен кадр void Update () //порахувати різницю в позиціях між кадрами offset = player.transform.position - lastPos; //перерахувати різницю в залежності від швидкості і пересунути фон за отриманим вектором //Time.deltaTime коригування для різного фпс transform.Translate (offset * speed * Time .deltaTime); //перезаписати позицію в поточному кадрі lastPos = player.transform.position; > >

Як додати фонову музику:

Тепер просте. Імпортуйте аудіо файл Music. Виберіть Rat у ієрархії. Перетягніть Music на Rat ієрархії (або додайте Audio Source і помістіть Music у поле AudioClip field). Увімкніть Loop. Перевірте сцену.