发生碰撞时如何切换精灵?

时间:2019-04-06 04:52:32

标签: c# unity3d sprite

首先:我对编程完全陌生,所以这必须是一件容易的事,所以我希望您能在我从您的近似中学到这一点的同时,帮助我解决这个问题,以便也许可以解决我的初学者项目中的未来问题。 / p>

因此,我试图制作一个游戏对象,使其在与另一个碰撞时更改其精灵。在代码中,您可以看到我使用公共属性制作了CandleLit和CandleUnlit,因此将相应的sprite拖动到Unity中Inspector中的相应插槽中……这个想法是,当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 个答案:

答案 0 :(得分:1)

您的一个GameObject需要具有BoxCollider2D和Rigidbody2D。直到并且除非存在刚体2d才会发生碰撞。因此,在您的情况下,只需确保两个碰撞的游戏对象具有Rigidbody2D和Collider2D

答案 1 :(得分:1)

正如@Zohaib Zaidi在碰撞中提到的,必须必须至少有1个刚体才能正常工作。如果您具有刚体并且正确调整了2个对撞机的大小,并且未将其设置为“ 是触发器”。那么唯一的原因可能是在“层碰撞矩阵”中,如果可以,那么就没有理由不起作用!

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;
        }
    }
}

顺便说一句..声明名称变量时,请始终对第一个单词使用小写字母。通常,这应该不是问题,但是肯定会在以后造成困难。另外,您实际上可以在开始时声明Sprite Renderer,而不是在发生碰撞时声明。