Strona główna Programowanie Zbieranie przedmiotów w Unity

Zbieranie przedmiotów w Unity

przez Krzysiu Weiss

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. 🙂

unity - assetstore marchewki

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.

unity- dodanie marchwi

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.

unity - 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ć. 🙂

unity - zbieranie marchewek

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! 🙂

dziękuję
0 0 vote
Oceny

Powiązane wpisy

guest
0 komentarzy
Inline Feedbacks
View all comments

Strona wykorzystuje cookies i przetwarza dane zgodnie z zasadami opublikowanymi w Polityce Prywatności. Jeżeli nie wyrażasz zgody na przetwarzanie danych, zmień ustawienia swojej przeglądarki. Wybierając "OK", zgadzasz się na warunki przetwarzania. OK Więcej