【发布时间】: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);
}
}
}
【问题讨论】: