6.5k 6 分钟

对 A * 算法早有耳闻,但一直未细致去分析过,最近重新看到这个概念,来尝试分析一波 # 算法定义 A* 算法常被表示为 f (n)=g (n)+h (n) **f (n)** 表示从状态 n 到达目标状态的花费的预测值 **g (n)** 表示从初始状态到达状态 n 的花费 **h (n)** 表示从状态 n 到达目标状态的花费预测值(最佳路径) 拖了蛮久了,差点我都忘记了我还有个博客等着我每周一更呢。 # 效果预览 # A* 格子数据 namespace FastyTools.Astar{ /// <summary> /// 格子类型 ///...
2.5k 2 分钟

# 快速食用 下载 inky 编辑器 编写 ink 文件 下载安装 unity 支持 找到 ink 示例,将对应的 ink 生成的 json 导入运行游戏即可。 # unity 使用流程 在 unity 中,我们需要通过代码来驱动我们的剧情的进行。 首先我们需要 创建至少2种Prefab ,一种表示文字,一种表示按钮。 然后我们需要创建一个 story 对象,载入对应的 json 文件 story = new Story (inkJSONAsset.text); 判断 story 能否继续,若能继续使用代码创建对应的游戏对象 while...
2.3k 2 分钟

本来说好的每周一更又鸽了… 今天来水一期,介绍一款很棒的剧情编排应用 YarnSpinner 。 # 介绍 YarnSpinner 是一款开源免费的剧情编排应用(或者说是一种用于剧情编排的标记语言)。 试想我们在开发游戏时,剧情有分支选择,有各种条件检查,如果我们全在代码中去判断和检查不仅繁杂而且非常麻烦,策划学习成本高,耦合性过强。你可能自己想出一套标记语言来表述剧情流程,但自己的力量毕竟是有限的,难免出现一些 bug 和坑。此时,不妨试试这款免费开源,多人共同维护的应用吧。 # 快速食用 # 代码式编辑 这里我使用 vscode 作为编辑器,下载一下插件: 我们先创建一个 .yarn...
2.8k 3 分钟

Unity 版本:2019.3.6f1 长文警告!!! 是否为摄像机脚本困扰?是否为镜头动画烦恼? Cinemachine 超强插件解决你的问题! 安装Cinemachine 现在 Cinemachine 作者已经投靠 unity 官方了,所以 Cinemachine 也成为了 Unity 的官方插件,我们可以直接在 PackageManager 中下载: 各类相机简述 安装之后我们可以在顶部菜单栏,看到如下的选项: 选项 说明 Virtual Camera 虚拟摄像机 FreeLook...
2.7k 2 分钟

对象池:在对象销毁时将对象放入池中,在使用对象时从池中取出对象,避免对象初始化和销毁时的昂贵代价。 在游戏中我们需要很多的对象,这些对象可能是动态变化的,例如射击游戏中的子弹,是不断计数的,游戏中的特效也是随着游戏不断增加的。如果我们每次在使用时创建在消失时销毁,务必会造成很大的开销,使用对象池的概念我们可以初始化一定数量的对象在使用对象时使用池中的对象,在消失时把对象归还给对象池,实现对象的复用。 # 单例模板 一般来说,对于全局的对象池我们需要一个全局的对象池管理器单例来管理所有的对象池。 在 unity 中我们会用到 2 种单例,一种是非 mono 单例,一种是 mono 单例。 #...
2.6k 2 分钟

在很多编程语言中都支持协程,例如在我们之前提到的 lua 中,协程是一个虚拟的线程技术。 # 简述 想一想我们平时购买电脑提及的,cpu 是四核八线程,其实 cpu 原先只能处理处理一件事,也就是说 cpu 默认是一个核心对应一条线程的,但是如果我们需要同时处理多个任务,而我们并没有那么多的线程数量。 然后前人们就提出了虚拟线程的概念,将 cpu 的单个线程,虚拟出多条线程,也就有了我们四核八线程,八核十六线程等的概念;在应用程序这边也有了线程和进程的概念,在把进程再细分,虚拟化软件的线程就得到了协程的概念。 至此你知道,协程就是对线程的再细分,是线程的再虚拟化即可。 # unity...
4.6k 4 分钟

很多第三人称角色扮演游戏都有一个很棒的角色摄像机 # 预览 实现后的效果如下: 使用鼠标即可以移动摄像机,摄像机能智能的检测到碰撞体,并自动修正位置。 # 备注 Camera.fieldOfView 属性可以获取到摄像机的焦距,修改该值,可以实现拉进拉远效果。 # 核心参考 var mouseX = Input.GetAxis("Mouse X");var mouseY = Input.GetAxis("Mouse Y");Camera.main.transform.localRotation =...
3.7k 3 分钟

在游戏中,我们可能需要这样的效果,将一个物体放大 2 倍,在 2s 之内完成;或者在点击 UI 时将 UI 逐渐消失。这样需要多作用效果进行逐步展示的效果被称之为补间。 为了引出我们今天的主角 DOTween , 我们先来看看用 unity 的 animation 系统制作一个帧动画序列。 # 普通的动画 我们需要以下几个步骤: 创建并录制动画 在 Animator 中设置 绑定按钮事件 代码部分: private static readonly int Play = Animator.StringToHash("Play");public void...
4.3k 4 分钟

# 概念 ScriptableObject 是 unity 提出的针对数据存储资源的解决方案,能够将数据配置项 可视化 的展示在 unityd 属性面板中,并且极易于 json 进行数据交互。 个人使用过后觉得,其操作方式和继承非常类似,感觉像是对继承进一步封装使其更符合 unity 开发需要,让数据实体化,具现化的展示,通过拖拽式即可像拆装零件一般自由组合数据。(总而言之是对继承和多态的封装) # 使用场景 用于 ScriptableObject 是针对 unity 的,在 unity 使用时比传统的数据格式如 json,xml...
648 1 分钟

在上一个文章 LWRP 中我们介绍了 LWRP 的基本使用方法,并使用 ShaderGraph 写了两个小例子。 这次我们就来尝试一下 HDRP,效果上要比 LWRP 或者普通渲染管线好多少。 # 效果预览 可以看到在 HDRP 中的效果还是比较不错的,各种光影的质量都还不错。 # HDRP 入门 下载安装以下依赖: 创建 HDRP 资源并设置(这个和 LWRP 差不多) 设置颜色空间为 Linner (这个设置很重要) 创建全局 Volm 管理环境 以上就是主要的步骤,下面我详细说一下一些细节的地方。 # 如何使用天空盒 在 HDRP 中有多种天空类型: 颜色渐变天空 , 纯色天空...