我在Unity C#中制作游戏,其中有10个球体在游戏开始时实例化 . 当用户单击任何球体时,球体将使用set active false属性隐藏 . 现在我想要的是在一些球体后面放置炸弹,这样当用户点击后面有炸弹的球体时,游戏就结束了 .
Spheres
List<GameObject> hat;
float q, w, r;
public Spheres()
{
hat = new List<GameObject>();
q = -2.5f;w = -2.5f;r = -2.5f;
}
public void AddSphere(GameObject gola)
{
for (int i = 0; i < 5; i++)
{
GameObject abc = GameObject.Instantiate (gola);
abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f);
hat.Add (abc); q += 1.15f;
}
}
public void HideSphere()
{
if(Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit))
{
if (hit.transform.gameObject.CompareTag ("Sphere"))
{
hit.transform.gameObject.SetActive (false);
}
}
}
}
Instantiating spheres
for (int i = 0; i < 5; i++)
{
GameObject abc = GameObject.Instantiate (gola);
abc.transform.position = new Vector3 (abc.transform.position.x + q, abc.transform.position.y, abc.transform.position.z + 1.5f);
hat.Add (abc); q += 1.15f;
}
2 回答
由于您尚未添加任何代码,我将向您解释我将如何解决您的问题 . 我假设您已经为球体创建了一个GameObject,它附加了一个脚本,该脚本会停用GameObeject或使其在onClick()上不可见 . 所以现在要遵循的步骤是:
为该GameObject添加一个名为
boolean hasBomb
的布尔变量当您在场景中实例化10个球体时,将该布尔值随机设置为true或false
可选 - 如果您还要添加炸弹预制件,可以在球体的相同位置实例化它们,其中hasBomb属性设置为true
在球体的
onClick()
方法中,检查(hasBomb)是否设置为true如果是,则使用文本或菜单加载一个名为GameOver的新场景 . 使用
Application.LoadLevel("GameOver"
)使用您在评论中提供的代码进行编辑:
我假设gola是你在编辑器中创建的gameObject . 因此,不是将gameObject标记为“sphere”以便稍后检测是否使用Physics.Raycast按下按钮,您可以做的是创建一个名为hideSphere.cs的脚本 . 在该脚本中,您应该添加:
并且
然后你应该:
将一个对撞机添加到gola GameObject(因此它会检测到点击次数)
将脚本hideSphere.cs附加到gola GameObject
编辑2:
现在随机决定球体是否有炸弹:
注意:使用
abc.GetComponent.<hideSphere>().hasBomb = true;
行可以访问变量hasBomb,它是脚本hideSphere.cs中的一个公共变量,它附加到GameObject gola . 但在这种情况下,您只需修改当前迭代中生成的特定实例的该属性 .你把你的炸弹放在球形儿童身上 . 当用户点击球体时,您会检查您的对象是否有一个名为“炸弹”的子项 .