RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现

第二章 角色创建

上一章中完成了初始化的场景界面的创建,本章就接着上一篇博客的内容,介绍角色创建的方法。

2.1 角色创建的UI界面

角色创建的背景采用与加载界面所用背景相同,并且Camera不需要移动。
创建的UI界面与之前类似,其中输入名字的地方用Prefab Toolbar中的Simple Input Field实现,效果如下

2.2 角色的创建与显示

资源包内配置了两个角色,分别是魔法师和剑士。这节要实现模型的导入工作,以及点击前后按钮切换角色的功能。
将角色Magician_No_Animation拖入场景,调节合适的位置信息。 之后将Magician_Animation中的idle部分拖入Animation之中,使静止的图像有了动作。之后存入Prefab之中,同理可添加剑士的idle信息。

为了实现角色的更换,我们需要借助preview按钮和next按钮实现魔法师和战士的切换,因此我们建立一个GameObject以控制角色选择,命名为CharacterCreation,新建脚本CharacterCreation
using UnityEngine;
using System.Collections;
public class CharacterCreation : MonoBehaviour {
    public GameObject[] characterPrefabs;    //读取角色信息
    private GameObject[] characterGameObject;    //获取characterPrefabs信息
    private int length;    //共有的角色数
    // Use this for initialization
    void Start () {
        length = characterPrefabs.Length;    //从导入的两个Prefab文件中获取共有的角色数
        characterGameObject = new GameObject[length];
        for (int i =0; i < length; i++)
        {
            characterGameObject[i] = GameObject.Instantiate(characterPrefabs[i],transform.position,transform.rotation) as GameObject;    //把characterPrefabs[i]中的信息赋值给 characterGameObject[i]
        }
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}
上述代码中创建了characterPrefab数组来储存两个角色的idle。因此我们指定size=2,并将两个idle信息拖入其中,运行后结果如下右图,但两个角色都显示出来了,需要进行修改。

为了解决这个问题,我们规定在刚开始选择角色时,只需要设置一个角色显示,其余的隐藏。
在CharacterCreation中添加一个函数
private int selectedIndex = 0;    //当前职业
void UpdateCharacterInformation()
    {
        characterGameObject [selectedIndex].SetActive (true);    //显示当前角色
        for (int i = 0; i<length; i++)
        {
            if(i != selectedIndex){characterGameObject [i].SetActive (false);}    //判断是否是当前角色,若不是,则隐藏
        }
    }
即可

2.3 角色的切换

我们通过控制前后按钮实现角色切换,在CharacterCreation中创建两个函数
    void PressNextButton()    //按下Next按钮
    {
        selectedIndex++;    
        selectedIndex %= length;    //将selectedIndex与length求余,若等于0,则选取下一个,若超出长度,自动变为初始角色,很巧妙的方法!
        UpdateCharacterInformation ();
    }
    void PressPreviewButton()
    {
        selectedIndex--;
        if (selectedIndex < 0) {selectedIndex = length-1;}
        UpdateCharacterInformation ();
    }
即可

对UI按键指定一个方法可以直接在On Click事件中添加 ,将方法method改为CharacterCreation中的PressNextButton()以及PressPreviewButton()即可

完成了上述两个Scene的创建后,我们留下了几大接口有待完善,即
  1. 开始场景到角色建立场景的切换
  2. New Game中保存创建角色信息并创建新的游戏场景
  3. 加载之前保存的信息,回到存档处(Load Game)
这些是之后所要解决的问题。

总结:第一篇和本篇博客介绍的部分均为游戏的初始部分,真正对游戏性进行修改的代码将从第三篇开始,包括基础的移动,各种系统的加入,难度会进行提升,篇幅也将会变得较长。

猜你喜欢

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