【Unity3d】带你制作一款类似于金山打字之生死时速的小游戏

       上篇文章博主介绍了如何制作一款类似于金山打字的2d小游戏,最近看到了金山打字之生死时速的玩法,决定来复刻一下,还是先分析一下我们要实现哪些功能,第一,打字和小球运动要保持同步进行;第二,小球能够实现距离移动和转向;第三,我们要给定英语句子文本内容;第四,设置打字跟随方便玩家。制作过程如下(申明,未经作者允许禁止转载):

       第一步,地图搭建,博主搭建的如下图,素材取自Asset Store的Free Low Poly Nature Forest,搭建一个闭环的赛道即可,为和博主下述代码尽量契合,建议搭建一个矩形闭环赛道,图中红色小球为控制角色。

        第二步,给小球贴代码,新建C#文件,重命名为PlayerController,双击打开cs文件,代码如下:

using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
    public Transform trans;//获取Transform
    public Text[] text;//获取文本,包括英语句子文本和计时器文本
    public int index = 0;//数组脚标
    public string EnglishSentence, alphabet;//英语句子,转化
    public float distance;//小球移动距离
    public int count = 0;//计时器初始化
    // Start is called before the first frame update
    void Start()
    {
        text[0].text = EnglishSentence;//将英语句子内容和文本绑定
    }

    // Update is called once per frame
    void Update()
    {
        MoveMent();
        if (index == 0)//初始化打字跟随标记
        {
            text[0].text = "<color='#0057FF'>▶</color>" + EnglishSentence.Substring(0);
        }
        if (index == 1)//初始化打字跟随标记
        {
            text[0].text = EnglishSentence.Substring(0, 1) + "<color='#0057FF'>▶</color>" + EnglishSentence.Substring(1);
        }
        Timing();
    }
    void MoveMent()
    {
        alphabet = EnglishSentence.ToLower();//将大写转化为小写
        //alphabet = EnglishSentence.ToLower().Replace(" ", "");//去掉空格
        if (Input.GetKeyUp(alphabet[index]+""))//判断是否按下指定字母
        {
            //text[0].text = "<color='#FFFFFF'>" + EnglishSentence.Substring(0, index + 1) + "</color>" + EnglishSentence.Substring(index + 1) + "</color>"; //字母颜色跟随,此次存在问题,已注释,后续采取标记跟随  
            if (index >= 1)//标记跟随
            {
                text[0].text = EnglishSentence.Substring(0, index+1) + "<color='#0057FF'>▶</color>" + EnglishSentence.Substring(index+1);
            }         
            if(index == 16)//转向
            {
                trans.Rotate(0, -90, 0, Space.Self);
            }          
            if (index == 32)//转向
            {
                trans.Rotate(0, -90, 0, Space.Self);
            }
            if (index == 49)//转向
            {
                trans.Rotate(0, -90, 0, Space.Self);
            }
            if (index == 65)//转向
            {
                trans.Rotate(0, -90, 0, Space.Self);
            }
            if (index == 80)//转向
            {
                trans.Rotate(0, -90, 0, Space.Self);
            }
            trans.Translate(distance, 0, 0, Space.Self);//移动指定距离
            if (alphabet[index + 1] == ' ')//判断英语句子的空格
            {
                index++;
            }
            index++;
     
            if (index == 83)//结束
            {
                Time.timeScale = 0f;//运算时间处理变为0
            }
        }
    }
    private float nextTime = 1;
    void Timing()//计时器
    {
        if (Time.time >= nextTime)
        {
            count += 1;
            nextTime = Time.time + 1;
        }
    text[1].GetComponent<Text>().text = "时间:" + count;//显示
    }
}

       第三步,在检视面板进行下图设置,图中上述未提到的不用管(博主的其他功能而已,会在后续文章介绍),新建两个文本拖入(文本需要自己调节),设置英文句子内容,句子中间有逗号也不怕,不过打字的时候就需要打逗号了,如果不需要打逗号,需要在上述代码中继续进行判断;其次,设置Distance,根据自己项目设置,这样一个类似于金山打字之生死时速的小游戏就做好了,运行即可。

猜你喜欢

转载自blog.csdn.net/m0_51942776/article/details/127709747