18910140161

文字游戏引擎 ink 初探(下):Unity 整合

顺晟科技

2021-06-16 10:37:26

501

亚麻有色织带提供了将墨水整合到一致中的插件,我们可以到如下地址下载:

油墨统一插件

去下载

我们下载的是v 0.8.1的稳定版unityinkintegration n 0。8 .1 .unity包

准备我们的一致项目

创建一个新的2D项目,并且保存事件为主,然后引入一致插件。

再把我们上一篇完成的墨迹演示拖进项目,我们的叫做demo.ink。

引入墨水文件之后,会自动编译成数据的可用格式,我们的素材库看起来会像下面这样:

然后创建帆布画布并且增加两个必要的元素:按钮(按钮)和文字(文本),并且将它们做成预制的,供后面使用。按钮是用来显示选项并做出选择的,而文本使用来显示基本内容的。

因为要使用预制的所以将帆布清空即可,然后给帆布增加C#脚本,取名Script.cs吧!

这样,我们的素材就准备完毕了:

其实墨水脚本引入以后,是可以直接在一致中测试的。选中。墨水文件,属性栏里面就会出现玩按钮,可以直接运行并测试。

可以直接在一致编辑器中调试

编写脚本

脚本代码如下,已经添加了注释:

使用UnityEngine

使用墨水。运行时;

公共类Script: MonoBehaviour

{

//墨迹数据

[SerializeField]私有文本资产墨迹文件

//画布

[SerializeField]私有画布;

//墨迹故事

私人故事_ inkStory

//是否需要新的故事片段

需要私人故事

//距离(用来确定内容和按钮位置)

private int _ padding=10

/*用户界面预设*/

//文本

[SerializeField]私有统一引擎.UI。文字文字;

//按钮

[SerializeField]私有统一引擎.用户界面,按钮选择;

//初始化

私人空间清醒()

{

_故事需要=真

_ inkStory=new Story(inkfile。文本);

//设置玩家名称

_ inkstory。variablestate[' player _ name ']='某人;

}

//每帧调用一次更新

私有无效更新()

{

if(!_故事需要)返回;

//清空画布内容

移除子项();

//各个元素的偏移,需重新计算

float VOffset=0;

//如果故事可以继续

if (_inkStory.canContinue)

{

var story text=instance(text);

//取得要显示的文字

storyText.text=_inkStory .continue();

//定位相关

故事文本。转变。设置父(画布。transform,false);

故事文本。转变。translate(新向量2(0,VOffset));

vOffset-=(故事文本。font size _ padding);

}

//如果有多个选择,那么逐个处理

if(_ inkstory。当前办公室。计数0)

{

for(var I=0;I _ inkstory。当前的选择。计数;I)

{

//定位相关

var选择按钮=实例化(btnChoice);

选择按钮。转变。SetParent(画布。transform,false);

选择按钮。转变。翻译(新矢量2(0,VOffset));

//取得选择

var choice=_ inkstory。当前办公室[I];

//设置按钮的选择文本

var choiceText=选择按钮.GetComponentInChildrenUnityEngine。ui。text();

选择文本。text=choice。文本;

//定位相关

var布局组=选择按钮. GetComponentUnityEngine。ui。horizontallayoutgroup();

vOffset -=(choiceText.fontSize

layoutGroup.padding.top

layoutGroup.padding.bottom

_ padding);

//获取按钮点击后对应的路径

var path=choice。PathStringchoice

选择按钮。OnClick。AddListener(delegate { choice PasthSelected(路径);});

}

}

//本次操作完成,等待响应

_故事需要=假

}

///摘要

///清空画布内容

////摘要

private void RemoveChildren()

{

var子计数=canvas。转变。子计数;

for(var I=child count-1;I=0;- i)

{

破坏(画布。转变。GetChild(I)).gameObject);

}

}

///摘要

///选择路径

////摘要

///param name='path '路径名称/param

私有空的选项选定(字符串路径)

{

_inkStory .ChoosePathString(路径);

_inkStory .continue();

_故事需要=真

}

}

代码还是很简单的,基本和官方提供的差不多。我们补充道:

_ inkstory . variablestate[' player _ name ']

设置玩家名称,并在路径中导航。

收尾工作

我们回到统一编辑界面,绑定程序运行所需的对象,如图所示:

然而,这还没有结束。我们需要给按钮和文字添加自动居中设置,并做一些边距控制颜色调整等美化工作,基本是这样的:

如果一切顺利,你可以跑了

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航