Объект не отображается с помощью Sprite Renderer при запуске - PullRequest
1 голос
/ 13 апреля 2019

Я делаю реплику Марио в единстве для своей домашней работы, и я пытаюсь сделать блок "Невидимый", он начинает невидимым, затем при попадании становится видимым. Я пытаюсь использовать SpriteRenderer.enable, чтобы он работал, он работает для выключения при запуске, но не при попытке сделать его видимым.

Я пытался создать отдельный скрипт для этого конкретного блока, но результаты те же. Все теги установлены правильно, я попытался использовать Debug.log, чтобы увидеть, если я введу «если», где спрайт должен быть включен, но результат отрицательный.

Это метод запуска, отключающий рендерер спрайтов для конкретного блока (он работает):

private void Start()
{
    //rendObject = this.gameObject.GetComponent<SpriteRenderer>();
    if (gameObject.tag == "Invisible")
    {
        gameObject.GetComponent<SpriteRenderer>().enabled = false;
    }
}

Это скрипт всех блоков:

private void OnCollisionEnter2D(Collision2D collision)
{
    if (timesToBeHit > 0)
    {
        if (collision.gameObject.tag == "Player" && IsPlayerBelow(collision.gameObject))
        {
            if (gameObject.tag == "Invisible")
            {
                gameObject.GetComponent<SpriteRenderer>().enabled = true;
            }
            collision.gameObject.GetComponent<PlayerController>().isJumping = false; //Mario can't jump higher
            Instantiate(prefabToAppear, transform.parent.transform.position, Quaternion.identity); //instantiate other obj
            timesToBeHit--;
            anim.SetTrigger("GotHit"); //hit animation   
        }
    }

    if (timesToBeHit == 0)
    {
        anim.SetBool("EmptyBlock", true); //change sprite in animator
    }
}

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Мы нашли решение в чате, но для всех людей, которые могут работать или сталкивались с такой проблемой, необходимо проверить следующее:

  • Должно быть 2 коллайдера любого типа, по одному на каждый игровой объект.
  • Как минимум 1 ригидбоги.
  • Настройка коллайдера.
  • Соответствующие теги.
  • Соответствующая матрица столкновений слоев.

Код ниже будет работать.

public SpriteRenderer render;

void Start()
{
    render.enabled = false;
}

private void OnCollisionEnter2D(Collision2D other)
{
    if (other.gameObject.tag == "Player")
    {
        render.enabled = true;
    }
}
0 голосов
/ 13 апреля 2019
public class InvisibleBlock : MonoBehaviour
{
    public SpriteRenderer rendObject;

    private void Start()
    {

        if (gameObject.tag == "Invisible")
        {
            rendObject.enabled = false;
        }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            rendObject.enabled = true;
        }
    }
}

Отдельный скрипт, в инспекторе прикреплен спрайт, те же результаты.

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