简述
在上一次上机中,我们已经设置好场景,下面我们做游戏的开始界面。视频教程主要是用NGUI操作,而我主要学习的是UGUI,因此这里的功能实现我主要改成UGUI。
操作过程
1. 渐隐渐现的效果。
参考:https://jingyan.baidu.com/article/e6c8503c4d3983e54f1a183c.html
-
设置一张图片,铺满界面。
-
导入SceneFadeInAndOut脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(CanvasGroup))]
public class SceneFadeInAndOut : MonoBehaviour
{
public float fadeSpeed = 1.0f;
private CanvasGroup canvasGroup;
private float alpha = 1.0f;
private static SceneFadeInAndOut instance;
public static SceneFadeInAndOut Instance
{
get
{
return instance;
}
}
// Use this for initialization
void Start()
{
instance = this;
canvasGroup = this.gameObject.GetComponent<CanvasGroup>();
}
// Update is called once per frame
void Update()
{
if (alpha != canvasGroup.alpha)
{
canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, alpha, fadeSpeed * Time.deltaTime);
if (Mathf.Abs(canvasGroup.alpha - alpha) < 0.05f)
{
canvasGroup.alpha = alpha;
}
}
UIHide();
}
//显示UI
public void UIShow()
{
alpha = 1.0f;
canvasGroup.blocksRaycasts = true;
}
//隐藏UI
public void UIHide()
{
alpha = 0.0f;
canvasGroup.blocksRaycasts = false;
}
}
- 检查运行结果。
可以逐渐隐藏图片
2.设置开始加载按钮和LOGO
- 将需要的图片修改成下图。
- 设置一个图片UI,把需要的图片放进去,调整一下大小与位置。
- 在原SceneFadeInAndOut脚本上进行修改。这里给出修改后的部分代码。还有一些简单的修改地方没有写。
void Start()
{
instance = this;
canvasGroup = this.gameObject.GetComponent<CanvasGroup>();
if (c == 0) { UIHide(); }
else if (c == 1) { UIShow(); }
else if (c == 2) { UIShow(); Invoke("UIHide",3) ; }
}
- 根据修改后的代码,需要调整参数。
隐藏UI的参数
显示UI
显示UI后消失
- logo和标题可以呈现渐隐渐现的效果。
3.设置按钮并为按钮添加声音
- 设置按钮,添加按钮图片。(简单,不细说)
- 设置一个空物体,给该物体添加添加audio source组件。
- 返回按钮,如图设置。
4.添加背景音乐
- 给主摄像机添加audio source组件。
- 在黄色区域添加bgm。
loop:不断循环音乐,一般要勾上。
问题及其修改
在实际操作中,New Game和Load Game这两个按键是隐藏的。需要在点击屏幕之后显示。
错误点:做出自动显示的。
修改方案:修改Press anykey的代码,New Game和Load Game改成一开始隐藏。
修改过程:
删除之前效果的代码,组件。
为Press anykey添加代码
public class PressAnyKey : MonoBehaviour
{
private bool isAnyKeyDown = false; //标志位,判断是否有键按下
private GameObject searchButton;
void Start()
{
searchButton = this.transform.parent.Find("searchButton").gameObject; //通过查找Press anykey的父类,查找父类中的Container,将New Game和Load Game按键的gameObject赋给 searchButton,之后可以对其进行隐藏、显示操作
}
// Update is called once per frame
void Update()
{
if (isAnyKeyDown == false)
{
if (Input.anyKey)
{ ShowButton(); }
}
}
void ShowButton()
{
searchButton.SetActive(true); //显示 searchButton
this.gameObject.SetActive(false); //隐藏press按钮
isAnyKeyDown = true; //修改标志位
}
}
根据代码,修改相关配置