触发时未使用Sprite Renderer出现对象

时间:2019-04-13 16:30:21

标签: c# unity3d

我正在为我的作业统一制作一个Mario副本,并且尝试制作“不可见”块,它从不可见开始,然后在被击中时变为可见。我正在尝试使用SpriteRenderer.enable使其工作,它可以在一开始就将其关闭,但在尝试使其可见时则不能。

我尝试为该特定块创建一个单独的脚本,但结果是相同的。所有标记均已正确设置,我尝试使用Debug.log来查看是否在启用了Sprite的位置输入了“ if”,但结果是否定的。

这是一个关闭特定块的精灵渲染器的启动方法(起作用):

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 个答案:

答案 0 :(得分:1)

我们已经在聊天中找到了解决方案,但是对于所有可能会遇到此类问题的人,都需要检查以下事情:

  • 必须具有2个任何类型的碰撞体,每个gameObject 1个。
  • 至少1个僵尸。
  • 适当设置对撞机。
  • 适当的标签。
  • 适当的层碰撞矩阵。

下面的代码将起作用。

Process.Start(new ProcessStartInfo(@"C:\repos\WpfApp.exe", "Args from WinForms"));

答案 1 :(得分:0)

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

单独的脚本,将精灵附加在检查器中,结果相同。