前面学习了怎么样制作游戏运行之后的游戏菜单,这个都是游戏最基本的功能,标配的,学完菜单之后,就心里想着怎么样切换到游戏循环里了吧?也就是把菜单怎么样隐藏掉,根据用户的选择显示不同的游戏循环,比如选择“开始”菜单就进行游戏主循环,选择“退出”就退出游戏,选择“参数”就进入参数配置的设置界面。
下面就来学习这个方面的内容,首先来看一下前一节的内容,“退出”菜单的内容,如下:
if (GUI.Button(btnExitRect, "退出", skin.button))
{
Application.Quit();
}
退出按钮点击之后,GUI.Button()函数就会变为true,就进入if语句的复合语句里执行,也就是执行Application.Quit(),这个函数的意思就是这样:
退出应用程序。在编辑器或网页播放器内退出无效。重要:在大多数情况下,iOS应用终止应由用户决定。
通过这个按钮,就可以退出应用程序了。
接着下来添加开始菜单的响应代码,在这个例子里主要添加点击之后在屏幕上创建一个星星,但上面的例子没有实现这个功能,因此先要添加一个脚本文件作为游戏的主循环脚本,如下图:
通过这里A、B、C三步的操作,就可以创建一个新的脚本,把脚本命名为:StarGame,如下图:
看到上图这样,就已经创建游戏主循环的脚本成功了,不过你有没有仔细看一下,主摄像机下面的两个脚本都是打勾的,如下图:
一个组件被勾选中,就说明这个组件可以使用,如果把勾去掉,就是这个组件不能使用, 相当组件的enabled属性为false状态。在这个例子里,我们想先显示游戏进入菜单,因此只能勾选中StartMenu,把StarGame前面的勾去掉,如下图:
这时候,当程序运行起来时,就不会调用StarGame脚本运行了。只有当在开始菜单里点击之后才把这个脚本运行,同时把菜单的组件隐藏掉,这样就达到切换不同游戏界面的目标。所以在StartMenu.cs里添加下面的代码:
if (GUI.Button(btnStartRect, "开始", skin.button))
{
StarGame g = gameObject.GetComponent();
g.enabled = true;
this.enabled = false;
}
当你用户点击开始按钮时,就会进入这个函数执行,第一行语句定义了一个StarGame类的对象g,而这个对象g是从StarGame类创建出来的,这里通过GetComponent函数获取主摄像机里相关的组件。紧接着设置游戏对象g的属性enabled 为true,就是执行这个对象的代码,同时把当前菜单类组件enabled 设置为false,就是禁用当前菜单类代码运行,从而到达切换的目的。
接着下来的过程就比较简单了,就是添加游戏主循环的逻辑,在这里主要实现点击一下就出现一颗星星,所以添加如下代码到StarGame.cs里:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StarGame : MonoBehaviour
{
public GameObject starPrefab;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
//
Vector3 pos = Input.mousePosition;
pos.x /= Screen.width;
pos.y /= Screen.height;
//
GameObject g = (GameObject)Instantiate(starPrefab, pos, Quaternion.identity);
}
}
void OnGUI()
{
}
}
在这段代码里,定义了一个全局的预制件starPrefab对象,它是游戏对象,可以从编辑器上拖动设置,就是把前面创建的星星的预制件拖动过去。接着就在Update()函数加入鼠标操作的响应代码,Input.GetMouseButtonDown(0)是获取鼠标的左键点击,就进入if语句里运行,因此获取鼠标当前坐标位置到pos 里,然后调整之后,调用函数Instantiate来创建星星显示出来。这里使用四元数Quaternion.identity单位向量来旋转,这样就在鼠标点击的位置创建星星了。运行一下这个游戏,发现没有星星出来,哈哈......
好吧,前面创建的预制件有点问题,我们再来修改它,把预制件改成这样,如下图:
一定记得按上图修改,有的组件就删除,同有组件就添加进去,比如component -> rendering -> GUI Texture顺序添加显示图片。
按下面的图片拖动预制件到脚本代码的变量里,如下图:
按A、B、C的顺序搞好之后,这次大功告成,可以点击运行按钮了,然后在界面点击几下,就可以放置星星了,如下图:
到这里实现从游戏菜单切换到游戏主循环的过程。
https://blog.csdn.net/caimouse/article/details/51749579