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

enter image description here

现在,即使我输入了一个对撞机或另一个对撞机,它也会更改底部对撞机的颜色,因为不可能检查一个玩家进入一个对撞机以及何时进入另一个对撞机。

预先感谢

解决方法

您可能(可能应该)在同一对象上没有两个碰撞器。相反,您可以使房屋成为一个父对象,并使两个子对象分别具有自己的对撞机。如果要将所有代码保留在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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...