《黑暗之光》是一款中等大小的RPG游戏,在入门Unity后适合用来上手,了解一整套游戏开发流程以及游戏内的各种功能。借助几篇博客整理一下整体的开发步骤以及代码,方便自己回顾,也便于各位交流与讨论。
下载地址:
http://www.manew.com/thread-90413-1-1.html
这是蛮牛的游戏开发网站,需要注册才能下载,如果没注册的用户,可以点击这个链接
https://download.csdn.net/download/s1314_jhc/10293262
所用Unity版本为4.6.9,
下载地址
整个游戏的场景大致分为3类:
- 游戏载入界面
- 角色选择界面
- 游戏实际运行场景
其中以第三部分最为重要,该部分包括角色控制系统、任务系统、道具系统、技能系统等等,在之后也会着重介绍该部分。
本篇博客先介绍第一部分,即游戏载入界面的创建。
场景创建大致分为四个步骤:
- 场景添加
- 镜头拉近效果
- 开始的UI界面
- 音效的添加
第一章 载入界面
1.1 环境搭建(模型导入,水面、天空的添加)
环境搭建这部分主要是场景设计师的工作,我们直接使用搭建好的场景。搭建好的场景在Prefab——>Map中,效果如下
将Camera移动到与当前场景,如下图。点击Camera,点击GameObject——>Align with view。
此时,摄像机就显示为当前Camera所覆盖的场景,即为开始界面的场景
在游戏中,鼠标的图形也需要进行修改。在File——>Build Setting——>PlayerSetting,更改默认鼠标
此时在Game模式下我们只能看到添加进来的模型,为了更逼真于实际场景,我们需要额外添加水面和天空,从Import Package——>Water(Basic)添加水面,调节高度至适宜的位置。与Water类似,我们可以导入天空盒子Skybox,添加进Camera中,如下图所示
1.2 镜头的缓慢拉近
这部分我们创建一个开场动画,为了实现这一效果,我们对需要控制Camera的移动,在Camera中新建一个脚本,输入
using UnityEngine;
using System.Collections;
public class MoveCamera:MonoBehaviour {
public float speed = 10f; //运动速度
private float endZ = -20f; //结束位置
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (transform.position.z < endZ) //当前相机位置不到
{
transform.Translate(Vector3.forward*speed*Time.deltaTime);}
}
}
实现相机Z位置从-40到-20的移动,再加上运动速度,即可实现镜头拉近的效果。
1.3 UI界面
在镜头拉近效果结束之后,我们需要实现用户的交互功能,包括新建、加载角色信息等,需要用到UI功能。新建一个NGUI——>Open——>Prefab Toolbar,实现
开始的UI效果。
添加Atlas Maker,将一些按键素材添加进来。
新建几个Sprite,将对应素材导入,可以得到一个简易的UI界面,如下
在实际操作中,New Game和Load Game这两个按键是隐藏的。需要在点击屏幕之后显示,因此先实现Press anykey的功能。
为Press anykey新建一个脚本
输入
using UnityEngine;
using System.Collections;
public class PressAnyKey:MonoBehaviour {
private bool isAnyKeyDown = false; //标志位,判断是否有键按下
private GameObject searchButton;
void Start(){
searchButton = this.transform.parent.Find("Container").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; //修改标志位
}
}
即可,结果如下,当在屏幕按下任意键(或鼠标点击)时,出现New Game与Load Game
之后将解决按下New Game和Load Game的操作
为Container创建一个脚本控制这两个按键的操作
代码如下
using UnityEngine;
using System.Collections;
public class ButtonContainer : MonoBehaviour {
public void PressNewGame()
{
//to do: 加载选择角色的场景,之后补充
}
public void PressLoadGame()
{
//to do: 加载play场景,获取之前的数据,之后补充
}
}
即可
1.4 音效的加入
在UIRoot中,加入背景音乐。在UIRoot中添加Audio Source,将背景声音文件拖入。
对于按键操作,在按键中添加UIPlay Sound,拖入按键声即可,设为OnClick,即点击播放。
(
PS:若不在UI中进行操作,需要在GameObject中添加AudioClip,拖入声音文件。之后在Script中对所按的键进行判断,通过PlayOneShot调用AudioClip。通过UI相当于把按键判断简化了。)
总结:本篇博客实现了开始场景的创建,该部分实现后,New Game按钮跳转至角色创建,Load Game用于加载游戏,这些功能会在接下来的博客中进行介绍。