中文写代码?开始不信后来用中文写了剧情小游戏!嗯,真香~

简介: 你还不知道可以用中文编写脚本制作游戏?那还不赶紧点进来看看~

前言

Unity 2018 版本之后就支持中文版了,虽然还有部分关键字还没有翻译过来,但是中文版本对于英语不好的初学者已经非常友好了。官方也说了会在后续的版本持续进行翻译,并且使得翻译过来的词汇更符合我们的认知,争取做到见字知意。

一,安装汉化Unity

1.1 Hub安装:

打开Unity Hub,选择安装任意版本,将右侧滑动条拉到底部,勾选 ☑️ 简体中文,然后点击完成,等待安装即可:

1.2 安装语言包:

Download language package —— 下载语言包,下载官方语言文件 zh-cn.po(大家自行在官方下载即可,没有找到的同学评论去见吧)

将该文件,放至 Unity 安装目录下的 Editor\Data\Localization 目录中,没有 Localization 目录 就自己创建一个。

Windows:

Mac:

1.3 设置中文:

通过上面两步的任意一部设置后,创建新工程或打开现有工程,进行如下操作:

依次点击菜单栏中的: Edit (编辑器)→→ Preferences (首选项)→→ Language (首选项窗口中)→→ Chinese (中文)


设置后,如没有中文效果,重启 Unity 即可,就这么简单!!!


二,制作游戏前的准备

2.1 创建脚本:

按照习惯创建”脚本“文件夹,然后创建C#脚本并命名为”中文脚本“:

2.2 搭建场景:

  1. 创建UI --> Image(图像) 作为背景,颜色修改为灰色,并将其铺满屏幕;
  2. 创建UI --> Text(文本) 用来显示内容,字体大小设置为48,也铺满屏幕;
  3. 创建UI --> Button(按钮) 用来做选择,自身大小设置为(400,200),子物体字体设置为62;
  4. 复制一个按钮,并将两个按钮分别放到左下角、右下角,如下图所示;

设置好后将新建的UI组件全部重命名,分别为:“背景图片”,“内容文本”,“按钮A”,“按钮B”

三,使用中文编辑脚本

使用编辑器打开刚刚创建的”中文脚本.cs“文件:

3.1 使用举例:

// 命名空间起别名
using 文本 = UnityEngine.UI.Text;

// 定义
public 文本 内容文本;

3.2 游戏逻辑:

可以看到下面脚本,除了关键字和官方提供的API,需要我们自己写的地方几乎用的全都是中文了,有没有感觉到很亲切?

using UnityEngine;
using 按钮 = UnityEngine.UI.Button;
using 文本 = UnityEngine.UI.Text;
using 布尔值 = System.Boolean;

public class 中文脚本 : MonoBehaviour
{
    public 文本 内容文本;

    public 按钮 按钮_A;
    public 按钮 按钮_B;
    
    void Start()
    {
        内容文本.text = "游戏开始\n";
        显示或隐藏按钮(true);
        情景_1();
    }

    void 情景_1()
    {

        内容文本.text +=
            "你惊恐的瞪大了眼睛望着四方,屋里很空,只有一个大衣柜," +
            "\n一张桌子,桌子上有一些食物。你昏睡了好几天,现在饿极了。" +
            "当你刚要拿起食物吃掉的时候,看到了旁边有一条纸条。"+
            "\n\n" +
            "A.纸条正面:" +
            "\n你是第六个来到这的,作为这里的主人,我有必要为客人准备点东西这些食物就当我的一点意思。" +
            "快吃吧,你一定饿极了。吃饱了才有力气回家。还有,千万记住,屋外有恐怖的东西,别出去。会有人来救你! ------ 主人。" +
            "\n\n" +
            "B.纸条反面:主人的话是假的!别相信他!快跑,衣柜里有通道!食物被下毒了,你吃掉会死的!" +
            "别待在屋里,一会会有僵尸围住你的! ------无名人。"+
            "\n\n\n 请点击下方按钮做出你的选择...";

        按钮_A.onClick.AddListener(() =>
        {
            内容文本.text = "你选择了A:" +
                        "\n\n你没心没肺的把食物吃掉了~_~露出了满足的微笑,最后因为食物里有含笑半步颠。" +
                        "\n\n游戏结束。" +
                        "\n\n点击按钮B,复活继续游戏~";
        });
        
        按钮_B.onClick.AddListener(情景_2_内容);
    }


