如何解决Unity:同一游戏对象中不止一个具有不同功能的对撞机
大家好,首先抱歉,因为这个问题可能很愚蠢,但我是新人。
我正在尝试创建一个具有两个碰撞器的GameObject,这些碰撞器可能会触发以产生不同的功能。可以说,如果玩家对撞机位于房屋的进入对撞机内,并且您按空格键,则可以将物品放入房屋中,这就像一个夹心房屋;如果玩家位于第二对撞机内,则可以从房屋中取出东西(这样,房屋就像一个队列,在其中您将玩家介绍的东西放在红色的位置,一旦准备就绪,您就可以在绿色的位置取出它们)
要点是,在一个游戏对象中不可能有一个以上的触发器对撞机,因为当一个或另一个是触发器时就不可能区分
如何做到这一点
public Color normalColor;
public Color playerOnTopColor;
public GameObject receiveArea;
private SpriteRenderer receiveArearRenderer;
public float refresTime = 5f;
public int totalCapacity = 5;
public int currentCapacity = 0;
public int totalReady = 5;
public int currentReady = 0;
public Text capacityText;
public Text readyText;
void Start()
{
receiveArearRenderer = receiveArea.GetComponent<SpriteRenderer>();
receiveArearRenderer.color = normalColor;
updateText();
StartCoroutine(checkForQueue());
}
private void OnTriggerEnter2D(Collider2D collision)
{
receiveArearRenderer.color = playerOnTopColor;
}
private void OnTriggerExit2D(Collider2D collision)
{
receiveArearRenderer.color = normalColor;
}
现在,即使我输入了一个对撞机或另一个对撞机,它也会更改底部对撞机的颜色,因为不可能检查一个玩家进入一个对撞机以及何时进入另一个对撞机。
预先感谢
解决方法
您可能(可能应该)在同一对象上没有两个碰撞器。相反,您可以使房屋成为一个父对象,并使两个子对象分别具有自己的对撞机。如果要将所有代码保留在house对象上,则仍然可以这样做。只需创建一个中继组件。只需创建一个包含以下代码的新脚本即可:
public UnityEvent OnTriggerEnter;
public UnityEvent OnTriggerExit;
private void OnTriggerEnter2D(Collider2D collision)
{
OnTriggerEnter?.Invoke();
}
private void OnTriggerExit2D(Collider2D collision)
{
OnTriggerExit?.Invoke();
}
将此脚本放在每个子对象上,然后可以使用UnityEvents从Home脚本中为每个对象单独运行所需的任何方法。
或者,如果您确实希望将两个对撞机保持在同一对象上,则可以运行手动碰撞检查。在这种情况下,您将删除OnTriggerEnter / Exit方法,而在FixedUpdate中,对每个对撞机执行Collider2D.OverlapCollider检查。您希望将每个对撞机分配给一个变量,以确保您对哪个对撞机进行处理。
,我终于改变了实现的方式。 我错了,因为托马斯说这不是统一编程的方式,现在它是一个不同的子游戏对象(具有碰撞器和脚本),每个子游戏对象都有自己的功能,该功能调用父游戏对象与父对象在功能上相关目的,如显示数字等等...感谢@Thomas Finch
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。