Как переключать спрайты при столкновении? - PullRequest
1 голос
/ 06 апреля 2019

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

Итак, я пытаюсь создать игровой объект для изменения своего спрайта, когда он сталкивается с другим. В коде вы можете видеть, что я сделал CandleLit и CandleUnlit с открытыми свойствами, поэтому я перетащил соответствующие спрайты в их соответствующие слоты в Инспекторе в Unity ... идея заключается в том, что когда коллайдер CandleUnlit касается коллайдера моего объекта с тегом «Smallfire» переключает спрайт CandleUnlit на спрайт CandleLit ... У меня нет ошибок в консоли, но ничего не происходит, когда происходит столкновение, поэтому я знаю, что это должно быть очень глупой проблемой, как я понимаю сценарии поток ... так что я надеюсь, что кто-то может помочь мне найти то, что мне не хватает или что я сделал не так. Заранее спасибо, я буду проверять свои учебные пособия, ожидая чьей-либо помощи, потому что сам не могу понять это через много часов: (

public class CandleSpriteSwitch : MonoBehaviour
{
    public Sprite CandleLit;
    public Sprite CandleUnlit;

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "SmallFire")
        {
            gameObject.GetComponent<SpriteRenderer>().sprite = CandleLit;
        }
        else
        {
            gameObject.GetComponent<SpriteRenderer>().sprite = CandleUnlit;
        }
    }
}

Ответы [ 2 ]

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

Как упомянул @Zohaib Zaidi в столкновениях, должно быть как минимум 1 твердым телом для правильной работы.Если у вас жесткое тело и размеры 2 коллайдеров настроены правильно и не установлены на « is Trigger ».Тогда единственная причина может заключаться в Layer Collision Matrix, если это нормально, то нет никаких причин, по которым он не работает!

public class CandleSpriteSwitch : MonoBehaviour
{
    public Sprite candleLit;
    public Sprite candleUnlit;
    public SpriteRenderer render;

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.transform.CompareTag("SmallFire"))
        {
            render.sprite = candleLit;
        }
        else
        {
            render.sprite = candleUnlit;
        }
    }
}

Btw .. при объявлении переменной name всегда используйте нижний регистр для первогослово.В общем, это не должно быть проблемой, но это наверняка создаст трудности позже.Кроме того, вы можете объявить Sprite Renderer в начале, а не в момент столкновения.

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

Один из ваших GameObject должен иметь BoxCollider2D и Rigidbody2D.Столкновения не имеют места до тех пор, пока не присутствует жесткийbody2d.Так что в вашем случае просто убедитесь, что 2 GameObjects, которые сталкиваются, имеют Rigidbody2D и Collider2D

...