几行代码,将AI NPC集成到Unity

在本文中,我们将展示如何在 Unity 引擎中使用大型语言模型 (LLM) 🎮。我们将使用 LLMUnity(https://github.com/undreamai/LLMUnity) 包,并查看一些使用仅几行代码即可设置对话交互的示例!

免责声明:本文来自 LLMUnity 的作者。如果您有任何意见/建议,请通过打开一个 GitHub issue(https://github.com/undreamai/LLMUnity/issues) 🤗 与作者联系!

为什么在游戏中使用 LLM?

目前,几乎所有 PC 游戏交互都基于多项选择对话。这是一种非常原始的交互类型,自 PC 游戏的早期时代就已建立。游戏中的 LLM 可以构建更身临其境的体验,因为它们可以允许与 PC 游戏元素或角色 (NPC) 进行智能交互。*

以 Skyrim 为例,Skyrim 是最成功的 RPG 之一。当你第一次遇到 Lydia 时,Lydia 是你可能在游戏中大部分时间都作为同伴一起度过的 NPC,你只有三个可能的对话选项。如果你想了解更多关于她的信息或讨论其他事情怎么办?

与 Lydia 的互动,Lydia 是 Skyrim 中的 NPC。屏幕截图来自游戏

这就是 LLM 发光发热的地方。你可以描述 AI 的角色以及他们对世界的了解(你已经拥有了这些信息作为游戏叙事的一部分),它们可以提升对话。

基于对话的与 Lydia 交互示例

ChatGPT 怎么样?

大多数访问此页面的人都会熟悉 OpenAI 发布的 ChatGPT,并且会见证与 LLM 的交互是多么自然和强大。那么为什么不在游戏中直接使用 ChatGPT 呢?

  • ChatGPT 的大规模使用成本💸。每次交互的成本都很低,但当大规模进行时,对于成千上万的用户,每次交互数千次,成本就不容忽视。
  • 它会造成依赖🔗。如果由于任何原因 ChatGPT 停止工作,或者价格上涨,开发人员无力承担,游戏就会崩溃。
  • 开源 LLM 具有与 ChatGPT 相当的准确性🏎️。我还没有找到标准化的基准来证明这一点,但 Meta(Llama)和 Mistral 发布的模型在质量上似乎与 ChatGPT 具有相似的准确性。
  • LLM 的尺寸越来越小🤏。最近的 Mistral 7B 击败了 Llama2 13B,并在许多基准测试中优于 Llama 34B。量化方法进一步推动了这一限制,将模型大小缩小到一定程度,使其可以在任何最新的 PC 和 GPU 上使用。使用 Q4_K_M 方法量化的 Mistral 7B (模型(https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF),量化(https://github.com/ggerganov/llama.cpp/pull/1684)) 运行最多需要 7GB RAM!

欢迎使用 LLMUnity!

LLMUnity(https://github.com/undreamai/LLMUnity) 是一个允许在 Unity 引擎中运行和分发 LLM 模型的包。

它建立在很棒的 llama.cpp(https://github.com/ggerganov/llama.cpp) 库之上,该库允许在没有外部软件依赖的情况下使用 LLM,以及 llamafile(https://github.com/Mozilla-Ocho/llamafile),它以跨平台方式部署 llama.cpp。

LLMUnity 提供以下功能:

  • 💻 跨平台!支持 Windows、Linux 和 macOS
  • 🏠 在没有互联网访问的情况下本地运行,但也支持远程服务器
  • ⚡ CPU 和 GPU 上的快速推理
  • 🤗 支持主要 LLM 模型
  • 🔧 易于设置,只需一行代码即可调用
  • 💰 个人和商业用途免费使用

工作原理

LLMUnity 在后台使用 llama.cpp 服务器。服务器接收 POST 请求,在 LLM 上运行推理并返回回复。服务器由 llamafile 编译成可执行文件,并且可以基于 cosmopolitan 库在不同的操作系统(Windows、Linux、MacOS)上使用。
LLMUnity 实现了一个客户端,该客户端发送 POST 请求并将结果传递给你的 Unity 应用程序。

如何设置

LLMUnity 包可以使用 GitHub URL 作为自定义包安装,也可以作为 Unity 资产安装(待资产商店批准)。说明提供 这里(https://github.com/undreamai/LLMUnity?tab=readme-ov-file#setup) 🛠️。

开发人员可以创建一个 LLM 或 LLMClient 对象来使用 LLM 功能。LLMClient 类仅处理客户端功能,而 LLM 类继承 LLMClient 类,并额外处理服务器功能。

然后,开发人员可以指定 LLMClient / LLM 属性:

  • prompt. 这指定了 AI 的角色。
  • 玩家/AI 名称 (可选)。可以为角色定义玩家和 AI 名称。
  • 流功能 (可选). 流功能允许 Unity 应用程序在模型实时生成输出时接收输出。如果禁用,Unity 应用程序将在模型完全生成回复时接收回复。
  • 其他模型选项 (可选)。有一些 更多模型选项(https://github.com/undreamai/LLMUnity?tab=readme-ov-file#hugs-model-settings) 可以由专家用户直接指定,这些选项由 llama.cpp 服务器使用。

以及 LLM 仅有的属性:

  • model. 这指定了要使用的 LLM。Mistral 7B Instruct v0.2 模型 由 TheBloke 量化 可以直接在 Unity Inspector 中下载为默认模型。否则,可以加载 llama.cpp 支持的任何 LLM。llama.cpp 使用 gguf 格式,并提供 转换脚本 用于 HuggingFace 模型。如果你想避免安装 llama.cpp 并自己进行转换,可以使用 TheBloke 已经转换好的模型 💣。
  • 运行资源 (可选)。你可以指定用户应用程序可以使用多少个 CPU 线程,以及 GPU 将运行多少个模型层。如果用户不支持 GPU,则将使用 CPU。

除非你想亲自动手,否则你可以简单地按下“下载模型”并定义提示 😌!

可以在 LLM 脚本中参数化的不同选项

如何使用

现在让我们进入有趣的部分 🎢!

LLMUnity 的编写使得它可以使用最少的代码。你所要做的就是构造一个 LLM 对象,然后使用以下方法与它进行交互:

_ = llm.Chat(message, HandleReply, ReplyCompleted);

其中:

  • message: 一个包含用户输入的字符串对象
  • HandleReply : 一个以字符串类型接收模型回复的方法。在此函数中,你指定如何处理回复。如果启用了流功能(默认行为),此函数将接收实时回复(在模型生成回复时),否则它将接收整个回复(一次)。
  • ReplyCompleted (可选):没有参数的方法。当模型完成回复生成时,将调用此函数。

基本功能

下面展示了一个最小示例🚂。在这里,我们发送一条消息“Hello bot!”,并在控制台中显示模型的回复:

using UnityEngine;
using LLMUnity;

public class MyGame : MonoBehaviour{
  public LLM llm;

  void HandleReply(string reply){
    Debug.Log(reply);
  }

  void Start(){
    _ = llm.Chat("Hello bot!", HandleReply);
  }
}

调用 LLM  Chat 函数,并在模型完成回复时(以流式或非流式方式)异步接收回复,由 HandleReply 函数接收。

然后,你需要在 Unity 中创建一个应用程序,其中包含:

  • 一个用于 LLM 脚本的 GameObject。LLM 对象的属性在 Unity Inspector 中公开,可以按照上一节中的描述进行设置。

  • 一个用于你的 MyGame 脚本的 GameObject。在这里,你将在 Unity Inspector 中的 llm 属性中链接上面创建的 LLM GameObject。

然后… 就这样 ✨!

简单交互

现在让我们看一个演示基本交互的示例:

简单交互示例

这里我们有一个场景,其中包含:

  • 一个用于 LLM 脚本的 GameObject(如前所述)
  • 一个用于 SimpleInteraction 脚本的 GameObject
  • 一个 InputField(绿色),允许用户输入文本
  • 一个 Text 字段(蓝色),接收来自模型的回复

SimpleInteraction 脚本可以按如下方式实现:

using UnityEngine;
using LLMUnity;
using UnityEngine.UI;

public class SimpleInteraction : MonoBehaviour
{
    public LLM llm;
    public InputField playerText;
    public Text AIText;

    void Start()
    {
        playerText.onSubmit.AddListener(onInputFieldSubmit);
        playerText.Select();
    }

    void onInputFieldSubmit(string message)
    {
        playerText.interactable = false;
        AIText.text = "...";
        _ = llm.Chat(message, SetAIText, AIReplyComplete);
    }

    public void SetAIText(string text)
    {
       AIText.text = text;
    }

    public void AIReplyComplete()
    {
        playerText.interactable = true;
        playerText.Select();
        playerText.text = "";
    }
}

该脚本定义了以下函数:

  • Start: 当场景启动时,playerText 输入字段被选中,以便用户可以输入文本。一个监听器附加到 playerText,当文本提交时,它会调用 onInputFieldSubmit 函数。
  • onInputFieldSubmit : 当用户提交输入时,playerText 会被禁用,直到模型回复。模型输出字段 AIText 被清空,然后调用 LLM chat 函数。
  • SetAIText : 当模型生成一些回复时,会调用此函数,并将 AIText 文本设置为回复内容。
  • AIReplyComplete : 当模型完成回复时,会调用此函数。playerText 再次被启用并清空,以便用户可以输入下一个输入。

就这么简单,我们就可以拥有完整的 LLM 交互(完整的,而不是漂亮的,我知道 🙃)。你可以在 SimpleInteraction 示例(https://github.com/undreamai/LLMUnity/tree/main/Samples~/SimpleInteraction) 中找到这个示例。

多个 AI 功能

到目前为止,我们已经看到了与单个 AI 的交互。在实践中,我们将在游戏中拥有不止一个 NPC 🤖。解决这个问题的方法是创建一个 LLM 对象(如上所述),它处理服务器,但拥有额外的 LLMClient 对象,使用不同的提示为 AI 定义额外的行为。

一个展示此功能的示例可以在 ServerClient 示例(https://github.com/undreamai/LLMUnity/tree/main/Samples~/ServerClient) 中找到。这是上面代码的扩展,它使用一个 LLM 对象用于第一个 AI,并使用一个 LLMClient 对象(使用与第一个 AI 相同的服务器)用于第二个 AI(使用不同的提示)。

多个 AI 功能

聊天机器人

创建更像游戏的最终步骤是增强 UI 方面,因为你希望在你的游戏中拥有它们 🏰。我在这里不会详细介绍,因为它超出了 LLM 集成的范围。如果你对更复杂的 UI 感兴趣,你可以查看 ChatBot 示例(https://github.com/undreamai/LLMUnity/tree/main/Samples~/ChatBot),它创建了更令人愉快的交互,类似于消息应用程序。

消息应用程序风格的交互

结束语

就是这样!在本指南中,我们已经了解了如何使用 LLMUnity 包将 LLM 集成到 Unity 中,以及一些实际示例。我希望你发现它有用!请随时向我发送你可能有的任何问题/评论/建议,以改进本文或 LLMUnity 包 🙏。

原文:https://mp.weixin.qq.com/s/25CpLqXbsS0HmMMTpKDMzg

时代东风的遗存:中国台湾游戏衰亡简史

今年5月,中国台湾地区著名游戏厂商大宇资讯宣布,出于集团长期策略发展的考虑,计划出售其持有的《仙剑奇侠传》(除中国大陆以外地区)及《轩辕剑》(全球)的版权。

“仙剑奇侠传”系列是无数玩家的童年回忆。游戏于1995年推出,由姚壮宪先生主导开发。在台湾地区,它的销量突破20万,在大陆地区的正版销量超过30万,盗版传播量无法计算。它几乎是影响力最大的国产游戏,一定程度上,也是国产游戏的代表作。

《仙剑奇侠传》曾经创造了国产游戏难以想象的辉煌

比“仙剑”更早,1990年就首次亮相的“轩辕剑”系列版权同样被出售,这带给老玩家的感觉更为复杂。“轩辕剑”系列一度是最优秀的中文RPG。1994年的《轩辕剑2》奠定了全系列的历史感和丰富的文化内涵。1999年的《轩辕剑3:云和山的彼端》虽然剧情宏大、广受欢迎,却被评价为“赶工导致的半成品”,不少内容直到2017年才在移动版补完——此时,系列的口碑也下滑到了相当低的地步。在那之后,“轩辕剑”系列再也没有恢复往日的辉煌。

《轩辕剑》因其独特的风格广受喜爱

这两个命途多舛的系列在新时代有着类似的境遇。它们逐渐落后时代,脱离大众视野,后续单机作品在质量上越来越受到玩家质疑,手游改编也没有做出太大成绩。事实上,2021年,大宇就把《仙剑奇侠传》在中国大陆地区的版权出售给了中手游。

现在,事情更进一步。如果这次出售成功,“双剑”这两个已经存在近30年的国民级IP将彻底脱离大宇。

对很多玩家来说,这似乎意味着青春的终结。而对整个台湾地区的游戏产业而言,漫长的终结似乎早已开始——从20世纪八九十年代的意气风发,到21世纪初向大陆市场进发,再到如今的颓势,台湾游戏产业的低迷似乎已经无法逆转。而在这其中,既有各大厂商选择的结果,也是整个东亚地区时代浪潮的缩影。

1

早期台湾地区游戏产业的发展与日本息息相关。和许多“后来者”的处境相同,台湾的游戏行业也起始于灰色地带——也就是盗版。在台湾,早期“从业者”们不仅盗版游戏光盘,也凭借之前为欧美代工电子零件的经验,依托半导体产业仿制游戏家用机、街机和老虎机等硬件产品。当时台湾最流行的家用游戏机之一,是山寨任天堂FC(红白机)的“小天才”。它可以兼容当时的正版和盗版游戏卡带。

一位台湾玩家回忆,小时候和父母去逛夜市,在路边摊就能看到“小天才”和琳琅满目的游戏卡带。“你们现在估计都不信,在路边摊就能买到游戏机,”他在和网友交流时说,“但当时就是那么流行!”恰逢“忍者神龟”动画热播,他一眼就看中了Konami的《忍者神龟2》,便软磨硬泡让父母买了下来。那时,他和同学、亲戚之间小孩的交流,也是靠交换各种流行游戏卡带。每次和亲戚朋友见面,揣摩对方带着什么卡带,“就有一种宝物出现在面前的兴奋感”。

除了家用主机,20世纪70年代末到80年代初,台湾街头最流行的娱乐场所是摆满了山寨街机和老虎机的游戏厅。为了玩到热门游戏,玩家们会在街机厅排起长长的队伍。彼时的热门游戏包括《吞食天地》《快打旋风》等等,每次开打,围观者可谓人山人海,是很多玩家记忆中最引人注目的时刻。

但这类场所也有个问题——正经街机游戏和不那么摆得上台面的赌博活动鱼龙混杂。山寨赌博机的流行也给街机厅带来许多灰色暴利。这种现象很快引发负面社会反响,并招致了台湾地区行政管理部门从1982年持续到1987年的“游戏机禁令”。

这份禁令最初笼统地将游戏机分为“益智型”和“赌博型”。1981年10月,行政部门决定取缔“赌博型电玩”,禁止类似的游戏机在台销售和营业。同时,所有类型的街机和主机都被归于“进口管制货品”,但加工出口和外销不受限制。

1982年,行政部门突然决定全面禁止游戏机的销售和经营,撤销相关场所原有的合法证照。台湾地区进入5年的“游戏机全面禁绝期”。这种“一刀切”的管理方式,和大陆地区后来的“游戏机禁令”颇有相似之处。1987年,这份禁令被取消,而电子游戏娱乐场所被划归到教育部门管辖。教育部门发布了新的管理规则,对游戏机软硬件和经营场所发布了新的规定,主要方向转为保护青少年、使娱乐场所远离学校。这种从“全面禁止”到“未成年人保护”的转向,后来也在大陆出现。

“游戏机禁令”颁布后,台湾玩家的主要娱乐场所从街机厅转为家庭内部

对街机和游戏机的禁令变相促进了当时PC单机游戏的发展,而盗版游戏和主机仍通过地下市场流通。那段历史灰色而混乱,现今那些大公司在回顾自己的业绩时也往往避而不谈。歪打正着的是,因为盗版猖獗,进而显得“市场基础良好”,最终引起了日本游戏公司的注意。任天堂、世嘉等公司都开始尝试与台湾企业合作,试图用行货打开中文市场。但并不是每一家日厂都能获得成功,博优和任天堂达成了超过30年的合作,但世嘉尝试在台湾开设分公司的举措并没有获得多少成效。

无论结果如何,这些尝试拉开了台湾企业开始代理正版游戏的序幕,对一些知名作品的汉化和传播至关重要,也让参与代理的厂商在行业内逐渐站稳脚跟。

一些日后赫赫有名的厂商已经在此时崭露头角,比如1983年成立的智冠科技。20世纪80年代,智冠科技是最知名的台湾软件公司之一,它不仅和多达30多家日美厂商签订过代理协议,还曾经试图在台湾地区以“正版只卖3美元”(不超过4美元)的价格战同泛滥的盗版光盘竞争,抢占市场。大概10年之后,智冠科技试图在大陆重现这一行为,那时他们打出的广告词是“59元正版风暴”。

代理生意逐渐演变成模仿。1991年,智冠首度推出了模仿日本光荣游戏《三国志》的《三国演义》。之后数年,他们购买了金庸作品版权,陆续推出了以《笑傲江湖》《射雕英雄传》为主题的单机游戏。这些作品质量一般,但凭借题材的号召力,仍然收获了不少玩家。

1988年成立的大宇资讯,则是少数不以代理见长、而是以原创作品为主的公司。他们创办了以介绍大宇产品为主的月刊《软件之星》,并在1989年发售了长盛不衰的“大富翁”系列的首部作品。1990年,他们发行了第一款基于中文环境的角色扮演游戏《轩辕剑》。1995年,划时代的《仙剑奇侠传》发售并造成轰动。

历代“大富翁”中,最经典的应该要数《大富翁4》

造成这种轰动的原因是多方面的。最早一批台湾游戏开发者凭借自己的游戏经验与创意,产出了很多惊艳的作品。他们将中文世界耳熟能详的武侠、仙侠题材,同当时流行的JRPG玩法结合。不管是画面精度还是玩法上,作品都能和世界一线水平接轨——当时的游戏尚未完全进入拼机能、拼开发规模的年代,几十人甚至十几人的团队就可以制作出相当不错的商业作品。

此外,当时东亚地区发展不平衡,中文游戏又非常稀缺,使得台湾游戏产业在天时、地利、人和上都占尽先机。台湾之所以能成为盗版、代理乃至之后许多原创作品的萌芽之地,很大程度是因为在当时的中文环境下,它是唯一一个有条件密集接触到相对先进的游戏文化的地区,同时本地有硬件、软件上的技术能力去进行一些“借鉴”,进而发展到原创作品的研发。同一时期,虽然大陆地区已经处在改革开放初期,但经济发展程度和开放程度仍然不如台湾地区。以当时大陆居民的个人电脑和主机保有率,恐怕连盗版游戏都不一定能玩上,更不要说消费正版,乃至制作游戏了。而香港地区的地域与市场不仅比台湾更小,相对来说也没有太多游戏文化和技术上的积累。

就连国际上的竞争,在当时也没有那么激烈。1997年,韩国深陷亚洲金融风暴,暂时无力在游戏行业有所建树。日本游戏产业在东亚一直处在领先地位,但其主导的平台一直偏向主机。所以,台湾游戏得以在PC上顺利发展,依托当时的DOS系统制作了许多经典。

在这样的前提下,当玩家面前出现了这些讲着金庸、古龙的故事,画面精致艳丽、使用中文游玩的游戏,能立刻在海峡两岸掀起国民级的风潮,是自然而然的事。

1995年,家用电脑系统从DOS更新到更加开放、拥有强大多媒体处理能力的Windows,电脑游戏也随之开始迅猛发展。游戏开发变得越来越专业,越来越复杂,在新系统上开发和移植游戏都需要更专业的程序员,一批软件人才进入了游戏行业,进一步拓展了产业规模,一批新时代的游戏得以在两岸继续形成风尚。

所以,某种意义上说,台湾游戏产业在上世纪八九十年代的崛起,是早期游戏开发者的个人才华和外部环境共同作用的结果。根据台湾资策会产业研究所给出的估算,1998年台湾地区游戏市场的最终消费金额达到新台币28亿元(约合当年人民币6.93亿元)。相比之下,大陆地区第一份游戏产业报告统计,2001年游戏产值为1亿元人民币。

但这无法改变一个底层事实:台湾地区整体的市场环境其实先天不足,不仅规模有限,也存在一些管理上的顽疾,尤其是公司内斗非常严重。台湾内容创作者在梳理游戏行业历史时,往往将其概括为管理层的“走捷径”和“不尊重人才”。这些因素使得台湾公司纷纷向大陆市场,乃至更远的日韩、马来西亚市场进军,但频频遭到挫败。随着时间推移,大陆游戏行业的竞争力后来居上,台湾游戏行业辉煌的大厦也开始出现裂纹。

但那是之后的事情了,在八九十年代,台湾游戏还是一派蒸蒸日上的模样。

2

21世纪,游戏行业迎来了网络时代。各种“Online”游戏成为新的风尚。台湾厂商对形势的变化相当敏感,它们很早就开始代理、运营并开发网络游戏,积极尝试进入大陆市场,一度做出了相当不错的成绩。

《万王之王》通常被认为是“中国第一款图形网游”,它的前身是台湾开发者陈光明和黄于真共同开发的文字版MUD游戏。之后,游戏由曾代理过《三角洲特种部队3》的华彩软件进行图形化,并提供服务器和技术支持。1999年,图形版《万王之王》在台湾市场发售,2000年,华彩软件将游戏引进大陆,仅一个月时间便达到了万人同时在线的成绩。考虑到1999年的上网人数,这是个相当惊人的数字。

台湾厂商也代理了不少日本网游,其中比较知名的有华义国际代理的《石器时代》。这款回合制RPG游戏在引进台湾市场后就非常流行,于2000年12月在大陆开测后也大受欢迎。大宇游戏紧随其后,代理了Square Enix的《魔力宝贝》。

《石器时代》在海峡两岸都引发盛况

这一时期,韩国游戏产业另辟蹊径,在网游领域谋求发展,并很快弯道超车,制作出了《天堂》《龙族》《RO仙境传说》等优秀作品。一些台湾厂商嗅到了风潮的变化,比如成立于1995年的橘子游戏,尽管曾经凭借单机游戏《便利商店》获得过年度销量冠军,但一直无法同智冠、大宇等厂商竞争,后来,他们开始将目光投向网游,并凭借代理NCsoft公司的《天堂》获得巨大成功。

面对全球范围内网络游戏的火热,台湾厂商除了代理,也尝试过自研。很多经典单机IP都踏上了网游化历程。比如从2001年开始,智冠陆续推出了《金庸群侠传OL》《三国演义OL》《吞食天地OL》等作品。

网络游戏的流行和玩家的狂热,从过去网吧的盛况可见一斑。2021年,有台湾网友走访高雄市内的一家网咖(网吧)。网吧现在隐没在小巷中,非常安静,一排排古老的木纹电脑桌上摆着泛黄的白色旧电脑,上面贴着《魔兽世界》广告。而在2000年左右的网游全盛期,店里能购买价值2.4万元新台币(约合人民币5375元)的显示屏,最热闹的时候,狭窄的店面里挤下了17台机器,人群爆满。

曾经居住在附近的玩家说,那家网吧承载了他小学和初中的大部分回忆。“我还记得阿姨(老板娘)一直都在玩‘金庸’!”现在,他早已搬家多年,成为了两个女儿的父亲,每年还是会回去看一眼。

许多人都和他一样,对网游鼎盛时期的儿时旧事念念不忘:“还记得当年打《天堂》,有隔壁网吧的人过来‘真人PK’……”就连被父母逮住、哭着被揪回家的体验,在这些人到中年的玩家看来,也是难以忘怀的美好时光。

大陆也有很多玩家为这些台湾代理的网游痴迷。《石器时代》可以说是《热血传奇》出现之前最火的游戏。2003年,《魔力宝贝》拥有千万注册用户,吸纳了一大批不那么喜欢《热血传奇》高压PK环境的玩家。不仅如此,很多台湾厂商为了节省服务器成本,选择租借大陆门户网站——比如网易、新浪——的服务器。这也让后者看到了游戏的巨大潜力和商机。

然而,台湾网络游戏和代理网络游戏在大陆的辉煌并未持续很久,很快,它们在两岸都成为“回不去的年代”的产物。

原因是多方面的。比如说,一些大厂商转向偏慢,长期做单机的经历让它们对长线运营的游戏缺乏经验。智冠科技就是这类厂商的代表。比起研发,代理门槛低、来钱快,却对运营能力有一定要求。一些台湾厂商在这方面做得并不好,尤其是在最影响社区环境和玩家热情的打击外挂、私服等方面问题频出。很多韩国网游,包括前文提及的《石器时代》在台湾和大陆运营几年之后,都遇到了类似瓶颈,最终导致玩家流失。有台湾玩家在社交媒体上抱怨,“(厂商)代理新游戏后钱捞一拨,隔年就关服,一直重复相同操作”。这番言论是很多台湾代理商对网游运营不力的缩影。

线上游戏对服务器规模和网络技术都有一定门槛,台湾厂商在这方面的储备不足。不少玩家曾经针对频繁掉线、丢档和卡顿等问题提出抗议。1999年起在台湾架设服务器的《网络创世纪》,就曾经发生过玩家为了抗议连线质量不佳而在虚拟世界中“集体自杀”的事件。但艺电(即EA)台湾分公司对这类技术问题无能为力,只能等待远在美国的原厂支持。

《网络创世纪》也一度十分受欢迎

坦率地说,台湾游戏厂商很早就将目光投向大陆,他们的设想是,借助台湾先进的技术和开发经验,利用大陆相对低廉的人工,开发网络游戏,并面向用户群广阔的大陆市场进行运营。

2003年,有分析文章指出,台湾游戏厂商的布局逐渐以大陆为首要重点。几家头部厂商中,大宇资讯在大陆设置了北京网星艾尼克斯、北京寰宇之星,以及北京软星和上海软星。智冠的子公司游戏新干线在北京和上海都设有分部。曾开发《笑傲江湖》和《新神雕侠侣》的昱泉国际则主要以外包、和地方电信产业联合等形式展开游戏发行工作。华义则在北京开设偏重运营的子公司,并在四川开设软件研发中心。

但这些尝试并不都很顺利。首先,当时台湾游戏厂商的思路其实和台企在大陆建厂类似。但游戏作为文化产品,内容需要和它面向的市场人群喜好紧密相关,从设计、运营,到服务甚至定价,适合台湾的策略并不一定适合大陆。更何况,一些台湾游戏开发者总是习惯于将自己从已有市场得到的经验全盘应用于新市场——且不说习俗和习惯,光是人数上的巨大差距就足以引起质变。

其次,台湾游戏公司普遍规模较小,管理方式也比较朴实,进入大陆市场后往往会经历疯狂扩张,凭借巨大市场,分公司的规模和收入都经常数倍于台湾总公司。在这种对比下,大部分家族式的公司管理在扩张过程中纷纷出现问题——一方面,台湾来的管理人员未必有管理、带领大规模开发团队的经验;另一方面,在大陆运营的公司手握巨大收入,但因为远离总部,在话语权上往往处于边缘位置,分公司想夺权,总公司想摘桃子,最后导致内斗频繁。

大宇游戏曾经让这种内斗暴露在玩家眼前。2000年,包括“仙剑之父”姚壮宪在内的大宇游戏核心制作人员“北上”,在北京成立软星科技,后来为了在南方招揽人才,又成立了上海软星。但针对“仙剑奇侠传”的IP归属和应该由哪个小组制作,大陆分公司和台北母公司始终僵持不下,直接导致第二部和第三部“仙剑”的开发命途多舛。

内斗使得经典IP的主创似乎一直在夹缝中生存

让形势更严峻的是,当时大陆不少公司渐成气候,在代理和研发方面都成为台湾公司强有力的竞争者。看到网络游戏赚钱之后,一批上市公司纷纷入场。与网易、盛大、巨人这种公司对比,台企无论从公司规模,还是文化熟悉度,甚至企业氛围和工资上都没有优势。游戏开发者——无论是制作人还是普通员工——也不再将台湾游戏公司作为求职的优先选择。

在这样的环境下,原本外部环境赐予的良机不再,台湾游戏厂商逐渐丧失了在中文环境下无可替代的特质。很多原本由台湾代理到大陆的日韩游戏,随着大陆游戏行业的发展,也渐渐换成了大陆代理商。

与此同时,21世纪初也是电子游戏开始3D化的时代。台湾厂商自身的资金和技术积累都不足以跟上这个潮流,产品的视听质量比起同期的美日游戏都有较大差距。而此时,两岸玩家接触美日游戏早就没有从前那么难了。在比较之下,台湾厂商的竞争力进一步下降。

不仅如此,很多创作者仍然固守过去的2D回合制JRPG思维,难以适应网游时代社群化的设计和运营方式。如智冠科技这类曾经的头部厂商,比起自主研发,也更青睐于依靠IP价值代理和开发“快餐游戏”——各种根据《三国演义》等经典IP改编的粗糙作品,在短暂流行之后销声匿迹;他们甚至还尝试过成人Galgame,但显然对提升市场占有率帮助不大。

智冠科技CEO王俊博曾经总结过台湾厂商面临的困境。除了天时地利人和的问题,“最主要就是量的问题,市场的量、资本的量、产品的量”,“盛大、网易、完美、腾讯、搜狐都是很大的互联网企业,它们一起涌进游戏领域,带来了大量的资金。而台湾依旧是那几家小公司单打独斗”。

其实,单论每个公司的营收,这些台湾厂商仍然可以算是成功的。1999年,智冠一年营收只有6.9亿新台币(约合同期1.7亿元人民币),到了2011年,智冠集团全年营收78.7亿新台币(约合同期19.2亿人民币),十年来体量增长了十多倍。逐渐缩减的是厂商们在市场上的地位。内忧外患之下,台湾游戏行业在21世纪第一个十年过后,已经无可挽回地开始了下坡路。

3

2010年之后,随着智能手机的普及和《愤怒的小鸟》等游戏的成功,游戏行业逐渐进入手游时代。

台湾厂商很早就开始涉及手游,也维持着在中文环境中的相对优势:2G和3G网络、移动智能设备的普及在台湾要早于大陆。2003年,大宇资讯表示要“加码投资研发手机游戏,并打入大陆市场”;2005年,智冠科技成立了专门的“手机服务部”。

但问题仍然在于“规模”——在规模化的资本投入面前,台湾厂商的远见也好,在转型方面的努力也好,都显得非常捉襟见肘。

台湾地区的手游市场规模确实也不小。据统计机构DataEye在2023年发布的数据,台湾地区有2300多万人口,游戏玩家占比60%以上,是全球手游收入第5大市场。2023年1至9月,台湾手游市场内购总收入达18.3亿美元(约合133亿元人民币),同比基本不变;总下载量达2.63亿次,同比增长26%。

台湾手游内购收入在全球排名较高,但绝对值不高

然而,哪怕收入排名不错,两岸手游市场在绝对值上依然有巨大的差距。《2023年中国游戏产业报告》显示,大陆移动游戏市场全年实际销售收入为2268.6亿元人民币(约合312.5亿美元)。细分下来,仅休闲移动游戏的内购收入就有200亿元人民币(约合27.5亿美元)。台湾手游市场内购总收入哪怕加上DataEye少算的一个季度,也很难与这个规模相比。

具体到游戏公司,大宇、智冠等台湾头部厂商的资本规模和自研能力也远远落后于腾讯、网易这个级别的巨头。可以说,此时的台湾游戏产业已经基本没有翻盘可能。游戏公司哪怕转型成功,也只能依靠代理圈出自己的一小块地。而本地原创游戏愈发式微,主要依靠老IP改编吸引人气,市场的大头仍被韩国游戏、中国大陆游戏占据。

数据机构App Annie曾统计过2014年至2020年在台湾下载量最高的手机游戏。2014年的时候,台湾流行的手机游戏以轻度为主,最受欢迎的包括日本、美国开发的《跑跑姜饼人》和《旅游大亨》。2015年,韩国MMO《奇迹MU》、大陆开发的《列王的纷争》、台湾本地的《霹雳江湖》等重度游戏开始进入市场。2017年,重度游戏市场开始爆发。韩国老IP《天堂M》、Garena的《传说对决》、网易的《阴阳师》、IGG的《王国纪元》等均在此时上线。《天堂M》上线首月就创下了近10亿营收的纪录。与此同时,《命运:冠位指定》成为了收入排行榜前10名中仅有的日系游戏。

2018年,一度在欧美市场流行的超休闲游戏开始进入台湾市场。那一年的手游下载榜首是《旅行青蛙》,榜单上还有许多来自Voodoo、Lion Studios等超休闲游戏公司的产品。

2019年,莉莉丝《剑与远征》和《万国觉醒》都进入了台湾手游收入榜前10名。

2020年,台湾手游市场趋于饱和。手游用户增长放缓,受欢迎的产品则呈现出“IP大乱斗”的景象,收入榜前10名中,《灌篮高手》《RO仙境传说》《一拳超人》《传说对决》《天堂M》《奇迹MU》全都是IP衍生作品。可以说,如果没有强力IP加持,新作很难在这个红海崭露头角。类似的市场结构一直维持到今天。

2020年,台湾手游收入榜陷入“IP乱斗”

但拥有IP不等于能够掌握IP。由于在大陆已经基本没有自研和发行能力,台湾厂商几乎不再直接涉足大陆市场,大都通过IP授权的形式让大陆公司开发手游和网游。同时,因为资本和话语权的悬殊,这些持有IP的台湾厂商非常缺乏对制作方的约束力,使得许多换皮作品和不符合IP气质的作品大行其道。

这里不得不再次搬出“仙剑奇侠传”系列的遭遇。名义上,这个“国民IP”在业界仍然占有一定地位,但在中手游这样规模的公司手中,它在资本意义上的价值很可能微乎其微,更不要奢求原本的主创能有什么掌控力。这些年,“仙剑”IP的手游和网游都出了不少,质量却始终无法获得玩家认可。有的被玩家认为是换皮卡牌游戏,有的打着姚壮宪监制旗号、却让玩家觉得“突破下限”,“还以为在玩页游”。

“轩辕剑”IP也有手游化动作。2021年,网易游戏出品的正版IP授权手游《轩辕剑龙舞云山》上线,还请来了“轩辕剑之父”蔡明宏作为荣誉顾问。因为之前《阴阳师》的成功,不少玩家对这款画风唯美的游戏抱有期待。但到了2024年,它已经基本从玩家的讨论中销声匿迹了,只是还没有关服。

可以说,从网游到手游,让台湾游戏产业辉煌一时的时代机遇彻底消失了。而本地狭小的市场和在更广阔市场中竞争力的丧失,让厂商们很难再打翻身仗。既缺少拿得出手的作品,也没有运营上的建树,台湾厂商的辉煌彻底成为明日黄花。

4

曾经恢弘的都市衰落了,自给自足的聚落还在。在社交网络上搜寻台湾本地玩家对游戏行业的看法,不少人都将希望寄托在一些Indie game上。当网络和游戏引擎的发展进一步降低了开发游戏的门槛,一些具有特色和作者性的游戏开始崭露头角。

“台湾玩家想要好游戏,而台湾Indie开发者乐于承担创意风险。”——这句话可以用来形容台湾Indie game逐渐崛起的过程。

和其他地区一样,台湾也有自己的Indie game开发者组织。Indie game开发者分享会(IGDShare)是台北市规模最大的Indie game网络,刚开始只有几个人,每月举办小型线下聚会。但在过去三四年时间里,参与IGDShare的开发者人数已经增长到了数百名,还影响了台中、高雄等城市成立了自己的Indie game开发者团体。

一些小体量、非商业化开发团队在大陆及其他市场也打出了自己的名声。日头游戏曾凭借水墨武侠风格的《说剑》,以及画风可爱的《Carto》引起大陆玩家注意。其中《说剑》更是在App Store登上超过100个国家和地区的编辑推荐榜。

《说剑》的水墨风格令人耳目一新

还有一些团队在制作和发行上都瞄准了更广泛的市场。《失落迷城:群星的诅咒》是一款由台湾艾可米游戏工作室开发的类“魂”游戏,画风非常“维京”,在全平台、全球范围内都获得了不错的口碑。制作人老杨在上世纪90年代台湾单机游戏的鼎盛时期度过了自己的青少年,也曾在MMO和手游公司就职,之后离职自己创业,算是将单机时代的梦想延续了下来。极度边缘工作室则在2021年推出了《记忆边境》,以有限的资源在动作系统上做出了不错的创新。

大宇资讯也逐渐转向了更小成本的单机游戏制作。旗下的“女鬼桥”系列以真实校园传说为题材,经常以Indie game身份参与各种游戏展,在Steam上收获了“特别好评”。5月28日,大宇资讯董事长涂俊光在社交平台上发布文章,表示“女鬼桥”系列是近2年大宇自研游戏中唯一一款受市场认同的;而他2014年接任大宇时,“轩辕剑”“仙剑”等知名作品已是20年前的事,如今,玩家的质疑与批评影响了开发团队的积极性。有人推测,在出售“双剑”版权后,大宇资讯的重心很可能会转向这类以创意为主的小型游戏。

问题在于,特殊的时代已经过去。在某种意义上,Indie game虽然能被视作台湾游戏产业的星星之火,使得团队能够自给自足,并满足一批喜欢他们的受众,但从宏观产业的意义上来看,他们更像一小撮市场中的一小撮人在试图过好自己的生活,却难以扭转历史大势。

结语

回看台湾地区的游戏发展史,它某种意义上反映了过去三四十年中文区互联网环境的整体发展和变迁。台湾和大陆在游戏行业不同领域各有建树,此消彼长。台湾游戏行业曾经因为自身技术条件和发展状况较为优厚,在中文环境中缺乏竞争者,一度创造出许多引领时代的作品,并将影响力拓展到了大陆,后来也在新加坡和马来西亚建立影响。这样的成功既要归功于早期游戏人的才华,也是天时、地利、人和的历史机遇。

但在网络时代到来之后,这种机遇逐渐消失。缺乏了乘风之势,台湾游戏产业的固有缺陷逐渐暴露出来。

一方面,中国台湾地区受限于本身的技术水平和市场规模,难以和韩国、日本竞争,也逐渐落后于大陆。据DataEye数据,2023年,台湾网民约有2168万,手游用户约1615万。这批玩家虽然创造了3个季度18.3亿美元的手游内购收入,但市场趋于饱和,用户增量减少,已是一片红海。

另外,几个头部厂商在21世纪最初10年感受到市场危机之后,虽然也尝试继续在自研游戏方面努力,但资金缺乏与频繁内斗使得自研游戏陷入困境,总体营收依然依赖代理和IP授权的固有路径。缺乏真正原创、高质量的自研游戏,使得他们在市场上逐渐落于劣势。同时,受限于本身的文化和习惯,他们也没有成功地拓展网络游戏和手游市场。从此,台湾游戏产业辉煌不再。

如果把目光再拉远一些,台湾地区游戏产业的式微,也是他们在东亚和中文环境中娱乐产业、经济地位下降的一个缩影——经典台湾游戏离我们远去,就像当年那些流行的台湾校园歌曲和偶像团体离我们远去一样。

自己搭建的gitlab忘记密码怎么办?

下面就来看一看怎么通过命令行的方式改自己gitlab的密码先说说,如果是刚装上,还没登录,怎么看初始密码,地址在这里

cat /etc/gitlab/initial_root_password
但是这个初始密码只有二十四小时的有效期,所以用这个登录现在是不行的。
所以,如上图首先切换git用户, su git进入命令行
再如下图,进入gitlab控制台:
gitlab-rails console

查找用户

irb(main):002:0> user = User.where(username: ‘admin’).first
发现是空的,再找一下
irb(main):003:0> user = User.where(username: ‘id:1’).first
发现也没返回值
再找
irb(main):005:0> user = User.where(username: ‘root’).first
发现返回值了,那就对了,开始改密码
user.password = “123456”

ActiveRecord::RecordInvalid (Validation failed: Password is too short (minimum is 8 characters))
人家提示密码太短了,那咱在改一个
user.password = “admin123”
irb(main):009:0> user.save! 保存密码
Enqueued ActionMailer::MailDeliveryJob (Job ID: 30b2c84c-23c0-45f2-9116-8471a2b961bb) to Sidekiq(mailers) with arguments: “DeviseMailer”, “password_change”, “deliver_now”, {:args=>[#<GlobalID:0x00007fee92a52458 @uri=#<URI::GID gid://gitlab/User/1>>]}
=> true
提示对了,这下总行了,ctrl+d保存退出就可以了

咱再登录一下看看

原文:自己搭建的gitlab忘记密码怎么办? – 知乎 (zhihu.com)

Git中配置UnityMergeTool方法

在Unity安装路径下/Editor/Data/Tools/mergespecfile.txt中配置Fallback的合并工具tortoiseGit Merge

  • use “%programs%/TortoiseGit/bin/TortoiseGitMerge.exe” -base:”%b” -mine:”%l” -theirs:”%r” -merged:”%d”

在项目工程.git文件夹中找到config配置文件,加如下配置:
[merge]
tool = unityyamlmerge

[mergetool “unityyamlmerge”]
trustExitCode = false
cmd = ‘Unity安装路径/Editor/Data/Tools/UnityYAMLMerge.exe’ merge -p $BASE $REMOTE $LOCAL $MERGED

冲突时使用此命令:git mergetool