【问题标题】:Changing sprite after mouse click on collider (working with many colliders and many different sprites)鼠标点击对撞机后更改精灵(使用许多对撞机和许多不同的精灵)
【发布时间】:2016-10-02 02:10:22
【问题描述】:

我不会隐瞒我是 Unity 和 C# 的新手。我正在尝试制作迷你逃脱游戏。

我的问题:使用碰撞器更改精灵只适用于一个对象。单击第二个对象后,它会工作一次,然后第一个和第二个对象都不起作用。

说明: 在主屏幕上,我将有许多“可点击”的项目和一些“可挑选”的项目。我创建了 2 个脚本 - 一个靠近单击的项目,第二个返回主视图。

主视图看起来像这样:它们是 3 个碰撞器,每个碰撞器都是不同视图的特写。对撞机是背景的孩子。特写镜头后,我不希望背景的子对撞机工作。只有特写的对撞机才能工作。

所以问题是:我做错了什么吗?有没有更好的方法来改变鼠标点击后的精灵?

我的代码:

第一个脚本:

public class GetCloser : MonoBehaviour // shows close-up of clicked object
{
    public GameObject Actual, Background;

    void OnMouseDown()
    {

            RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);

            if (hit.collider != null)
            {
                Background.SetActive(false);

                Actual.GetComponent<Collider2D>().enabled = true;
                Actual.GetComponent<SpriteRenderer>().enabled = true;
            }


    }

}

第二个脚本:

public class ReturnTo : MonoBehaviour //hide the close-up image and return to the background
{
    public GameObject Actual, Background;

 void OnMouseDown()
    {

            RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);

            if (hit.collider != null)
            {

                Background.SetActive(true);
                Actual.GetComponent<Collider2D>().enabled = false;
                Actual.GetComponent<SpriteRenderer>().enabled = false;
            }



    }

}

最后一个脚本:

public class PickUp : MonoBehaviour { //hide clicked object- works every time

    // Use this for initialization
    void Start () {
        gameObject.GetComponent<SpriteRenderer>().enabled = true;
    }

    // Update is called once per frame
    void OnMouseDown()
    {

            RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);

            if (hit == true && hit.collider != null)
            {
                hit.collider.gameObject.GetComponent<SpriteRenderer>().enabled = false;
                Destroy(hit.collider);

            }

    }
}

【问题讨论】:

    标签: c# unity3d 2d


    【解决方案1】:

    因此,如果问题是您的主屏幕的碰撞器在缩放后仍然处于活动状态,只需添加您的第一个脚本“缩放脚本”即可停用所有背景的碰撞器,甚至只是简单地关闭背景中的游戏对象,那么当您缩小后只需重新打开对象或重新打开碰撞器,具体取决于您决定关闭哪个。

    等一下,我只是重新阅读并意识到,在您单击第一个对象后,您将无法再让其他对象做出反应。查看您的代码可能是因为您正在销毁第三个脚本中的碰撞器,因此您不再能够“击中”其他对象来触发碰撞代码。

    【讨论】:

    • 感谢您的回答。第三个脚本仅附加到应该从背景中消失的可拾取对象。所以我认为这不是问题。为了 100% 确定我从项目中删除了该脚本,问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多