C# 每次我重新开始游戏时都会改变砖块精灵的位置

C# 每次我重新开始游戏时都会改变砖块精灵的位置,c#,unity5,C#,Unity5,我正在制作一个砖块破坏游戏,其中砖块的放置方式如下: public class positionsBricks : MonoBehaviour { public GameObject[] bricks; int brickNo; // Use this for initialization void Start () { Vector3 Brickpos = new Vector3 (transform.position.x, transform

我正在制作一个砖块破坏游戏,其中砖块的放置方式如下:

public class positionsBricks : MonoBehaviour {

    public GameObject[] bricks;
    int brickNo;
    // Use this for initialization
    void Start () {
        Vector3 Brickpos = new Vector3 (transform.position.x, transform.position.y, transform.position.z);
        brickNo = Random.Range (0, bricks.Length);
        Instantiate (bricks [brickNo], Brickpos, transform.rotation);
    }

    // Update is called once per frame
    void Update () {

    }
}

现在我想要的是,每当我开始我的新游戏或游戏结束后重新开始时,砖块应该随机改变,但位置不应该改变

有人知道我怎么做吗?我应该改变Bricks脚本还是Inspector本身,或者两者都改变

这是砖块脚本:

public class BricksScript : MonoBehaviour {

    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {
    }

    void OnCollisionEnter2D(Collision2D col){
        if (col.gameObject.tag == "ball") {
            gameObject.SetActive (false);
        }
    }
}

我的Unity安装在其他地方,但这里有一个总体想法:

  • 创建一个空的游戏对象,并附加一个管理砖块的脚本
  • 在层次结构中,将砖附着到brickmanager对象
  • 在砖管理器脚本
    Start()
    方法中:
    • 将砖块循环一次,以获得它们的所有位置并将它们存储在列表中
    • 第二次从你的列表中给他们分配随机位置

或者,您可以将位置硬编码为brick manager脚本中的代码,或者使用空的游戏对象来保持位置。

My Unity安装在其他位置,但这里有一个总体思路:

  • 创建一个空的游戏对象,并附加一个管理砖块的脚本
  • 在层次结构中,将砖附着到brickmanager对象
  • 在砖管理器脚本
    Start()
    方法中:
    • 将砖块循环一次,以获得它们的所有位置并将它们存储在列表中
    • 第二次从你的列表中给他们分配随机位置

或者,您可以将位置硬编码为brick manager脚本中的代码,或者使用空的游戏对象来保持位置。

谢谢大家,我解决了我的问题,如下所示:

public class positionsBricks : MonoBehaviour {

    public GameObject[] bricks;
    int brickNo;
    // Use this for initialization
    void Start () {
        Vector3 Brickpos = new Vector3 (transform.position.x, transform.position.y, transform.position.z);
        brickNo = Random.Range (0, bricks.Length);
        Instantiate (bricks [brickNo], Brickpos, transform.rotation);
    }

    // Update is called once per frame
    void Update () {

    }
}
  • 首先,我创建了一个
    空游戏对象
    ,并将
    脚本
    附加到它上
  • 然后我将脚本编码如下:

    public class positionsBricks : MonoBehaviour {
    
        public GameObject[] bricks;
        int brickNo;
        // Use this for initialization
        void Start () {
            Vector3 Brickpos = new Vector3 (transform.position.x, transform.position.y, transform.position.z);
            brickNo = Random.Range (0, bricks.Length);
            Instantiate (bricks [brickNo], Brickpos, transform.rotation);
        }
    
        // Update is called once per frame
        void Update () {
    
        }
    }
    
