Як створити гру на тему Flappy Bird в Unity
У цьому підручнику Unity ми розповімо про процес створення гри Flappy Bird. Ця класична мобільна гра полягає в тому, щоб провести пташку крізь низку труб, постукуючи, щоб вона махала й уникала перешкод. Давайте зануримося в покрокові інструкції.
Крок 1: Налаштуйте свій проект Unity
- Якщо ви ще цього не зробили, відкрийте Unity і створіть новий 2D-проект.
- Налаштуйте параметри проекту, зокрема роздільну здатність і націлювання на платформу.
Крок 2. Імпортуйте ігрові ресурси
- Знайдіть або створіть ресурси для пташки, труб і фону.
- Імпортуйте ці ресурси у свій проект Unity.
Крок 3: Створіть Flappy Bird
- Додайте 2D-спрайт для птаха.
- Застосуйте прості елементи керування натисканням, щоб змусити пташку розмахувати.
- Застосуйте силу тяжіння, щоб птах впала природним чином.
Крок 4: Спроектуйте труби
- Створіть трубу prefab за допомогою 2D-спрайтів.
- Налаштуйте систему відродження, щоб генерувати канали через регулярні проміжки часу.
Крок 5: Впровадьте логіку гри
- Додайте систему підрахунку балів за успішне проходження труб.
- Застосуйте виявлення зіткнень, щоб завершити гру, коли птах вдариться об труби або землю.
Перевірте сценарій нижче, він інкапсулює частини 3, 4 і 5.
'FlappyBird.cs'
using UnityEngine;
using System.Collections.Generic;
public class FlappyBird : MonoBehaviour
{
public float jumpForce = 5f;
public Transform pipeSpawnPoint;
public GameObject pipePrefab;
public float pipeSpawnInterval = 2f;
public float pipeSpeed = 2f;
private Rigidbody2D rb;
private Transform mainCameraTransform;
private List<GameObject> pipes = new List<GameObject>();
void Start()
{
rb = GetComponent<Rigidbody2D>();
mainCameraTransform = Camera.main.transform;
// Start spawning pipes
InvokeRepeating("SpawnPipe", 2f, pipeSpawnInterval);
}
void Update()
{
// Flap when the screen is tapped or clicked
if (Input.GetMouseButtonDown(0))
{
Flap();
}
// Move towards the pipes
transform.Translate(Vector3.right * pipeSpeed * Time.deltaTime);
// Move and manage spawned pipes
foreach (GameObject pipe in pipes)
{
if (pipe != null)
{
pipe.transform.Translate(Vector3.left * pipeSpeed * Time.deltaTime);
// End the game when colliding with pipes or ground
if (pipe.CompareTag("Pipe") && IsCollidingWithPipe(pipe))
{
EndGame();
return; // Exit the loop and update immediately
}
if (pipe.CompareTag("Ground") && IsCollidingWithGround(pipe))
{
EndGame();
return; // Exit the loop and update immediately
}
// Remove pipes that are out of camera view
if (pipe.transform.position.x < mainCameraTransform.position.x - 10f)
{
Destroy(pipe);
pipes.Remove(pipe);
break; // Exit the loop to avoid modifying a collection while iterating
}
}
}
}
void Flap()
{
// Apply force to make the bird jump
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
void SpawnPipe()
{
GameObject newPipe = Instantiate(pipePrefab, pipeSpawnPoint.position, Quaternion.identity);
pipes.Add(newPipe);
}
bool IsCollidingWithPipe(GameObject pipe)
{
Collider2D pipeCollider = pipe.GetComponent<Collider2D>();
return pipeCollider != null && pipeCollider.bounds.Intersects(GetComponent<Collider2D>().bounds);
}
bool IsCollidingWithGround(GameObject ground)
{
Collider2D groundCollider = ground.GetComponent<Collider2D>();
return groundCollider != null && groundCollider.bounds.Intersects(GetComponent<Collider2D>().bounds);
}
void EndGame()
{
// Implement game over logic (e.g., display score, restart menu)
Debug.Log("Game Over!");
}
}
Наданий сценарій Unity представляє спрощену гру Flappy Bird, у якій пташка, керована гравцем, переміщується в середовищі прокручування. Птах може стрибати за вказівкою користувача, і гра перевіряє зіткнення як з трубами, так і з землею, запускаючи гру в разі виявлення. Труби динамічно з’являються через рівні проміжки часу та рухаються до гравця. Сценарій містить логіку для видалення каналів, які виходять за межі огляду камери, для оптимізації продуктивності. Функція 'EndGame' викликається під час зіткнення, і її можна розширити для обробки різних сценаріїв завершення гри, таких як відображення рахунку або перезапуск гри. Мета коду – запропонувати базову реалізацію механіки Flappy Bird у середовищі Unity.
Крок 6: Інтерфейс і меню
- Створіть інтерфейс користувача для відображення оцінки.
- Створіть меню для запуску та перезапуску гри.
Крок 7: Тонка настройка ігрового процесу
- Налаштуйте гру фізику та швидкість для збалансованого та приємного досвіду.
- Тестуйте та повторюйте свою гру, щоб забезпечити плавний і складний ігровий процес.
Крок 8: Додайте звукові ефекти
- Імпортуйте або створюйте звукові ефекти для махів, очок і зіткнень.
- Інтегруйте ці звукові ефекти у свою гру.
Приклад модифікацій для додавання звукових ефектів у 'FlappyBird.cs':
using UnityEngine;
using System.Collections.Generic;
public class FlappyBird : MonoBehaviour
{
// Existing variables...
public AudioClip jumpSound;
public AudioClip collisionSound;
public AudioClip gameOverSound;
private AudioSource audioSource;
void Start()
{
// Existing Start() code...
// Add AudioSource component and reference
audioSource = gameObject.AddComponent<AudioSource>();
}
void Flap()
{
// Apply force to make the bird jump
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
// Play jump sound
audioSource.PlayOneShot(jumpSound);
}
void EndGame()
{
// Play game over sound
audioSource.PlayOneShot(gameOverSound);
// Implement other game over logic...
}
// Existing code...
}
Крок 9: Створення та розгортання
- Створіть свою гру для цільової платформи (iOS, Android тощо).
- Розгорніть і протестуйте на вибраному пристрої чи емуляторі.
Висновок
Цей підручник охоплює основні кроки, щоб відтворити цю класичну гру Flappy Bird у Unity. Експериментуйте з додатковими функціями та вдосконаленнями, щоб зробити гру власною. Щасливого розвитку гри!