Проблема unity2d с менеджером уровней и сохранением звездочек по триггеру - PullRequest
0 голосов
/ 27 февраля 2020

Я создал двухмерную игру в единстве, в которой игрок должен выпустить мяч и бросить его в стакан, все правильно, но моя проблема с моим уровнем и счетчиком, чтобы подсчитать, сколько звезд столкнулось и вошло в 2d триггер. Я не знаю, как это сделать, и я не нашел никакого учебника в inte rnet (я много искал). Я использовал настройки плеера для других настроек, таких как система блокировки и разблокировки. Я хочу, чтобы это было для тех же звезд и Мне нужна система, которая сохранила всю партитуру и т. Д. c, и, если запись будет прервана, ее следует изменить.

https://i.stack.imgur.com/If99G.png enter image description here

и это мой звездный код класса.

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Stars : MonoBehaviour
{


   [SerializeField] private Animator animator;
    public GameObject DeathEffect;


    void didColideWithStar()
    {
        animator.SetBool("boom", true);



    }

    public void OnTriggerEnter2D()
    {
        didColideWithStar();
        Die();

    }

    public void Die()
    {
        Instantiate(DeathEffect, transform.position, Quaternion.identity);
        Destroy(gameObject);
    }
}

Может ли кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 28 февраля 2020

Вот кое-что, с чего можно начать.

Есть несколько способов сделать это. Я предложу один, в котором каждая сцена в единстве может иметь и поддерживать свой собственный счет звезд.

Создайте новый MonoBehaviour, который может содержать ваш Счет. Я назову это LevelData.

public class LevelData : MonoBehaviour {
    public string LevelName;
    public int HighScoreStarsCollected;
    public int StarsCollected;

    void Awake() {
        HighScoreStarsCollected = PlayerPrefs.GetInt(LevelName + ".starscollected", 0);
    }

    public void SaveData() {
        PlayerPrefs.SetInt(LevelName + ".starscollected", HighScoresCollected);
    }

    public bool UpdateHighScore() {
        if(StarsCollected > HighScoreStarsCollected) {
            HighScoreStarsCollected = StarsCollected;
            SaveData();
            return true;
        }
        return false;
    }
}

Затем в свой класс Stars добавьте переменную publi c для ссылки на LevelData.

public class Stars : MonoBehaviour {
    [SerializeField] private Animator animator;
    public GameObject DeathEffect;
    public LevelData Data;

    void didColideWithStar()
    {
        animator.SetBool("boom", true);
        Data.StarsCollected++; // increment the star count
    }

    public void OnTriggerEnter2D()
    {
        didColideWithStar();
        Die();
    }

    public void Die()
    {
        Instantiate(DeathEffect, transform.position, Quaternion.identity);
        Destroy(gameObject);
    }
}

Теперь у вас есть класс, который содержит общее количество собранных звезд, и вы можете сослаться на это для своего счета.

Скорее всего, вы захотите расширить его, чтобы иметь функцию (функции) сброса / сохранения / загрузки, позволяющую воспроизводить и сохранять данные между играми пробеги.

...