自制游戏 (Unknown Mssing Game)十

我规划了一下所有的代码,使其写代码非常容易,基本就是无脑写了,下面我说一下主要的部分HomeScene:

这个脚本我传到了GitHub上了,它是控制这里的脚本:

这个地方也是第一个主要场景,我目前也只是写完了这个场景里的逻辑控制,这个脚本的代码主要长这样:

 int m_i = 0; // 控制流程的标志,一般就是控制游戏进程的,非常重要
    string[] strs = {"你好,欢迎进入工作室~", // str[0]
        "我是你的私人助理Comp",
        "你可以左右拉动屏幕来获取工作室的全貌",
        "现播报昨日工作进度和当前未处理事项:",
        "昨天是休息日,没有工作进度",
        "当前有一封未读邮件,发件人为Lee",
        "[玩家操作选择] 选择1 : Lee是谁?;选择2 :邮件内容是什么?", // strs[6]
        "Comp,Lee是谁,为何会给我发邮件?邮件内容是什么?", // strs[7]
...其他字符串
    GLabel m_dialog; // 显示字符串的面板
    GGroup m_mask_0; // 遮罩组
    GGroup m_mask_1; // 遮罩组
    GGroup m_personalData;
    GGroup m_mail; // 遮罩组
...其他控件
void Start() // 主要用来完成初始化和控件获得
    {
        UIPanel panel = gameObject.GetComponent<UIPanel>();
        GComponent view = panel.ui; // 整个UI的集合
        // 上面的对话框
        m_dialog = view.GetChild("Dialog").asLabel; 
        m_dialog.text = "";
        GButton nextButton = view.GetChild("NextButton").asButton; // 点击按钮文字继续走的按钮
        nextButton.onClick.Add(nextButton_Click);

        // 获取邮箱,是一个通用控件
        m_mail = view.GetChild("Mail").asGroup;
        m_mail.visible = false;
        GButton mailCloseButton = view.GetChild("MailCloseButton").asButton;
...其他初始化控件代码
void nextButton_Click()
    {
        if (m_i < 6) // 0_1~0_6 的前6句对话
        {
            ControlDialogue(); // 这个函数用来依次执行语句
        }
        else if (m_i == 6) // [玩家操作选择] 选择1 : Lee是谁?;选择2 :邮件内容是什么?
        {
            m_mask_0.visible = true;
        }
        else if ((m_i>=7) && (m_i<10)){ 
            ControlDialogue();
...控制“点击继续”按钮,用来控制行进逻辑
void button_1_1_Click()
    {

    }
    void button_1_2_Click()
    {

    }
    void button_1_1_1_Click(){
        m_mail.visible = true; // TODO:后面接2的剧情
    }
    void button_1_1_2_Click()
    {
        m_mail.visible = true; // TODO:后面接2的剧情
    }
...其他按钮绑定的逻辑
void Update() 这个函数以及下面函数是控制字幕的逐个出现的
    void ControlDialogue(){
    void OnFinish()

其中,m_i可谓重中之重,就是用它来代表游戏进度,它实际上是strs的下标,用来控制说哪句话,但是strs并不是仅仅只有话,有些字段只是一个占位符,是mask的占位符,用来让用户点击按钮选择。例如:

"搜寻结束,Lee是您的大学同学,他的本科生导师和您CURE项目的导师是同一个人,Lee的所有资料已经精简成简历,请问是听读还是阅读?",
        "[玩家操作选择] 选择1.1 :(更喜欢纸质阅读);选择1.1 :阅读", // strs[10]
        "显示档案资料系统中Lee的个人资料页,玩家点击关闭资料页窗口后。", // strs[11]
        "您已阅读完毕,请问是否需要阅读邮件内容?", // strs[12]
        "[玩家操作选择] 选择1.1.1 :看看吧 ; 选择1.1.1 :无事不登三宝殿 ; 选择1.1.2:不看", // strs[13]
        "直接打开邮件系统,显示邮件内容,玩家点击关闭邮件系统后。", // strs[14]
        "CURE项目竟然被做出来了,导师没有失踪,这几年她自己一个人完成了所有研究吗?", // strs[15]

我在每个需要转折的地方都做了一个注释,代表它是需要转折,实际上,这个strs完全照搬了脚本文档:

可见顺序是完全一样的,直接复制粘贴并稍作修饰就是代码了。

关于控件的命名则完全采用了脚本文档中的数字命名,按钮用最后一个数字作为区分,mask用前面的数字作为区分,例如:

[玩家操作选择] 选择1.1.1 :看看吧 ; 选择1.1.2 :无事不登三宝殿 ; 选择1.1.3:不看

这个选择界面,命名为Mask_1_1,里面有三个button,分别为:Button_1_1_1, Button_1_1_2, Button_1_1_3, 在控件获取的时候代码如下:

m_mask_1_1 = view.GetChild("Mask_1_1").asGroup;
        m_mask_1_1.visible = false;
        GButton button_1_1_1 = view.GetChild("Button_1_1_1").asButton;
        button_1_1_1.onClick.Add(button_1_1_1_Click);
        GButton button_1_1_2 = view.GetChild("Button_1_1_2").asButton;
        button_1_1_2.onClick.Add(button_1_1_2_Click);
        GButton button_1_1_3 = view.GetChild("Button_1_1_3").asButton;
        button_1_1_3.onClick.Add(button_1_1_3_Click);

基本上就是获取完控件后给按钮添加一个click函数,作为点击函数,而点击函数也只是在后面加上_click, 比较简单。

最终,它控制的就是如下界面:

而逻辑控制是怎么样的呢?如下:

void nextButton_Click()
    {
        if (m_i < 6) // 0_1~0_6 的前6句对话
        {
            ControlDialogue(); // 这个函数用来依次执行语句
        }
        else if (m_i == 6) // [玩家操作选择] 选择1 : Lee是谁?;选择2 :邮件内容是什么?
        {
            m_mask_0.visible = true;
        }
        else if ((m_i>=7) && (m_i<10)){ 
            ControlDialogue();
        }
        else if(m_i == 10){ // [玩家操作选择] 选择1.1 :(更喜欢纸质阅读);选择1.1 :阅读
            m_mask_1.visible = true;
        }
        else if(m_i == 11){
            m_personalData.visible = true;
        }
        else if((m_i >= 12) && (m_i < 13))
        {
            ControlDialogue();
        }
        else if(m_i == 13){ // [玩家操作选择] 选择1.1.1 :看看吧 ; 选择1.1.1 :无事不登三宝殿 ; 选择1.1.2:不看
            m_mask_1_1.visible = true;
        }
        else if(m_i == 14){ // 打开邮件系统
            m_mail.visible = true;
        }
        else if((m_i >= 15) && (m_i < 17)){
            ControlDialogue();
        }
        else if(m_i == 17){
            openMail();
        }
    }

就是通过判断m_i,也就是游戏进程,来控制语句的播放,mask的展开和关闭,邮箱的展开关闭等。

发布了159 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/HeroIsUseless/article/details/105056850