我试图找到如何检查4个给定的游戏对象是否在列表中。 所以我有一个gameObjects列表。有时游戏对象会从列表中删除,有时它会进入。我想检查列表中是否有4个相同的颜色。在这种情况下,“childTiles”是列表。 我这样做了尝试:
void Update()
{
foreach (GameObject tile in ChildTiles)
{
if (tile.gameObject.name == "tileGreen1" && tile.gameObject.name == "tileGreen2" && tile.gameObject.name == "tileGreen3" && tile.gameObject.name == "tileGreen4")
{
gameManager.finalGreenComplete = true;
Debug.Log (gameManager.finalGreenComplete);
}
}
}
这不会返回任何内容。如果我只检查一个对象,它确实有效。我也不能使用ChildTiles.Contains()
,因为如果我是对的,那只能用1个gameObject。那么如何用多个游戏对象来检查呢?
编辑:更多信息。
我有4种不同的颜色,每种颜色有4个瓷砖。每当玩家点击一个按钮时,父母将随着瓷砖一样旋转。孩子自动成为特定父母的孩子。父母是碰撞者(在白色游戏对象下方的图像中是碰撞器。它们通常没有精灵渲染器),它位于按下的按钮后面。灰色圆圈是按钮。
以下脚本附加到所有白色对撞机上。公共虚空Squareclicked附加到每个按钮,但它在同一个脚本中。
public List<GameObject> ChildTiles = new List<GameObject>();
public void SquareClicked()
{
if (parentPositions.canTurn == true && gameManager.turns > 0f)
{
gameManager.turns -= 1;
gameManager.turnsText.text = "Turns: " + gameManager.turns;
foreach(GameObject go in ParentPositions)
{
parentPositions = go.GetComponent<TileController> ();
parentPositions.canTurn = false;
}
foreach(GameObject tile in ChildTiles)
{
tile.transform.parent = gameObject.transform;
}
StartCoroutine(Rotate()); //this is where you do the rotation of the parent object.
if (gameManager.turns == 0f)
{
gameManager.turnsText.text = "No turns left";
}
}
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "Tile")
{
ChildTiles.Add (col.gameObject);
}
}
void OnTriggerExit2D(Collider2D col)
{
if (col.gameObject.tag == "Tile")
{
ChildTiles.Remove (col.gameObject);
}
}
只需要左上角,右上角,左下角和右下角的对撞机来检查它的列表中是否有四个相同的颜色。我可以创建一个新脚本并将其附加到那些碰撞器(gameObjects),或者我可以创建它以便脚本仅适用于那些。
答案 0 :(得分:0)
条件肯定永远不会成立,因为对于给定的tile
,tile.gameObject.name
有一些给定的字符串值,并且您正在检查每个磁贴都有四个名称。
如果我正确理解了这个问题,您想在ChildTiles
内检查一下GameObject
.gameObject.name
是"tileGreen1"
,"tileGreen2"
var names = ChildTiles.Select(tile => tile.gameObject.name);
var shouldBeContained = new List<string> { "tileGreen1", "tileGreen2", "tileGreen3", "tileGreen4" };
bool condition = shouldBeContained.All(names.Contains);
}, 等等。如果是这样,如果性能不重要,您可以按如下方式检查写入条件:
-> channel(HIDDEN)
答案 1 :(得分:0)
在此处回答您的解释如何使用枚举颜色的请求: 我没有团结,所以我无法保证这会有效,但无论如何。
首先,定义你的枚举:
int instanceID = RoleEnvironment.CurrentRoleInstance.Id;
接下来从GameObject继承一个Tile对象(或者你想用作基类的任何东西),并为它添加一个颜色属性。使用这些而不是GameObject作为ChildTiles的类型。
public enum Color
{
Black,
Green,
Blue,
Yellow,
///...
}
然后你的Update函数应该是这样的:
public class Tile : GameObject
{
public Color Color { get; private set; }
public Tile(Color color) :base()
{
Color = color;
}
}