我不知道如何解决这个难题。我将在下面逐步描述一个简单的场景。
我曾经使用过Bounds,但没有得到确切的碰撞区域。我使用了一个游戏对象列表,并在TriggerEnter或TriggerStay上添加了游戏对象,并在TriggerExit上删除了它(在删除它之前改变了触发器退出的颜色)但没有得到确切的解决方案。
//for simplicity consider there or only circle and colours rectangle.
//it will work for only two simultaneous trigger but i need more than that
List<GameObject> go = new List<GameObject> ();
public void OnTriggerEnter (Collider other)
{
if(!go.Contains(other.GameObject))
go.Add(other.gameObject);
}
public void OnTriggerExit(Collider other)
{
// Changing colour according to list
if(go.Contains (other.gameObject)
{
go.Remove(other.gameObject);
}
}
帮我解决这个简单的伎俩。
由于
答案 0 :(得分:1)
您帖子上的原始评论是正确的,涉及在列表中添加对撞机的解决方案应该有效,如果不适合您,那么您的代码可能会出错。
话虽如此,还有另一种检测多次碰撞的方法,可以使用Physics(或用于Physics2D)类的2D游戏来完成。在您的情况下,您提到了圆形和矩形,因此这些特定形状的函数是Physics2D.OverlapCircleAll和Physics2D.OverlapBoxAll。
这些函数返回碰撞列表,然后您可以通过访问它们的gameObject变量来获取数据,还有许多其他形状可以与这些函数一起使用,您可以通过查看文档页面来查看它们对于物理课程。
答案 1 :(得分:1)
我将为您描述的情景提供解决方案。
让我们想象一下,我们只有3种类型的正方形,红色,蓝色和黄色。我要做的就是给每个人2的价值。例如:
int valueRed = 1; //2^0
int valueBlue = 2; //2^1
int valueYellow = 4; //2^2
然后我会声明3个计数器,每种颜色一个(最初都是0):
int counterRed = 0;
int counterBlue = 0;
int counterYellow = 0;
这个计数器是必要的,所以如果圆圈与a碰撞不止一次 特定类型的正方形,它不会添加两次甚至更多次的颜色(这会破坏一切)
我将声明一个变量来设置圆的颜色
int circleColour;
我将使用不同的标签标记每个矩形,具体取决于其颜色:红色,蓝色,黄色。
现在在TriggerEnter中,我已经为你工作了,我会为每种颜色写这样的东西:
void OnTriggerEnter2D(Collider2D other) {
if(other.tag == "Blue"){
if(counterBlue == 0)
{ circleColour += valueBlue;}
counterBlue++;
}
//Same for the other 2 colours
}
对于onTriggerExit:
void OnTriggerExit2D(Collider2D other) {
if(other.tag == "Blue"){
counterBlue--;
if(counterBlue == 0 )
circleColour -= valueBlue;
}
//Same for the other 2 colours
}
通过这种方式,您将获得每种颜色组合的唯一值:
Red = 1;
Blue = 2;
Purple = 3; //Red + Blue
Yellow = 4;
Orange = 5; //Red + Yellow
Green = 6; // Blue + Yellow
Black = 7; // Red + Blue + Yellow
然后,您可以使用开关
以编程方式为您的圆圈设置正确的颜色switch(circleColour){
case 1: //Set color of the circle sprite to red;
break;
case 2: //Set color of the circle sprite to blue;
break;
...
}
请告诉我这是否是您正在寻找的。我没有测试过自己,所以也许有一些错别字。