【问题标题】:Unity - Change all objects with a certain tagUnity - 使用特定标签更改所有对象
【发布时间】:2021-01-27 12:04:36
【问题描述】:

我正在统一制作游戏,并添加了一个碰撞脚本,该脚本在我的玩家击中方块时运行。如果可能的话,我希望它选择每个带有特定标签的游戏​​对象并禁用特定功能。例如,我的最终产品是禁用每个带有“障碍”标签的游戏​​对象的附加刚体中的 useGravity 功能,但是我不确定如何统一编码。我已经让我当前的代码禁用了命中实体的重力,但想同时为所有这些实体执行此操作。

void OnCollisionEnter (Collision collisionInfo)
{
    if (collisionInfo.collider.tag == "Obstacle")
    {
        collisionInfo.collider.attachedRigidbody.useGravity = false;
        GameManager.restartDelay = 4f;
        movement.enabled = false;
        FindObjectOfType<GameManager>().EndGame();
    }
}

如有任何混淆,请见谅。

【问题讨论】:

    标签: c# unity3d


    【解决方案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】:

      如果您想查找所有带有特定标签的游戏​​对象,请使用FindGameObjectsWithTag。它返回一个带有上述标签的游戏​​对象数组。然后,它就像循环遍历数组并更改每个对象所需的一样简单。

      【讨论】:

        【解决方案3】:

        很简单……

        你应该使用 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();
            }
        }
        

        我希望你清楚这一点。

        【讨论】:

          猜你喜欢
          • 2015-12-11
          • 2020-07-06
          • 1970-01-01
          • 2019-07-07
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-19
          相关资源
          最近更新 更多