Как мне установить условие для рендерера спрайтов? - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь выполнить условие if, чтобы сделать что-то, если спрайт-рендеринг другого объекта включен, но это не сработает.

Вот код, который я пробовал:

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

public class PickUpReCharge : MonoBehaviour
{

    public Animator anim;
    public Animator animc;
    public Animator anime;
    public GameObject neon;
    public GameObject chargesprite;
    public AudioSource recharge;
    public BoxCollider2D collision;
    public SpriteRenderer blackout;
    public AudioSource ambient;
    public AudioSource music;

    void Start()

    {
        anime.Play("Pickup", 0, 1f);
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Player")
        {

            neon.GetComponent<PlayerMovement>().enabled = true;
            chargesprite.GetComponent<SpriteRenderer>().enabled = false;
            collision.GetComponent<BoxCollider2D>().enabled = false;
            anim.SetBool("IsDead", false);
            anim.Rebind();
            animc.Rebind();
            anime.Rebind();
            recharge.Play();
            Destroy(gameObject, 3.0f);

            //activate blackout
            blackout.GetComponent<SpriteRenderer>().enabled = false;


            if (blackout.enabled)
            {
                ambient.Play();
                music.Play();
            }

        }
    }
}

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

Что с ним не так?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Ваш blackout равен SpriteRenderer, поэтому вызов GetComponent для него недопустим. Измените это на:

blackout.enabled = true;

Или используйте:

anotherGameObject.GetComponent<SpriteRenderer>().enabled = true;

Вызов SetActive для GameObject отключит не только компонент SpriteRenderer! В некоторых случаях это меняет желаемое поведение.

0 голосов
/ 18 апреля 2019

Продиан спросил, пробовал ли я сам gameobject.active, и хочу поблагодарить вас за совет.Работает отлично!Я изменил тип ссылки на gameobject, изменил его и сделал необходимое, и теперь он работает как шарм!

Вот новый код:

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

public class PickUpReCharge : MonoBehaviour
{

    public Animator anim;
    public Animator animc;
    public Animator anime;
    public GameObject neon;
    public GameObject chargesprite;
    public AudioSource recharge;
    public BoxCollider2D collision;
    public GameObject blackout;
    public AudioSource ambient;
    public AudioSource music;

    void Start()

    {
        anime.Play("Pickup", 0, 1f);
    }

    void Update()

    {



    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Player")
        {

            neon.GetComponent<PlayerMovement>().enabled = true;
            chargesprite.GetComponent<SpriteRenderer>().enabled = false;
            collision.GetComponent<BoxCollider2D>().enabled = false;
            anim.SetBool("IsDead", false);
            anim.Rebind();
            animc.Rebind();
            anime.Rebind();
            recharge.Play();
            Destroy(gameObject, 3.0f);



            if (blackout.gameObject.activeSelf)
            {
                ambient.Play();
                music.Play();
            }

            blackout.gameObject.SetActive(false);

        }
    }
}

РЕДАКТИРОВАТЬ: еще одна вещь, на которую следует обратить внимание!Расположение оператора if важно.Это должно было быть перед кодом, который делает спрайт ложным.Это означает, что предыдущий код сработал бы, если бы это было сделано, но код gameobject намного лучше для меня, потому что слой затемнения - это тот, который мне нужно постоянно выключать.

По сути, мой старыйкод работает!Просто переместите оператор if перед «getcomponent ...... enabled = false», потому что скрипт читается по порядку.

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