在inspector,我拖放脚本中的所有预制件,然后

  • 我复制了
    游戏对象
    ,并将其放置在先前原始
    预制件
    所在的相同位置,并删除了旧的

    • 谢谢大家,我解决了以下问题:

      public class positionsBricks : MonoBehaviour {
      
          public GameObject[] bricks;
          int brickNo;
          // Use this for initialization
          void Start () {
              Vector3 Brickpos = new Vector3 (transform.position.x, transform.position.y, transform.position.z);
              brickNo = Random.Range (0, bricks.Length);
              Instantiate (bricks [brickNo], Brickpos, transform.rotation);
          }
      
          // Update is called once per frame
          void Update () {
      
          }
      }
      
      • 首先,我创建了一个
        空游戏对象
        ,并将
        脚本
        附加到它上
      • 然后我将脚本编码如下:

        public class positionsBricks : MonoBehaviour {
        
            public GameObject[] bricks;
            int brickNo;
            // Use this for initialization
            void Start () {
                Vector3 Brickpos = new Vector3 (transform.position.x, transform.position.y, transform.position.z);
                brickNo = Random.Range (0, bricks.Length);
                Instantiate (bricks [brickNo], Brickpos, transform.rotation);
            }
        
            // Update is called once per frame
            void Update () {
        
            }
        }
        
      在inspector,我拖放脚本中的所有预制件,然后

      • 我复制了
        游戏对象
        ,并将其放置在先前原始
        预制件
        所在的相同位置,并删除了旧的

      能否在屏幕上随机放置一块砖块?你能从系统时钟中为随机数发生器设定种子吗?这两个问题应该会让你在解决问题上有很长的路要走。是的,我可以用随机函数来解决这个问题,但我不想把它随机放置在任何地方@dutaravi12345您有一个位置列表和颜色列表。第二个是随机的。然后将第二个列表中的颜色指定给第一个列表中的位置。就这么简单。如果您希望每种颜色的数量是静态的,您可以使用正确的数量初始化颜色列表,然后对其使用排列/洗牌(搜索)。好的,我将尝试@Aziuth您可以在屏幕上随机放置一块砖块吗?你能从系统时钟中为随机数发生器设定种子吗?这两个问题应该会让你在解决问题上有很长的路要走。是的,我可以用随机函数来解决这个问题,但我不想把它随机放置在任何地方@dutaravi12345您有一个位置列表和颜色列表。第二个是随机的。然后将第二个列表中的颜色指定给第一个列表中的位置。就这么简单。如果你希望每种颜色的数量是静态的,你可以用正确的数量初始化颜色列表,然后对其使用排列/洗牌(搜索)。好的,我将尝试@Aziuth如果我创建一个空的游戏对象并附加一个脚本,该脚本将有一个游戏对象数组,然后附加所有的gameobj(砖块)怎么样在inspector中,仅通过公开数组,然后在开始函数中使用
      Random.range
      实例化
      …关于位置我使用
      Vector3
      获取它们的当前位置而不更改它们@Robin Kochh你觉得怎么样?你能通过一些代码来解释循环的想法吗?最好是给出一些完整的代码示例。Bcoz我是新手,我不能详细介绍,因为我在Unity工作已经有一段时间了。但我记得我使用了一种类似于所描述的放置游戏对象的策略。(我们必须将对象放置在n个位置的随机子集中。)-我看了一下你的屏幕截图:这可能是一个保持位置的解决方案,但可以为每个砖随机选择颜色(或预制)?这样你就不需要管理员脚本了。是的,我想在每次启动或重新启动游戏时随机选择颜色(预设)!如果我创建一个空的游戏对象并附加一个脚本,该脚本将包含一个游戏对象数组,然后附加所有gameobj(砖块)会怎么样在inspector中,仅通过公开数组,然后在开始函数中使用
      Random.range
      实例化
      …关于位置我使用
      Vector3
      获取它们的当前位置而不更改它们@Robin Kochh你觉得怎么样?你能通过一些代码来解释循环的想法吗?最好是给出一些完整的代码示例。Bcoz我是新手,我不能详细介绍,因为我在Unity工作已经有一段时间了。但我记得我使用了一种类似于所描述的放置游戏对象的策略。(我们必须将对象放置在n个位置的随机子集中。)-我看了一下你的屏幕截图:这可能是一个保持位置的解决方案,但可以为每个砖随机选择颜色(或预制)?这样你就不需要管理员脚本了。是的,我想在每次启动或重新启动游戏时随机选择颜色(预设)!