在我的国际象棋比赛中,我有一个选择的场景 - 黑色或白色。用户点击其中一个棋子后,他/她会收到一条弹出消息/它看起来像这样:
单击“确定”按钮,场景将变为带有棋盘的场景:
当用户选择黑色片时,他/她应该看到他们更接近他/她,而如果用户选择白色片,则他们应该在前面。默认情况下,在我的场景中,较近的部分是黑色的。我试图通过在每个图形上添加纹理更改脚本来实现这一点(它们对于白色和黑色部分会有所不同):
void Start () {
GetComponent<Renderer>().material = Resources.Load<Material>)"Materials/Pieces/Marble/White Pawn");
}
但是,如果用户选择黑色片段并且需要默认视图,我如何在重定向到场景时禁用此脚本。 这是弹出窗口的代码:
void OnGUI()
{
if (showPopUp)
{
GUI.Window(0, new Rect((Screen.width / 2) - 200, (Screen.height / 2) - 115
, 420, 180), ShowGUI, "Figures choice");
}
}
void ShowGUI(int windowID)
{
RedirectToMenu redirect = new RedirectToMenu();
guiStyle.fontSize = 22;
guiStyle.normal.textColor = Color.white;
GUI.Label(new Rect(80, 40, 200, 30), "You have chosen black pieces", guiStyle);
if (GUI.Button(new Rect(180, 110, 75, 35), "OK")){
showPopUp = false;
redirect.LoadAsset("UpgradedRoom");
SceneManager.LoadScene("UpgradedRoom");
}
}
我想我应该在加载场景之前访问此脚本并在需要时禁用。但是如何使用桌子,棋盘和棋子在场景外访问它?或者我可以在另一个场景中更改游戏对象的纹理吗?
答案 0 :(得分:0)
我要做的是使用static
变量来记住碎片是黑色还是白色。因此,您在场景加载之前设置变量,然后在加载后进行检查。因此,如果您的类被称为象棋管理器,则用于设置变量的代码可能如下所示:
public class ChessManager : Monobehavior {
public enum ChessColor { Black, White }
public static ChessColor playerColor
public void OnGUI() {
if(user chooses black) {
playerColor = ChessColor.Black;
//Load scene
}
else if(user chooses white) {
playerColor = ChessColor.White;
//Load scene
}
}
}
...启用/禁用脚本的代码可能是这样的,其中ColorChanger
是设置颜色的脚本:
public class ColorChanger : Monobehavior {
public void Start() {
if(ChessManager.playerColor == ChessManager.ChessColor.White) {
//Set texture
}
}
}
当用户在加载新场景后选择白色时,这会将纹理设置为其他内容。不要忘记用ChessManager
中的if语句替换选择了国际象棋棋子时执行的代码(我假设您正在使用传统按钮,因此您应该更换if(user chooses color)
与if(GUI.Button)
)。希望我能帮忙!
此外,正如之前评论中的其他人所指出的那样,如果您使用UnityEngine.UI
而不是Unity过时的遗留GUI系统,那可能是最好的,但根据项目可能不值得努力。