    void 情景_2_内容()
    {

        内容文本.text = "你选择了B:" +
                    "\n\n你颤抖的手打开了衣柜,果然有个密道。你小心的走进密道,害怕有什么恐怖的东西突然袭击。密道里有两间屋子:" +
                    "\nA.左边的门半掩着,门缝里传出花的香味。" +
                    "\nB.右边的门敞开着,你看到屋里也有一个密道,但是却阴森无比。" +
                    "\n\n\n 请点击下方按钮做出你的选择...";
        
        按钮_A.onClick.AddListener(() =>
        {
            内容文本.text = "你选择了A:" +
                        "\n\n你打开半掩着门,沿着花香寻去看到一个长相倾国倾城的美女,她露出了笑容叫你过去并亲了你一下," +
                        "最后因为她是嘴唇上涂了毒,你不省人事。" +
                        "\n\n游戏结束。" +
                        "\n\n点击按钮B,复活继续游戏~";
        });
        
        按钮_B.onClick.AddListener(情景_3_内容);
    }

    
    void 情景_3_内容()
    {

        内容文本.text = "你选择了B:" +
                    "\n\n你选择了右边,那条阴森的地道.你先是摸着黑一步一步的往前走。" +
                    "地道上的某个楼梯一下绊倒你,你痛苦的跌倒在地上。正在你抱着头准备站起来的时候,你又发现了一张纸条。" +
                    "纸条上画着两个路标:" +
                    "\nA.指向左边,左边有几盏灯,不知通往何方。" +
                    "\nB.指向右边。右边没有灯,是一眼望不到头的黑暗!" +
                    "\n你没有丝毫头绪的看了看左右两边。这时你隐约看到右边的尽头是一扇门,说不定能逃出去!" +
                    "但是这么做太冒险了!你犹豫不决。"+
                    "\n\n\n 请点击下方按钮做出你的选择...";
        
        按钮_A.onClick.AddListener(() =>
        {
            显示或隐藏按钮(false);
            内容文本.text = "你选择了A:" +
                        "你一向害怕黑暗,好歹有条光明的路,你毫不犹豫的跑了过去。正在你觉得能跑掉的时候," +
                        "灯光都灭掉了,你身后不知啥时候长出一株滕蔓。高的惊人,粗的惊人,生长速度更是惊人!" +
                        "它迅速抓紧你,你失去了呼吸……。"
                        +"\n\n游戏结束。";
        });
        
        按钮_B.onClick.AddListener(() =>
        {
            显示或隐藏按钮(false);
            内容文本.text = "你选择了B:" +
                        "\n\n你怕黑,就去左边的走廊悄悄拿了一盏灯,转身跑向右边。跑到了尽头,到了一个较为安全的空间,可以休息下喘口气了~" +
                        "\n\n未完待续...";
        });
    }
    
    
    void 显示或隐藏按钮(布尔值 显示)
    {
        按钮_A.gameObject.SetActive(显示);
        按钮_B.gameObject.SetActive(显示);
    }
}

四,完善配置运行游戏

4.1 配置脚本:

将“中文脚本” 挂载到 “背景图片”上:

4.2 运行游戏:

已经可以玩耍啦~

感兴趣的同学可以进行下优化,比如:文本逐字显示,添加滑动功能使得故事梗概齐全,添加音效等等。


五,本文小结

综合上述,可以看出来不管是Unity编辑器,还是处理游戏的逻辑的脚本,都可以支持很大一部分的中文了。这对于英文不太好的同学学习入门就非常友好了,可以帮我们解决很大烦恼。

怎么样是不是想动手试一试啊? 那还不操作起来。

温馨提示:中文脚本还是尽量不要在正式项目中使用哦。另外喜欢剧情游戏的小伙伴们,可以继续编写下去哦,看看你是不是评论区里设计剧情最靓的仔~
相关文章
|
数据可视化 BI
帆软BI开发-Day2-趋势图的多种变形
帆软BI开发-Day2-趋势图的多种变形
525 0
|
前端开发 JavaScript API
React团队回应用Vite替换Create React App的建议
React团队回应用Vite替换Create React App的建议
399 0
|
10月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
222 1
|
关系型数据库 芯片
ovp过压过流保护芯片,大电流限流,高压,选型大齐全
本文介绍了过压保护(OVP)和过流限流保护(OCP)的基本概念及其应用场景,如蓝牙耳机、充电宝等。文中推荐了几款平芯微的OVP/OCP保护芯片,包括单OVP芯片PW1600、W2609A、PW2605,以及OVP和OCP二合一的PW1605、PW1558A、PW1515等,详细列出了各芯片的主要特点和适用范围。
ovp过压过流保护芯片,大电流限流,高压,选型大齐全
|
安全 网络协议 网络安全
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
27516 0
|
关系型数据库 MySQL
MySQL中的字符串函数有哪些?
本文介绍了几个常用的字符串函数,包括计算字符串字符数的`CHAR_LENGTH`、计算字符串长度的`LENGTH`、合并字符串的`CONCAT`和`CONCAT_WS`、替换字符串的`INSERT`,以及字母大小写转换的`LOWER`、`LCASE`、`UPPER`和`UCASE`。每个函数都有详细的说明和示例。
376 2
MySQL中的字符串函数有哪些?
|
机器学习/深度学习 人工智能
阿里轨迹可控版Sora,告别抽卡,让视频生成更符合物理规律
【8月更文挑战第26天】阿里团队新推出的Tora视频生成模型是对先前Sora模型的重要升级。Tora通过引入轨迹控制机制,极大提升了视频中物体运动的真实性和准确性。其核心技术包括轨迹提取器、运动指导融合器及空间时间扩散变换器,共同确保视频既高质量又流畅。实验表明,Tora在清晰度、细节表现力及运动轨迹控制上均有显著进步。尽管如此,模型训练复杂度和轨迹理解能力仍有待优化。[论文](https://arxiv.org/pdf/2407.21705)
228 2
|
前端开发 JavaScript 中间件
React状态管理库—— zustand 为啥这么简单易用🚀
React状态管理库—— zustand 为啥这么简单易用🚀
|
存储 安全 Java
使用SimpleDateFormat进行日期格式化
使用SimpleDateFormat进行日期格式化
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
393 0