【发布时间】:2015-08-03 19:21:36
【问题描述】:
我需要帮助解决我在为 Unity3D 编写脚本时发现的问题。
这是我的情况:
我桌上有 5 张牌。一张牌会给分数加分,而另外 4 张牌会夺走生命。正确的卡片是在附加到场景中不同对象的脚本上随机选择的。
在我的第一张卡片中,我附上了这个脚本
public void SelectCard()
{
switch (externalVariable)
{
case 1:
UnityEngine.Debug.Log("You win a point!");
Application.LoadLevel("Mini Game 1");
break;
case 2:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Game 1");
break;
case 3:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Game 1");
break;
case 4:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Game 1");
break;
case 5:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Game 1");
break;
}
}
如您所见,如果随机数为 1,则玩家选择第一张牌将获得一分,但如果随机数不同且玩家选择第一张牌,则玩家将失去一条生命。
p>随机数存储在一个 int 变量中。为了访问它,我将它添加到第一张卡上附加的脚本的 start() 部分
externalVariable= externalObject.GetComponent<MiniGame1RightCard>().rightCard;
UnityEngine.Debug.Log("The right card is card number: " + externalVariable);
因此,第一张卡片将访问由附加到同一场景中存在的不同对象的外部脚本生成的随机数,将其存储,然后通过控制台输出告诉我哪张是正确的卡片。然后,当玩家点击第一张牌时,脚本会比较存储在 externalVariable 上的随机数来检查第一张牌是否真的是正确的牌。无论哪种方式,最后一步都是重新加载相同的场景以重新开始。
场景加载的第一时间,一切运行完美。我的问题从第二次加载场景开始:externalVariable 始终为零。现在对于棘手的部分,如果我将完全相同的代码放在 Update() 部分而不是 Start() 部分中,externalVariable 保持为零一两秒,然后更改为生成的随机数。
我的猜测是,当我重新加载场景以重新开始时,我做错了,但我不知道是什么。
关于为什么代码第一次在 Start() 部分和每次在 Update() 部分都能正常工作的任何想法?
更新更新更新更新更新。
附在card1上的全部代码
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.IO;
using System;
using System.Threading;
public class Card1: MonoBehaviour
{
private string querySeleccionar = "SELECT Nivel FROM LevelAndDifficultyWHERE id=1;";
Text textoSilaba1;
public GameObject cardImage1;
public int level;
public int externalVariable;
public GameObject objetoExterno;
public void SeleccionarSilaba()
{
switch (externalVariable)
{
case 1:
UnityEngine.Debug.Log("You win a point!");
Application.LoadLevel("Mini Juego 1");
break;
case 2:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Juego 1");
break;
case 3:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Juego 1");
break;
case 4:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Juego 1");
break;
case 5:
UnityEngine.Debug.Log("You lose a life!!!");
Application.LoadLevel("Mini Juego 1");
break;
}
}
public void OnMouseDown()
{
}
// Use this for initialization
void Start ()
{
//lot of database stuff
switch (level)
{
case 1:
//lots of cases
}
externalVariable= externalObject.GetComponent<MiniGame1RightCard>().rightCard;
UnityEngine.Debug.Log("The right card is card number: " + externalVariable);
}
// Update is called once per frame
void Update ()
{
}
}
生成随机数的脚本
using UnityEngine;
using System.Collections;
public class MiniGame1RightCard: MonoBehaviour
{
public int rightCard;
// Use this for initialization
void Start ()
{
silabaCorrecta = UnityEngine.Random.Range(1, 5);
UnityEngine.Debug.Log("The right card is card number " + rightCard);
}
// Update is called once per frame
void Update ()
{
}
}
【问题讨论】: