首先:我对编程完全陌生,所以这必须是一件容易的事,所以我希望您能在我从您的近似中学到这一点的同时,帮助我解决这个问题,以便也许可以解决我的初学者项目中的未来问题。 / 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;
}
}
}
答案 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,而不是在发生碰撞时声明。