Czym byłaby gra bez mechanizmów zbieractwa i farmienia?! W dzisiejszym artykule pokażę Ci, jak zrealizować zbieranie przedmiotów w Unity! Przykładem będzie króliczek poszukujący losowo pojawiających się marchewek. 🙂
Usuwamy drzewa
W poprzednim artykule dowiedziałeś się jak dodać teren i drzewa do projektu. Dziś spróbujemy dodać marchewkę, którą królik będzie mógł zbierać. Po zebraniu jednej, pojawi się kolejna w losowym miejscu.
Na początek oczyśćmy teren i usuńmy drzewa, które ostatnio dodaliśmy. Zrobisz to przechodząc do zakładki drzew i klikając kombinację LPM + Shift.
Pobranie obiektu z asset store
Jeżeli posiadasz już przygotowany teren, kolejnym krokiem jest pobranie ze sklepu obiektu marchewki, którą królik będzie zbierał. Przejdź zatem do sklepu i w wyszukiwarce wpisz: Cartoon Farm Crops (jest to darmowy asset ale myślę, że na początek wystarczy). Następnie pobierz zawartość paczki i możemy zabierać się za modyfikacje w grze. 🙂
Dodanie marchewki
Przejdź do katalogu: Cartoon_Farm_Crops -> Prefabs -> Standard i przeciągnij obiekt Carrot_Fruit do stworzonego świata (ja ustawiłem pozycję marchewki na 0, 0, 0). Za moment dodamy skrypt, który wyliczy losową pozycję dla obiektu, dlatego początkowa pozycja marchwi nie jest aż tak ważna.
Opcja Rigidbody
Dzięki rigidbody będziesz mógł dostać informację, kiedy dwa obiekty się dotkną. Będzie to przydatne aby w momencie zetknięcia się królika z marchewką uruchomić funkcję odpowiedzialną za jej zebranie i zniknięcie. Zaznacz obiekt królika i w szczegółach obiektu dodaj komponent: Add Component -> Physics -> Rigidbody.
Ze względu na fakt, że marchewka „przechodzi” przez teren, ważne jest aby odznaczyć wartość Use Gravity. W przeciwnym razie, obiekt zacznie spadać!
Wartości Rigidbody dla marchwi i królika będą podobne. Dla obiektu marchewki, w komponencie Mesh Collider, należy dodatkowo zaznaczyć opcje Convex oraz Is Trigger. Dzięki temu, kiedy obiekty się zetkną, zostanie uruchomiona wbudowana funkcja onTriggerEnter().
Dodanie skryptu
Nadszedł czas na skrypt dla marchewki! Skrypt ma na celu przygotować na starcie jej losowe położenie, a po zetknięciu królika z obiektem, zmianę pozycji na mapie. Funkcja dotycząca obliczenia początkowej lokalizacji obiektu będzie taka sama podczas uruchomienia programu jak i po zetknięciu z obiektem, dlatego dobrze jest wydzielić ją jako osobną funkcję, żeby uniknąć duplikacji kodu.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
public class CarrotScript : MonoBehaviour
{
void Start()
{
//wywołanie funkcji ReplaceCarrot
ReplaceCarrot();
}
//wbudowana funkcja OnTriggerEnter wywoływana w momencie zetknięcia się obiektu z królikiem
private void OnTriggerEnter(Collider other)
{
//wywołanie funkcji ReplaceCarrot
ReplaceCarrot();
}
//zdefiniowanie funkcji ReplaceCarrot
private void ReplaceCarrot()
{
//zmiana pozycji obiektu na wyznaczoną przez wartości z zakresu od -3 do 3
gameObject.transform.SetPositionAndRotation(new Vector3(Random.Range(-3, 3), 0, Random.Range(-3, 3)), Quaternion.identity);
}
}
Na koniec dodaj skrypt do obiektu marchewki.
Zakończenie
To tyle w dzisiejszym artykule. Jeżeli podążałeś według powyższych kroków, powinieneś móc uruchomić program i sterując królikiem, zbierać losowo pojawiające się marchewki! W kolejnym artykule dodamy licznik, który będzie informował o ich zebranej ilości. 🐰
Jeżeli masz jakieś pytania pisz śmiało, a ja postaram się na nie odpowiedzieć. 🙂
Dziękuję Ci za poświęcony czas
Jeżeli chcesz być na bieżąco z artykułami i jesteś ciekawy co będzie dalej, daj lajka na naszym profilu FB, a przede wszystkim zapisz się do newslettera! Nie zapomnij również o naszej, prężnie rozwijającej się, grupie na Discordzie. Spodobał Ci się artykuł? Może zaciekawią Cię inne wpisy na naszym blogu.
Pozdrawiam i życzę miłego dnia! 🙂