Unity изменяет компоненты различных активов при нажатии кнопки - PullRequest
0 голосов
/ 31 марта 2020

Я очень новичок в Unity и c# в целом, но в настоящее время у меня есть игра с 2 различными фонами, и я хотел бы выяснить, как переключаться между 2 фонами - LightBackground и NightBackground - когда кнопка щелчок, с фоном по умолчанию, являющимся LightBackground, и когда кнопка нажата, NightBackground используется. Моя идея состояла в том, чтобы изменить порядок в слое (sortingOrder) NightBackground при нажатии кнопки, но безуспешно при попытке выполнить много задач.

На данный момент я создал скрипт Night / Dark, который я поместил в кнопку при нажатии, и он изменяет sortingOrder Nightbackground, но как мне сделать так, чтобы он одновременно изменял sortingOrder LightBackground. Кроме того, в настоящее время у меня есть игровой объект под названием Game Manager, который связан с Gameover Canvas, который отображает кнопку, которую я хочу, и кнопку воспроизведения; но как только кнопка нажата, фон меняется, но как только кнопка воспроизведения нажата, фон возвращается к LightBackground.

Сценарий NightDark:

public class NightDark : MonoBehaviour
{

    public GameObject NightBackground;

    // Start is called before the first frame update
    void Start()
    {
        NightBackground.GetComponent<SpriteRenderer>().sortingOrder++;
    }

    // Update is called once per frame
    void Update()
    {

    }
}

Сценарий диспетчера игр:

public class GameManager : MonoBehaviour
{
    public GameObject gameOverCanvas;

    private void Start()
    {
        Time.timeScale = 1;
    }


    public void GameOver()
    {
        gameOverCanvas.SetActive(true);
        Time.timeScale = 0;
    }

    public void Replay()
    {
        SceneManager.LoadScene(0);
    }
}

Возможно, будет проще просмотреть Game Manager и NightDark здесь.

Если кто-нибудь из вас сможет помочь хоть в малейшей степени, будет очень признателен, так как сейчас я действительно борюсь. Еще раз спасибо.

1 Ответ

0 голосов
/ 31 марта 2020

Что говорит против наличия одного единственного фона контроллера и, скорее, только выключения Sprite, отображаемого в фонах SpriteRenderer.sprite свойство

public class BackgroundController : MonoBehaviour
{
    // Drag all these in via the Inspector
    [Header("References")]
    [SerielizeField] private SpriteRenderer backgroundRenderer;

    [Header("Assets")]
    [SerielizeField] private Sprite daySprite;
    [SerielizeField] private Sprite nightSprite;    

    // This is static so it keeps its value session wide also after
    // reloading the scene
    private static bool _isDay;

    private void Start()
    {
        // inverts the _isDay -> starts as day the first time
        SwitchBackground();
    }

    // This you call when the button is clicked
    public void SwitchBackground()
    {
        // invert the flag
        _isDay = !_isDay;

        // chose the new sprite according to the flag
        backgroundRenderer.sprite = _isDay ? daySprite : nightSprite;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...