Unity-学习笔记

  • Fungus插件实现对话
  • 拓展-通过fungus实现碰撞弹出对话框
  • 拓展-在代码里动态修改say里的storytext

Fungus插件实现对话

Fungu是免费的对话系统插件,直接在unity的assetsstore里下载就好了,里面有很多的案例可以直接下载
时间关系后面有时间再做详细的记录吧
这里只说一点
如果需要对碰撞体进行对话的话,不管是collider还是charactercontroller,都需要通过被碰撞体的istrigger进行判断,如果用各自的oncollider/oncontrollercollier方法会出现不断重复的情况,使用istrigger就不会,一次接触只会出现一次
感觉后面还需要实现表情的出现和不同的事件进行判断,不过这个后面再说吧
题外话
由于有一个好朋友临近生日,想着用一年来所学的知识给他做一个简单的情景剧小游戏,所以更新博客的频率会下降很多,之前一直做的项目也还没做完,所以只能硬着头皮上了~
加油~如果小游戏做完的话可能会上传到github

同天更新一下
fungus还有需要扩展的地方
所以是需要我们自定义脚本的
这个是第一次体验,所以记录一下
通过给需要添加到fungus插件的自定义脚本添加一个命名空间,然后重写他的onenable和continue的方法,在类前添加一个注解就可以实现添加自定义脚本的功能了


记录一下,不然这个星期可能都不会写博客了,虽然观看量不多,不过还是鞭策一下自己不要太松散了~

拓展-通过fungus实现碰撞弹出对话框

给需要弹出对话框的物体添加coliderflowchart脚本
给这个物体的colider设置为trigger
打开flowchat编辑框,把block的启动条件修改为trigger
再设置需要显示的内容即可
另一个物体需要添加colider和对应的rigidbody组件,否则无法正常检测碰撞

拓展-在代码里动态修改say里的storytext

根据源码,say继承了command和一个接口,那个接口不重要,因为源码里他没有太多的方法和内容
通过观察发现say里重写了command的虚方法后就可以调用了
因此简单的思路就是在command里添加一个你需要的虚方法,比如我这里需要动态获得和修改say的storytext的话,

1

就需要写两个虚方法

public virtual string GetStoryText()
        {
            return "123121312";
        }

        public virtual void SetStoryText(string text)
        {

        }

方法名和方法体里的东西都随便,这个没啥关系,因为我们实际的逻辑是在继承了command的say类里重写的
到这里command类的任务就完成了

2

然后在say类里重写这两个方法即可

public override string GetStoryText()
        {
            return storyText;
        }

        public override void SetStoryText(string text)
        {
            storyText = text;
        }

3

然后就可以通过fungus的api去调用函数啦

GetFlowchart().FindBlock("block名称").CommandList[5].SetStoryText("as扥打算扥");
GetFlowchart().FindBlock("block名称").CommandList[5].GetStoryText();