Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发生碰撞时如何切换精灵?_C#_Unity3d_Sprite - Fatal编程技术网

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

C# 发生碰撞时如何切换精灵?,c#,unity3d,sprite,C#,Unity3d,Sprite,第一:我对编程完全是新手,这一定是一项简单的任务,所以我希望你能帮助我解决这个问题,同时我从你的近似中学习,这样也许我可以在我的初学者项目中解决未来的问题 所以我试图让一个游戏物体在与另一个物体碰撞时改变它的精灵。在代码中,您可以看到我使用公共属性制作了烛光和烛光,因此我将相应的精灵拖动到Unity Inspector中各自的插槽中。。。这个想法是,当烛光对撞机用标记“Smallfire”触碰我对象的对撞机时,它会将烛光精灵切换到烛光精灵。。。我在控制台中没有错误,但冲突发生时什么都没有发生,所

第一:我对编程完全是新手,这一定是一项简单的任务,所以我希望你能帮助我解决这个问题,同时我从你的近似中学习,这样也许我可以在我的初学者项目中解决未来的问题

所以我试图让一个游戏物体在与另一个物体碰撞时改变它的精灵。在代码中,您可以看到我使用公共属性制作了烛光和烛光,因此我将相应的精灵拖动到Unity Inspector中各自的插槽中。。。这个想法是,当烛光对撞机用标记“Smallfire”触碰我对象的对撞机时,它会将烛光精灵切换到烛光精灵。。。我在控制台中没有错误,但冲突发生时什么都没有发生,所以我知道这一定是一个非常愚蠢的问题,因为我理解脚本流的方式。。。所以我希望有人能帮我找到我遗漏了什么或者我做错了什么。提前感谢,我会在等待他人帮助的同时查看我的教程,因为我自己在几个小时后无法理解:(

公共类烛光PriteSwitch:MonoBehavior
{
公共雪碧烛光;
公共雪碧烛台;
空心OnCollisionInter2D(碰撞2D碰撞)
{
如果(collision.gameObject.tag==“SmallFire”)
{
gameObject.GetComponent().sprite=CandleLit;
}
其他的
{
gameObject.GetComponent().sprite=CandleUnlit;
}
}
}

你的一个游戏对象需要有一个BoxCollized2D和一个Rigidbody2D。除非有一个Rigidbody2D存在,否则不会发生碰撞。因此,在你的情况下,只需确保正在碰撞的两个游戏对象有一个Rigidbody2D和一个CollizedR2D

就像@Zohaib Zaidi在碰撞中提到的必须至少有一个Rigidbody,以便正常工作。如果您有刚体,并且两个碰撞器的大小调整正确,并且没有设置为“is触发器”。那么唯一的原因可能是在层碰撞矩阵中,如果没有问题,则没有理由不工作

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渲染器,而不是在发生冲突时。是否尝试在
OnCollisionInter
中放置断点以查看是否您是否输入过?是否使用2D碰撞器?如果是,请尝试使用。谢谢您的回答。是的,我使用2D碰撞器,但当我添加2D时,整个“OnCollisionInter2D”改变颜色,所以我认为这不符合预期……那么告诉我Alex,在这种情况下,颜色的改变并不重要?或者我遗漏了一些东西,让程序按照预期解释该部分?谢谢你的时间,我真的很感激:)顺便说一句,我不明白你对断点部分的意思:(很抱歉,您还必须将
Collision
参数转换为
Collision2D
。方法签名不同。添加一些断点,让我们知道代码是否在OnCollisionInter2d中输入过if/else流。谢谢Nikola!!!从现在开始,我将使用小写字母作为第一个单词…我是该程序的新手。)rs world和我真的很感激这些提示。是的,你完全正确,问题是“是触发器”检查过了…但我希望通过这种方式来记录一台对撞机在另一台对撞机上,而不会发生碰撞,因为我的角色拿着蜡烛,所以当我的角色通过对撞机时,蜡烛会卡在对撞机上。我知道现在不是这样,但是有没有办法让它成为可能,或者我必须找到另一种解决方案?当然是c我们非常感谢您的时间和帮助,我对学习很感兴趣,但我想自学比我想象的要困难得多。我非常感谢您的帮助!!!@RobAcuñA,因为您可以使用不同的图层,并在图层碰撞矩阵中调整它们的检测。了解图层和图层碰撞矩阵。我不敢相信我错过了第二个链接中的信息…我想这是太多需要快速消化的信息了。非常感谢你的帮助!!!是的,两个都有2dCollider和2Drigidbody,问题是“是触发器”检查过了,但我希望能记录到一台对撞机在另一台对撞机上,而不会发生碰撞,因为我的角色拿着蜡烛,所以当我的角色通过对撞机时,蜡烛会卡在对撞机上。我知道现在不是这样,但有没有办法让它成为可能,或者我必须找到另一种解决方案?谢谢感谢你花时间帮助我,我真的很感激!!!
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;
        }
    }
}