RPG游戏《黑暗之光》流程介绍与代码分析之(一):游戏载入界面的创建

《黑暗之光》是一款中等大小的RPG游戏,在入门Unity后适合用来上手,了解一整套游戏开发流程以及游戏内的各种功能。借助几篇博客整理一下整体的开发步骤以及代码,方便自己回顾,也便于各位交流与讨论。

下载地址: http://www.manew.com/thread-90413-1-1.html  这是蛮牛的游戏开发网站,需要注册才能下载,如果没注册的用户,可以点击这个链接 https://download.csdn.net/download/s1314_jhc/10293262

所用Unity版本为4.6.9, 下载地址

整个游戏的场景大致分为3类:
  1. 游戏载入界面
  2. 角色选择界面
  3. 游戏实际运行场景
其中以第三部分最为重要,该部分包括角色控制系统、任务系统、道具系统、技能系统等等,在之后也会着重介绍该部分。 本篇博客先介绍第一部分,即游戏载入界面的创建。

场景创建大致分为四个步骤:
  1. 场景添加
  2. 镜头拉近效果
  3. 开始的UI界面
  4. 音效的添加

第一章 载入界面

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用于加载游戏,这些功能会在接下来的博客中进行介绍。

猜你喜欢

转载自blog.csdn.net/s1314_jhc/article/details/79601255
今日推荐