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 () { } }
- 我复制了
,并将其放置在先前原始游戏对象
所在的相同位置,并删除了旧的预制件
- 谢谢大家,我解决了以下问题:
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 () { } }
- 我复制了
,并将其放置在先前原始游戏对象
所在的相同位置,并删除了旧的预制件
Random.range
和实例化
…关于位置我使用Vector3
获取它们的当前位置而不更改它们@Robin Kochh你觉得怎么样?你能通过一些代码来解释循环的想法吗?最好是给出一些完整的代码示例。Bcoz我是新手,我不能详细介绍,因为我在Unity工作已经有一段时间了。但我记得我使用了一种类似于所描述的放置游戏对象的策略。(我们必须将对象放置在n个位置的随机子集中。)-我看了一下你的屏幕截图:这可能是一个保持位置的解决方案,但可以为每个砖随机选择颜色(或预制)?这样你就不需要管理员脚本了。是的,我想在每次启动或重新启动游戏时随机选择颜色(预设)!如果我创建一个空的游戏对象并附加一个脚本,该脚本将包含一个游戏对象数组,然后附加所有gameobj(砖块)会怎么样在inspector中,仅通过公开数组,然后在开始函数中使用Random.range
和实例化
…关于位置我使用Vector3
获取它们的当前位置而不更改它们@Robin Kochh你觉得怎么样?你能通过一些代码来解释循环的想法吗?最好是给出一些完整的代码示例。Bcoz我是新手,我不能详细介绍,因为我在Unity工作已经有一段时间了。但我记得我使用了一种类似于所描述的放置游戏对象的策略。(我们必须将对象放置在n个位置的随机子集中。)-我看了一下你的屏幕截图:这可能是一个保持位置的解决方案,但可以为每个砖随机选择颜色(或预制)?这样你就不需要管理员脚本了。是的,我想在每次启动或重新启动游戏时随机选择颜色(预设)!