我正在制作一个统一的游戏并添加了一个碰撞脚本,当我的玩家遇到一个块时它会运行。如果可能的话,我希望它选择具有特定标记的每个gameObject并禁用特定功能。例如,我的最终产品将禁用每个gameObject的attachedRigidbody中的useGravity功能,标签为" Obstacle"但是,我不确定如何将它编码为统一。我已经使我当前的代码禁用了命中实体的重力,但是我想同时为所有这些代码执行此操作。
void OnCollisionEnter (Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Obstacle")
{
collisionInfo.collider.attachedRigidbody.useGravity = false;
GameManager.restartDelay = 4f;
movement.enabled = false;
FindObjectOfType<GameManager>().EndGame();
}
}
对不起有任何困惑。
答案 0 :(得分:1)
如果要查找具有特定标记的所有游戏对象,请使用FindGameObjectsWithTag
。它返回带有上述标记的游戏对象数组。然后,它就像循环遍历数组并在每个对象上更改所需内容一样简单。
答案 1 :(得分:1)
碰撞时,找到每个带有标签的游戏对象并将其放入数组中,然后循环遍历数组中的每个对象并随意操作它。
void OnCollisionEnter (Collision collisionInfo)
{
if (collisionInfo.collider.tag == "Obstacle")
{
GameObject[] obstacles = GameObject.FindGameObjectsWithTag("Obstacle");
foreach(GameObject obst in obstacles)
obst.GetComponent<RigidBody>().useGravity = false;
GameManager.restartDelay = 4f;
movement.enabled = false;
FindObjectOfType<GameManager>().EndGame();
}
}
答案 2 :(得分:0)
很简单...
您应该使用 FindGameObjectsWithTag ,记住 s
因为有多个对象。
之后,对每个项目使用 foreach
循环,然后禁用 useGravity
。
代码:
void OnCollisionEnter (Collision collisionInfo)
{
if (collisionInfo.CompareTag(Obstacle))
{
GameObject[] allObstacles = GameObject.FindGameObjectsWithTag("Obstacle");
foreach(GameObject obstacles in allObstacles)
obstacles.GetComponent<RigidBody>().useGravity = false;
GameManager.restartDelay = 4f;
movement.enabled = false;
FindObjectOfType<GameManager>().EndGame();
}
}
我希望你清楚这一点。 <3