嗨,大家好,我是大海, 现在大家看到的是一个这个车和和这个公路,就车在公路上行驶,然后他会沿着这个公路行驶,然后今天给大家分享的就是说 我们怎样去实现让这个车啊,然后呃,以及这个船啊,在太空船啊这些,以及这个过山车就是怎样才能跟随我们的这个路面去进行一个移动。 好了,大家看看最高效果,然后我再来说 好了,其实这一个呢,我们 首先要做的就是说我们要先把我们的这个路径给实现出来,然后大家可以看到我这里面其实用了很多个端度来拼出来的,大家可以先看一下 这个就是事先规划好的这个啊,路线是一段一段的这样拼接的,然后他有曲线,曲线部分主要是贝塞尔曲线来做拼接的, 然后这样一段一段的。好,然后我们就让这个车啊,然后就沿着这一个路进去进行一个移动, 然后呃,我们大家可以先看一下我这个先看一下这个线是怎样去画 每一段的,这个线其实是用这个 landlin 版来画的,然后每一条线它有四个点,四个点组成啊,比如这一条线 啊,他有一条、两条、三个点、四个点,他有这四个点组成的,这大家可以看到,对,有这样四个点然后构成的,这样的话你就可以去任意的去弯曲他。那么现在我们来看一下这个线是怎样去绘制的, 大家新建一个,新建这个脚本,然后我们打开这个脚本,其实它比较简单, 它的话它就是一个 landed 定义,然后它的四个顶点,然后用这个贝塞取线, 这里面 d 的那个被下取线的四个方法啊,四,呃四个点的方法,然后通过这个方法呢,你就可以通过这个 方法,然后来计算,就是说你四个点,然后通过这个贝塞尔的这个函数计算出来的 路径上的点,就是我们这里虽然说四个点,但是你通过这个 batter 曲线的话,你就能够计算出很多个点。 那如果大家不会计算这个 base 二曲线,我前面的话有前面有提到过,我看一下在哪里 啊?大家可以看一下这个空间中曲线的实现方法,可以看这一个 啊视频。这上面的话主要就是说了怎样去实现这个贝塞尔曲线以及呃物体沿路进移动。但是之前这一个版本比较粗糙, 这次这个版本功能比较全面一点,并且脚本的话也给他区分开来 好了。那这一个的话,它主要就是说绘制这个 base 曲线,然后获取到它上面的路径上的所有的电,然后并且把这个线给绘制出来, 然后这样的话这个一条一条的这个路径啊就能够绘制出来,绘制出来以后我们就可以通过,就比如说我拷贝搞出来给大家示意一下, 比如说我有这一个路径,然后他的其实点在这里,然后你想把它拖到别的地方去,你就可以拖他的这个中间来点, 可以拿拿到这里来,你看你这样移动这个路径上一点,你就能够得到得到这个曲线,得到这个不同的曲线, 然后你就可以把这些曲线呢,根据你这个路面这个路的弯曲情况,然后 把它给调和这个路保持一致好,然后这个有,那以后 有拿路径上的这些线,然后我们需要知道路径上的点,所以我定制了这么一个 pass 的这个内, 它里面呢就是要找到所有的这个 number, 找到这个 number 呢,他把所有的 number 里面的这个点,路径上的点给他全部加到这个历史头里面去。好,所以这个里面就是所有路径上的这个跑车型都放在这里面了, 这样的话我们所有路径上的这个点都有了,有了以后我们再去看一下这个车车上面就有一个, 这个就是怎样去让他沿沿这个路径去移动。 呃,然后大家能看到我这里面用了三个这个媒体,一个就是循环一次,第二个就是一直循环,第三个就是来回循环, 这个呢就是从头到尾,第一个意思就是哎从起始点,然后到终点,然后就结束了。然后第二个呢就是说从起始点到终点,然后他到终点以后,然后哎他又再从头开始,然后从头开始这样一直循环。呃,后面这一个呢? 后面这一个呢?他是比如说他从开始点运行到终点,哎,然后他又从终点运行到起始点,这样这样这样这样这样来回的, 然后这些计算方法和 这个视频里面的是一样的,大家可以去自己去看。然后至于不同的就是说我把它给拆分成三个方法,因为我那一个视频他就只有一次的,然后这个的话我用一个媒体加了这两种类型, 然后大便是大概就是说我也在这顺便给说一下这个字段主要是定一个速度, 因为我们知道我们在这里面,我们知道他路径上的所有的点,然后我们通过点我们就能算出他的一个总的路程,就说他的一个距离路程长度, 然后这一个呢就是我们的我们要通过这一个,通过这个内获取到所有点,所以我们要点击这个呃变量,这个呢就 它的运动类型,这个就是它路径上的所有的点,路径上所有的点。 好,然后呢这个就是总的长度,就是路程,然后这这个是当前我们已经走过的路程, 这个能表示当前我们走到的是哪一个点,这个就是他的一个方向以及他的一个呃位置,他的一个运动的方向以及他下一就是说下一针他应该所在的一个位置,那二十的话,二十的话是他的当前的当前应该运行的一个路程, 那么开始的时候我们就进入,我们先让他一次都是从头到尾。好,那我们当就当前的这个路程啊为零,然后总成 总的路程为零,就把这些先置零,然后我们再获取到,你看获取到这个 pos 里面的这个所有的路径上的点,获取到路径上的点以后,我们就要开始计算长度,长度就等于每一个点 就每两个点之间的这个距离,所以我们给它加起来,把所有的两个点之间的这个距离给它加起来,就能得到总的长度。 好,那么现在总能做成有呢?我们就先来看这个。 呃,前面这个是测试,你可以去动态改它的一个速度和动态改它的速度, 你按下一二三四,呃对应不同的速度,大家可以去看一下,然后这个 s s 表示我们当前这一针,这一针它应该运行了一个这个路程,就等于什么?因为我们定义的这个速度啊,它是一个千米每小时,如果你换算成表的话,大家能看到它是一千除上三百六十秒,就等于十除上三十六, 所以的话我他乘上十除上三十六,然后就能得到他的每一秒。但是我们每一针的我们是在 fact update 里面去更新,在这里面的话它的是时间是固定的,所以我们选择在这个 fatic 的 update 里面去更新, 然后这一个呢,就是如果你不设置啊,就是固定的这个,呃,调用这个函数的一个时间,你不调用的话,他默认是零点零二。好,这样的话我 们的速度,然后速度,然后再加上当前这针的速度, 然后就能够得到,就就说他的一个路程,对速度乘时间的路程就说得到他一个当前应该在这一针他应该运行的一个路程, 然后呢我们就判断了,哎,如果我们当前的一个速度啊,呃,小于总长度,说明我们还没有到终点,还没到终点的话,我们就进到这里面去, 进到这里面去呢,当前速度就等于下一针的点,然后再减去上一针,就是下一个点,然后减去上一个点, 然后就能够得到当前的。呃,当前就是计算的一个路程啊,就是说你根据这个点来算的话,但,但是就说如果我们当前,但是下面 加把以后,我们要去判断,因为这个是我们应该要,要,也就说要运动的一个路程,然后这个呢是我们去加两个点之间距离呃得到的一个路程,如果当前的, 按道理就说你当前这个路程啊,你一定不能大于他,因为你这个你是按照时间算,你按照你这个速度算,你在这,在这个时间点你才能运到二十,运行到二十,然后你发现你在这里呢,你,你已经运行超过二十了,对吧? 运行超过 s 说明你运行就是在这,这样,你这个呃速度呃超过去了,超过去以后你得给他减回来,你不减回来你这个越加越大,所以你要先给他减回来,然后呃方向呢,就等于下一针,减去上一针的这个方向限量,然后位置呢,就等于开始 这个点,然后加上他的运行的这个,嗯,哦,减去减去他超过的他超过多少,然后就给他给减回来,必须得给他减回来啊。好,然后减回来以后我们就 就可以就可以给他扶上直了。好,然后他的一个旋转,也是旋转的话,因为你要保持他的一个朝向,是跟随这个线的一个朝向,所以你要判断用这个。呃, 可他你这个 look 在推行,然后方向呢,就等于他运行的方向,就说他的一个俯卧的就等于我们运行的这个方向,然后他的啊 up 方向呢,就等于他自己本身的一个 up 方向。好,然后呃这个呢是他的 当前,就是说我们还没运行到终点,然后我们就抵达终点以后呢,我们要判断了,如果我们是只运行一次,然后我们就不管,然后假设我们是一个路谱循环啊,就说我们路谱循环,那么 我们重样的,我们再重新计算一下这个点,就把这些路程归零,然后这些全部呃重置,然后再去获取到他路径上的一个点,那他又可以去循环,去移动。呃,那如果你是 u u 这种类型呢?然后 他的话就说你,呃,比如说你要运行到,呃悠悠的话,就说你从这个起点,然后运行到终点,然后 你就要倒着倒回来,倒回来的话你这个路径上的点原本你是正着走的,对吧?现在相当于说你要把你这个路径上的点给他翻转,所以的话就是说我们判断如果 当前的这个位置,哎距离距离开始的这个点很远,对,连距离开始的点,就比如说这是开始的点啊,这是结尾的点,然后比如说当前车运行到这里,然后哎他到 零点的距离大于大于到最后一个点的距离了,那么他就要翻转,他就要翻转,因为他要把这个点变为第一个点,然后这里变最后一个点, 所以的话他就是呃给他翻转一下,翻转过来呢,又在继续运行,继续运行呢,因为你现在把它置为零了,然后你总长, 呃总长度也算了,然后字为零,这些 index 为零, s 为零的话话呢,它在这里,它就可以在这里又再继续 去循环,然后这个是车的。呃,我再再扩展一下,给大家看一下那个循环的, 然后为了效果更明显点,我把这个路径变得变得,呃更奇怪一点, 比如说,比如说这样的录,然后 好,这样的话他不是一个水平的,大家能够看到你即使就是说有坡度, 那么我现在再来一个这个立方块,立方块就 比如说它是一个这个车,然后把这光度近, but that 好 pass 放进去,然后他放进去,然后这个立方块,他就用这个速度的话给他一个每小时五公里, 然后我们分别拷贝两个出来,不用,我直接 靠背一个,这一个呢他是一个路虎,然后呢?这一个呢?是悠悠,好,这样的话外方面看,我们给他不写不同的这个 速度,避免让它重叠在一在一起。好 好,这样的话大家其实就能够呃,这个太太强了,很不明显,对吧? 这个速度也太慢了,然后五十、六十、七十,大家能够看到一次的他运行到这里就肯定会停止, 然后呢这一个呢?他肯定又会从起始点,你看这个要来了,哎,你看他从这里就开始了 大,大家能看到这个 u u 的话,你会发现他又从这里走过来,哎,但是这个他为啥会有点问题呢?这个,嗯 啊,好像是因为这同一个路径,然后他每一次预算的话,他会获取到这一个, 呃,好像会出问题。我们这样,我们给他呃,给他这个三条路径 来,我们 好,我们生成这个三条路径,然后 每一个对应的不同的路径。 好,现在我们来看一下三种不同的这个运行情况。第一个的话是运行到终点就停止,第二个的话,呃,运行到终点以后他会开始,然后你看这个都已经折回来了 啊,这样的话就没有问题。刚才不能用同一个,用同一个对象的话, 用同一个对象的话,他计算的时候,计算的时候,因为你去调同一个对象的话,他这个上面这个点他会呃,会出现问题啊,因为你这个, 比如说你同时都去掉到他的一个 pass, 然后呃,他在 pass 里面,他这里还清掉,然后他没办法,就是说不知道你是什么时候去掉这一个点的,然后就会导致呃,会出现这个错乱。 好了,那这样的话应该没啥问题,那么我们今天的这个分享到这里就结束了。
粉丝48获赞265

这是 u n t 昨天正式公测上线的 ai 助手,你以为它只能帮你生成三 d 模型吗? low low low 啊!它可以当你的小助手,直接操纵编辑器,帮你改物体一条参数,处理工程文件,甚至还能根据项目分析电脑性能,自动改代码,一键生成场景等等等等啊!更关键的是,它是直接集成进 u n t 编辑器里的,可以 直接操作软件,接管你的开发流程啊。比如在官方的第一个演示中呢,它会直接分析你的性能瓶颈,然后告诉你哪里卡了,瓶颈在哪里,哪里需要重度优化。哎,关于这个功能啊,做过项目的小伙伴应该会, 有时候项目一卡观察问题都能查半天,尤其项目一大查卡顿, cpu 内存泄露能查一晚上,把人看红了啊!现在你直接可以把这个丢给 ai, 它可以帮你 自动开始分析,就有点像项目里突然多了一个技术管家啊。然后它还有个规划模式,你可以直接跟他说你要做一个什么样的游戏,然后他会开始帮你逐步拆解需要先做什么,第二步要做什么,哪些功能有关联,哪些系统有依赖。以前很多新人呢,想到一个游戏玩法,会一开始帮你拆解每一步 部的开发流程,可以从最根本上的开发逻辑帮到你啊。然后还有个演示,特别经典啊,指这个 ai 助手说,在车顶上加一把枪,边写一个脚本来瞄准并射击。然后啊, ai 就 开始自己改模型,一些脚本调场景啦。 最后这个赛车游戏就这么水滴滴的变成了射击游戏。以后如果你是做独立游戏的小开发者呢,这个功能或许可以帮你节约很多 试错的时间哎,直接把不同的玩法都套在你的模型资产上去试试,非常适合前期的方案阶段。并且除了可以改工程项目以外呢, u t a 还可以现在帮你把模型的位置也摆好了,比如在官方演示中,哎,直接跟 ai 输入一 下关键词,然后 ai 就 会自动帮你摆放好每个宝箱的位置,自动调整好位置,自动沿着地形法线去排列。其实以前很多场景搭建呢,是比较耗时间的嘛,对吧?尤其摆物件啊,摆位置的朝向密度这些全都是需要花时间去弄它。起码现在应用体 ai 呢,可以帮你做很多重复的工作啦。 但是除了这两个功能以外,它也是可以支持传统的一些 ai 生成内容,比如像 ai 生成贴图啊,生成模型,生成资源,这些大家应该都很熟悉,不过说实话,目前它的这个效果,嗯, 还是有点抽象的。不过生成这方面呢,还是有一个长处的,也就是 ai 生成动作,动画已经开始有点点能用啊。你 直接输入一个,做一个后空翻,做一个回旋踢,然后 ai 会自动给这个角色生成相应的动作,而且已经开始有点能用了,虽然还是有一点怪怪的 ai 味,但也不是前几年那种僵尸鬼畜的水平啊。这个东西如果发展下去了,以后小团队做独立游戏可能会 大量使用。然后啊,我们把以上这些东西全都连起来看啊,哎 up 发现优益体这次还挺聪明的,因为他终于不投铁了。之前优益体不是也搞过一些 ai muse 这种 ai 工具吗?很多人应该还有印象,当时那套东西出来的时候,说实话,体验还是挺一言难尽的,很像那种给雀的 gpu 套了层优益体的皮 呀,很多人用两天也就关掉了。结果这次 u 运体明显换思路了,推了一个新的 ai 助手出来,他不再选择自己去做一个全世界最强的游戏开发 ai, 他 选择了 ai 总控台这条方向。比如 官方现在搞了两个东西,一个是 m c p 模型上下文协议,一个是 ai 网关。 u 运体呢,现在可以允许外部 ai 大 模型接管整 编辑器了,比如现在已经可以支持接入的模型有克劳德杰姆奈、 coser、 微软 ai 助手等等等等,全部都接入到 unikey 的 开发编辑器里了。不过呢,哎,话又说回来, ai 现在最强的还是执行一些重 复麻烦的操作,真正决定游戏好不好玩的呢,很多时候还是创意节奏、世界观、关卡设计和美术风格啊。这些东西呢,目前还不是几具提 视词就能解决的问题,起码现在还不行啊。而且说到底呢, u n t 六和国内也没什么关系啊,国内现在有替代版的团建引擎啊,也是集成了不少 ai 功能。如果你也想试用 u n t 的 ai 新功能,但是又不知道怎么用,那我觉得你也可以试试国内的团结 ai 啊,像团结 ai 助手啊,团结 ai graph 功能基本上也都差不多,只是少了一些国外的 ai 大 模型。 所以呢,回到 u n t 六的这个 ai 功能,我觉得啊,它其实更多会影响到海外的 ai 大 模型,比如现在已经有很多国外开发者开始图 吐槽啊,大陆都在说,哎呀,游戏行业正在工业 ai 化啊,最近 steam 已经开始出现了很多异眼 ai, 尤其像什么例会啊,配音啊,文案宣传图,一眼都是 ai 生成的那种,味道特别明显。很多游戏点进去看呢,就像是限时免费的 ai 素材大乱炖啊。 特别是这次用一 t 六的 ai 功能上线以后呢,相信这种现象啊也会越来越明显,越来越多啊。 好啦, c 是 看快报行业大事,早知道关注我了解一下又发生了什么事情,我们下期视频再见!拜拜!

哈喽,大家好,今天给大家介绍优益体这个软件,优益体的话大家都知道它其实是作为一个游戏开发软件在被使用的,但是其实优益体的话近几年也在逐渐的用于工业上面的数据孪生,那么 接下来我就带大家来看看如何去新建一个数据孪生项目,用于工业上面来去制作数据化的场景。 那么首先呢 unity 的 话,它其实不只是 unity 一个软件,它其实主要的一个引入的一个软件叫 unity hub, 在 unity hub 里面我们要去去下载它对应的这些这个 unity 这个编辑引擎,这个编辑器版本, 那么比如我这里下载的是一个二二版的一个编辑器,那么接下来我就要去根据模板去新建一个空白项目。那么一般来说,我如果说简单做一个呃基于 unity 的 一个数字燃烧工业数字燃烧的一个项目的话,那我就选择一个 universe 三 d, 然后我直接选择创业项目,这个时候我就可以开始启动我整个项目的一个呃呃新建的一个过程了, 那么这个时候他正在新建项目,接下来他会打开他的编辑器,然后这个时候我允许了冒风险去打开这个软件进行编辑,那么这个时候我又调出了 unity 的 一个主要的编辑器的一个软件界面, 他这里会加载他 unity 里面所用到的各种呃开发包,包括语言包啊,场景包啊,包括呃字体包啊,各种场景类的一些资源 等。它加载完毕之后,这个时候就打开了我们的工作项目。 no, 这个 u e t 的 话,目前呢是一个纯英文版本, u e t 的 话,它是支持汉化的,你可以去找对应的汉化汉化包,然后去把它的软件界面汉化成中文。 但是呃,在这里的话,其实我觉得用英文原声的英文其实用的是比较习惯的,其实看英文其实是比较容易上手的。然后稍等一会,他这个加载的时候是比较慢的,尤其是首次加载的时候, 然后这里我们简单快进一下, ok, 那 么接下来我们现在就打开了 unity 的 软件界面,这个是它的编辑器界面,我们简单的来看一下这个界面,这个界面的话 左上角这边是菜单栏,包括文件呀、编辑呀、资产呀,然后这些主键呀、服务啊,窗口帮助之类的一些简单的一些菜单。然后右边的话其实是一个,我们先看左边,左边的话是我们去编辑场景主要的一个目录数,大家可以理解为是一个目录数, 我们比如说,呃,我们这个是新建的一个场景,那么在这个场景底下我们添加了主相机,对吧?添加了光源,然后添加了一个呃,这样一个坐标系,然后同时我们还有这个地面,那么 我们点击这个之后会会发现右边它出现了一个属性栏,那么其实右边这个 impact, 它其实就是我们对应的这些我们创建的所有这些场景中的物体,它对应的属性我们可以在这里去编辑,比如说物体的位置呀,然后光源的大小啊,然后相机的角度啊,这些都可以在这边属性栏里面去编辑。 那么中间这个那大家显而易见,它其实就是我们的一个主要的一个编辑窗口,比如我们可以在这里去拖动我们的相机视角,然后在这个窗口当中我们可以去按住鼠标中间可以去移动这个啊,平移这个试图,然后我们摁动,我们滑动滚轮可以去缩放这个视图大小,然后我们 按住鼠标右键可以去旋转我们的视角,那么大家会仔细看的话,会发现左上角这里有一个 scene 啊 scenes, 还有一个 game game, 其实,那么其实这两个我们待会就可以看到区别在哪。然后我们先看左下角下方的话,我们可以看到它其实是个 project, 这个是什么呢?这个其实就是我们整个这个,呃用一体这个项目所用到的所有资产,这个资产是包括什么意思呢?资产 意思就是我这个 u 一 体这个数字燃烧这个场景项目里面,它包含了这样一个信,这样一个场景,那么它还包括我这个对这个场景做的一些设置,然后还包括我底下我这里面所用到的脚本, 我用到脚本就这个是脚本的意思,包括我用到图标,包括那么这个 size 里面,它其实就是我这个整个这个数字燃烧项目里面所要用到的资产。比如说 我想要在这个这个场景里面去导入一个模型,那么我就会把模型先放到这个本地的这个,呃,在这个资产包里面,我就把模型先导入到这个资产包里面,拖入到我们的目录里面去, 再把这个,呃,然后这个时候模型就会出现在我们的场景当中了,我们就可以去编辑,然后再通过属性去编辑这个物体的位置啥的,然后那么其实还有就比如说,比如说我要在这个场景当中去设置我的 ui, 对吧?像你打游戏的话,我们会有那种,呃游戏的那个准心啊,然后包括这个呃方位角啊,比如包括数值啊、比较速度啊,然后子弹啊、弹量啊啥的。你这些 u i 这些字体,你可能需要用到微软雅黑啊,或者说一些特殊的一些字体,那么字体的话也是通过我把我们从网上下载的那个字体的呃格那个对应格式的文件直接放到这个 set, set, set 这个, 呃这个资产包这个文件夹下面去,然后再把这个字体去导入到我们这个呃这个场景当中去,然后就可以实现一个更新。你不只是我们刚刚讲到,对吧?我们的三 d 模型,然后我们的字体,然后其实还有包括像我们的纹理,然后包括还有像, 呃还有的话就是我们的脚本,因为比如说对于 u 一 体里面,我们比如说我在 u 一 体里面 导入的一个工业机械臂,那么这个机械臂如何在这个场景当中实现一个呃实现一个运动呢?那么我我就要去对它,对这个机械臂做一个呃,通过脚本去对它做一些算法上面的一些呃脚本开发,比如说我们做运动学正解,做运动学逆解,那么 那这个时候我们就需要通过它 u 体里面自带的这个脚本去实现了它在 u 体里面我们可以直接在右键, 你会发现我们在这个目录数字里面,右键会发现它有很多个选项,比如说我们创建一个 empty, 我 们创建一个空白的一个一个物体,对吧?我们创建一个空白的物体,那么你看这个物体就会出现在这个这个场景当中,只不过这个物体它是没有形状的, 因为我们这个物体我们没有指定它是任何形状,对吧?我们只指定的它有这样一个物体,它的坐标,你看会翻看到它有一个坐标以及它的旋转轴。 另外比如说我们在这里去新建其他一些项目,你看他可以新建一些光源,你看这是光源,对吧?然后声音啥的,以后 ui 就是 新建 ui, 比如说我们可以简单的去新建一个文本, 对吧?那这个时候你看这个时候我们就可以,呃,然后他这里是要导入他对应的那个文本的那个那个包,然后这里我们先不导入了,然后我们先看,然后我们先再看看别的, 然后我们看,然后我们在右键,我们看看这里,然后在这里你看还有相机啥的,然后然后这里,然后这里的话,然后这里的话我们看到这里的主键,这里来在主键,在这里,然后在脚本, 因为这是一个空白项目,可能现在还加不了脚本,我在这里在这里有脚本 y 脚本, 然后然后我们先来看这样一个东西,那我这里点运行之后,然后这个时候它就在编辑它这个 u v t 的 这个功能项目, 编辑完了之后,你会发现这个时候主要的这个场景编辑器,它,它直接自己跳到这个 get 的 一个界面,那其实也就是什么呢?就是说我们是在 sim 里面,在这个 sims 里面去编辑我们的场景,编辑完了之后我们点运行,这个时候我们就进入了游戏模式, 他是这样一个意思,然后在这里游戏模式里面我们可以去设置他的这个分辨率啊,然后包括显示器啊,然后包括那个显示哪些东西和不显示哪些东西。 然后这个其实就是对 u 一 体这个界面的一个简单的一个介绍。呃,然后,呃具体更深入的后面可能会再结合具体的工程项目去讲。

ok, 接下来是寻路。什么是导航寻路系统?那么云体中的导航寻路系统是能够让我们在游戏的世界当中,让角色能够从一个起点准确地到达另一个终点,并且呢能够自动地避开两点之间的障碍物,选择最合理的路径进行前往。那么云体中的导航寻路系统,它的本质呢?就是 a 星寻路算法的基础上进行拓展和优化的, 那么导航网格的生成就是 never match 的 生成。要想角色能够在场景中自动寻路产生进行路径,那么必须得有 场景的地形数据,导航网格生成就是生成用于寻路的地形数据,那么导航网格寻路的组建,它就是 never match again, 这个组建就是帮助我们根据地形数据聚散路径让角色动起动起来的关键。 那么导航网格连接组建就是 offmatch link, 它是当地型,中间有断层,想让角色能从一个平面跳向另一个平面。网格连接组建时的关键,那么导航网格动态障碍物组建它,它就是 never match。 obstacle 就是地形中可能存在的可能移动或动态销毁的障碍物需要挂载的组建。那么网格外的连接组建是什么? 就是我们在烘焙地形数据的时候可以生成网格外连接,但是他需要满足的条件都会生成,而且是在编程模型下生成的。如果我们只希望两个未连接的平面之间只有有限连接路径可以跳下去的话,并且运行时可以动态加添加就可以使用网格外连接路径就指哪打哪的一个效果。嗯, 但这个我也不是很理解,网格外连接组建的使用,使用两个对象作为两个平面之间的连接,就是起点和终点,添加 of mesh link 脚本进行关联它设置它的参数的话就是 agent 等于 they start get complete narrow mesh agent。 导航网格动态组建 用来是干什么的?在游戏中呢,常常会有这样一种功能,场景中有一道门,如果这道门没有被破坏,是不能自动导航到门后的一个场景的,只有当这道门坏了,我才能够到下一个场景。而类似的这种物体本身是不需要寻路的, 所以呢,没必要添加 nevermind agent 的 java, 这时就会使用到了动态障碍物组件的实现该功能。那么导航动态障碍物组件,它的一个使用 就是说为这个物体添加上的外面是 opposite skill 它的组建,再设置相关的参数,再代码,再去控制它啊,就 ok 了, ok。

那么我们如何的去改变这个物体的轴的位置呢?有的同学可能会问啊,那物体的这个轴的位置改变了之后,他连带着物体不就一起会就是移动吗?其实不是的啊,他的这个轴 啊,轴的这个位置我们也是可以随意改动的啊,这个时候就是会用到之前讲过的这个右侧的一个层次面板啊,所有的就是调整轴的位置,全部都是在这个层次面板下进行一个操作。 那么假设我们现在就是重新切换到这个顶式图,嗯,我们在这个地方想要如果只调整这个轴的位置而让物体不动的话,我们先需要把这个紧音像轴给他选上,把紧音像轴选上啊, 紧银上轴选上之后我们就可以,哎,看到可以随意的移动这个轴心,但是物体不会移动,这个是紧银上轴的一个使用啊。那如果说我们把这个轴心移动了之后,想要让他回到之前的一个位置, 我们直接在这个地方点击重置轴就可以了,直接点击这个重置轴啊,他就回到了移动之前的一个位置, 嗯,在这个里面他还有一个叫居中到对象的一个,呃,操作,那么居中到对象的这个操作呢? 呃,对于球体来说演示的可能,呃不会那么直观,因为球体的话它是一个比较规整的一个物体嘛。啊,所以在这个地方呢,我们新建一个这个茶壶,然后来观察一下, 同样啊,然后我们把这个坐标轴呢先给他移开 好,移开之后我们如果点击这个重置轴,哎,可以看到他就回到了之前这个轴心所在的一个位置,那么这个居中道对象什么意思呢?我们现在来操作一下。 哎,点击之后我们可以发现他这个轴心呀,现在变到了这个茶壶,就是他会自动计算一个,就是居于中心的一个位置,这个是居中到对象的一个操作啊, 但是一般默认的这个,呃,默认我们创建的物体的话,他的这个呃坐标轴的轴心高度都是设置为默认是零。

嗨,大家好,我是大海,我让 ai 完全模拟 uni 体的编辑场景,他的操作方式去做了一个工具, 呃,做出来效果还是还是挺好的。看这个前后的移动非常舒缓,然后上下前后左右,然后鼠标滚轮的 这个往前往后拉的这个效果,还有中间键平移, alt 键去缩放场景,然后右键去缩放,然后这个旋转, 这个是,呃,视觉上的,还有这个正交,然后透视正交的这个四角下可以去拖这个物体,这些操作还是都挺方便的,我觉得然后单个面的 这个小工具,你用去拼接一个场景,那都挺好的。 然后透视的,那你完全可以就依靠这一个, 但是就是还没有加入这多场景的物体的一些顶点吸附的功能,这个还没做,后面有空可以让 ai 再继续去完善这个功能。 好的透视包括这个四角的切换,这个已经切到外面去了,然后它的一个锚点和它的一个中心点 在切换也是可以的。本地坐标和世界坐标,呃,但是物体没有旋转,不明显哎。当你切下这个的时候,本地坐标和世界坐标这个就完全和世界坐标对齐了, 他的一些旋转操作都是可以基于本地啊或者是世界的去做一个旋转的 啊。他这个脚本封装的也挺好,就这个工具直接往上面挂了脚本,挂了碰撞器,然后他就可以去进行一个编辑,还有这个描边的一个效果。选中以后 啊,整体来说他这个功能啊写的功能,呃,应该是比自己去写还更厉害,时间用的会更少,整体来说还是挺厉害的。

上节课我们已经实现了控制物体的旋转和移动,这节课我们实现一下通过变量来控制旋转和移动速度。我们也知道这里的零点一表示物体绕 z 轴旋转的角度,因为是在 update 的 方法里执行,实际上它表示的就是物体旋转的速度。我们可以定一个变量来存储这个值, 这里改为 sphere speed。 同样的,这里的零点零一代表的是物体在外轴方向的移动速度。我们也定一个变量, 这里改为 mode speed。 这样我就可以通过修改这两个变量的值来控制物体旋转和移动速度。回到 unit, 在 这里可以看到这两个变量先运行一下游戏, 现在物体是以每帧零点一的速度旋转,零点零一的速度移动,我们可以在这里把旋转速度改为,比如零点五, 可以看到物体旋转的更快了,移动速度也改一下, 这样我们就实现了在运行时通过变量来控制物体的旋转和移动速度。需要注意的一点是,在运行时做的修改是不会保存的,我们在这里修改了两个变量的值,现在我停止运行, 再看这两个值,又恢复到初值值了,这一点需要特别注意。还有一点需要注意的是,我在这里修改变量的值,这个就是变量的最新值,我们在代码里给变量设置的初值值会被覆盖,在这里修改是不生效的,比如把旋转速度改为十, 运行一下游戏 可以看到它并没有生效,旋转速度还是零点一,我只有改这里,它的旋转速度才会改变。 要想让变量的值在 inspect 中显示,需要把变量设置为 public, 这样做会带来一个问题,就是这个变量可能会被外部脚本随意访问和修改。如果我把它改为 private, 虽然保证了封装性,但在 inspector 里就看不到这个变量了,这样就不方便我们修改变量的值。要想解决这个问题,我们可以在 private 前加一个 serialise field 的 字段, 这样这个私有变量依然可以在 inspector 中显示,既方便我们调试修改,又避免了被外部脚本随意访问。

好,接下来呢,我们还需要用 ai 工具生成一个不一样的方块,我打算把这个方块变成一个英雄,回到混元 ai, 然后再回到纹身三 d 这边,输入指令,生成一个女英雄吧, 然后直接点击立即生成,它显示正在排队中,现在变成这个生成中,我们耐心等待一下。 好,现在它已经生成完成了,现在我们随意的点个三 d 模型,点带箭的这把吧,左下角。 好,我们也可以通过这种鼠标的方式呢,三百六十度去看一下 这个人物模型,感觉还是挺不错的。接下来呢,我们还是需要把这个模型导出来,老规矩,我们选择一个下拉列表,选择 obg 的 格式,点击下载它,显示下载成功,点击保存, 然后再把这个压缩包解压一下, 然后把这个文件夹改个名字叫 hero。 老规矩,把它拖入到 unity 里面, 可以发现我们生成这个三 d 模型,它需要等待比较长的时间。现在呢,我先再让 ai 生成这个 平台,这个模型生成平台这模型的时候呢,我们再来替换这个方块, 我们再次回到纹身三 d 这个模块,输入指令呢,我们写什么呢?写,生成一个平台, 点击立即生成。好,可以看见它现在正在排队,正在生成中。呃,接下来呢,我们去回到 unity 面,把方块替换一下,找到,找到这个方块, 然后呢,把这些方块全部删除了, 然后呢,把 把这个 hero 拖到这个游戏屋停,拖入到这 hyraki 这个程序面板里面,同样的,鼠标右键创建父亲节点,我们输入 hero 啊,或者还是叫 enemy 吧, 好,定位一下,把它拖入到这个平台中。哎,感觉它好小啊,怎么办呢?我们现在 现在改变它的一个大小,改成五,哇,太大了,感觉还是太大了,然后看一下二可不可以,呃, 三把。 好, 可以看见的是它与当前这个小球是方向相反背离的一个情况。现在呢,我们需要旋转这个模型,那怎么旋转呢?我们可以通过 rotate 这个方式呢,改变它的这个,改变它的这个什么 掰轴进行旋转,直接输入一个一百八十度,输入一百八,可以看到它现在就是,呃,处于一个正对摄像机的一个位置,对吧? 好,现在呢,我们可以看到它的脚下,这个脚下是不是平行于这个地板呢?好像不太是,我们把它往下拉一下, 好,移动到了这个直径位置了。现在呢,我们需要给当前这个英雄增加 client 这个主键 boss client, 记得一定要选择没有带二 d 的 这个主键, boss client。 好, 哎,可以看见啊,它现在还是 有点问题,就是它的这个碰撞体呢?碰撞体这个盒子呢在正下方的位置。好,现在我们调整一下吧。点击编辑 collider, 好, 往上移动一下。 我现在还是有点太低了,所以说我们再往上移移,然后下方的话,通过确定它这个小点往上移动。 啊,可以,感觉应该是差不太多了,但感觉它的这个四周呢有点,呃,太宽了。一样的,我们再缩小一下,凭感觉缩小一下。 好,它差不多,呃,是这个样子。现在呢,我们要复制多个的这个 enemy 出来,直接快捷键 ctrl d 好, 移动出来, 再移动,再移动,然后再 ctrl d 往后移动,再 ctrl d, 往右边移动, ctrl d, 然后放在这边吧,然后再 ctrl d, 好, 再 ctrl d, 好,现在呢,它差不多是有,呃,十一个,十一个这个 enemy, 首先我们选中这十一个 enemy, 然后添加标签,把 enemy 这个标签点上。 好,现在呢,我我们把这些 enemy 呢拖入到原来的这个父亲节点中去, 当然你不拖也行,但是我感觉同意一下可能会比较好一些。现在呢,我们运行一下这个游戏,看一看它是否能正常运行。 好,你可以看到我们移动小球,然后这个英雄呢就消失了, 点击取消,我是阿波拉,记得关注我呦,我们一起做游戏,一起成长。

新建项目后,在 higher 二 p 面板中创建 plane 和 cube, cube 命名为 player。 在 project 面板中创建材质球,并给到各对象上 调整主摄像头, 点击 player, 右键创建 camera, 并调整 camera 角度。 在 project 面板中新建 render texture, 并命名为 map texture。 设置 camera 对 象的 target texture 参数值为 map texture。 在 higher 二 k 面板中,右键选择域外中的 raw image, 并将 scene 面板切到二 d 模式。调整位置后,设置图片的 texture 参数值为 map texture。 创建脚本命名为 move。 双击开始编辑代码,使 player 能动起来, 将脚本添加到 player 组建中。 在 project 面板中创建一个文件夹,命名为 texture, 并将准备好的素材拖入其中。 将素材中 texture type 从默认状态改为 sprite。 二 d 点域 i, 点击 canvas 右键在域域中创建 image, 并将其作为 raw image 的 负对象。将 circle 素材拖入 image 中的 source image 中。对 image 添加 mask 组建,选中 raw image, 调整位置, 重复同样的步骤,将其命名为 image b g。 将 portrait 素材拖入 image b g 中的 source image, 并调整其大小, 开始演示, 演示结束。

来,我们今天来讲一下玛雅中,嗯,音色的键如何改变我们的坐标轴的方向啊?呃,首先我们在这里创建一个 boss, 在这里 一个 box, 然后呢我们给他清除历史哦,假如说是改变了他的一个模型的一个属性,就是给他一个创建的一个这样一个属性的时候,我们去操作的时候,怎么样去给我们这个做标准挪过来, 现在我们这个坐标轴是在我们的物体的正中心,那么如果改动变换我们这样一个坐标轴呢?按我们的键盘上的递减啊, 当我们这个中间这个坐标轴改变成这样一个,呃,带圆点这样一个模型的时候,这样一个显示的时候,我们就可以挪 动我们的坐标轴,而是模型是不动的,坐标轴可以挪动的,可以挪动我们的想象的位置。上面,我想遇到这个表面的话,我们可以按微键吸附, 然后再按一下 w 键,他会回到我们这样一个这个面的一个位置啊,然后我们可以旋转,他是以这个面为中心点去旋转或者去移动这样一个方法。如果再想让他回到我们的物体中心点呢?我们在这里有一个在修改底下啊, 有一个看好的一个举重,点一下举重遮下我们的这个 作为主要回到我们的物体的中心点啊,然后就是以物体的中心点来挪动或者是移动啊,包括旋转,都是 点关注,不迷路,我是宁哥,一个只讲干货的三维级模式。

那如果你没有 vr 设备也是可以的,没有 vr 设备的情况下,我们在 windows package manager 里面,在 in project 这个选项,然后往下拉,找到我们的叉 r interaction token 我 们这个工具,然后找到 samples, 往下滚,滚到找到我们的叉 r device simulator, 就是 我们的设备模拟器, vr 设备模拟器,我们的点击导入, 导入完成,我们关掉这个 package manager, 然后在 assets samples 叉 interaction 这个版本,然后还有个叉 r device simulator, 我们的设备模拟器,然后找到打开我们的叉 r device simulator, 把我们的叉 r device simulator 就 说我们的设备模拟器预制体拖拽到我们的场景里面啊,这个是你没有 vr 设备的情况下,你想要在 pc 端去做测试模拟的时候,测试交互的时候,我们就放这个预制体,我们直接运行。好,那这里我们可以通过鼠标 上下左右去调整我们的镜头键盘, w, s, a, d 键去移动我们的人物啊,然后可以按下 t 和 y 去控制我们左边的摇杆或者是右边的控制器啊,通过鼠标左键啊,或说 g 键去做我们的点击或者说拖拽的一些交互。

今天来教大家如何把我们的工程升级成 vr 工程,我们现在 pc 上的这个工程是通过鼠标键盘 wsd 点击啊这样的操作,那我们今天的话,把我们的工程升级成 vr 工程。 首先在上方 windows package manager unity 注册这边找到我们的 open 叉二,找到我们的 open 叉二 plugging, 然后点击安装 好,这里会弹出提示,使用了 new input system 新的输入系统要求我们重启工程,我们直接点击试 工程,重启完成之后,我们在同样的 package manager 下面往下拉,找到我们的叉 interaction token, 那 这里使用的这个版本二点六点五,这个版本会比较旧,我们点击这个 document 这个蓝色字,打开会在浏览器打开这个地址,然后我们可以看到它其实是有三点五这个版本的。然后我们回到我们 unit 工程, 复制一下 com, 点 unity 这个名称,这个包名 copy, 然后在左上角点击加号,点击 add package by name, 点击一下,然后 paste 粘贴一下这个名称,然后我们使用的版本是三点五点零,然后点击添加好这版本,添加完成,然后我们把 package manager 这个窗口给它关闭, 我们点击左上角 edit project setting, 打开项目配置,然后找到我们的叉二 plugin management, 勾上我们的 open 叉二。 勾上之后,我们来到 open 叉,添加一个简单的配置,比如说 htc 或者其他的,随便添加一个,我们添加一个 htc 的, 然后我们来到叉 r interaction token, 这里可以勾选成如果你没有 vr 设备的情况下,想要在工程里面去模拟 vr 操作,我们把这个 use 叉 r interaction simulator 这个给它勾上,我们点击 ok, 它安装一下它一些依赖包 好,然后这里有一个预制体,需要设置预制体的话,我们在 project 试图这边找到 samples, 展开展开展开一集展开展到找到我们的叉 r interaction simulator, 把这个关联进来,关联进来之后,我们打开 windows package management, 然后找到叉 r interaction token, 然后在 dependencies, 然后在 samples 这边往下拉啊,在 samples 这边找到我们的 start assets, 就是 我们的初学者资源包,它会帮我们做了一些简单的配置,我们直接点击导入,然后我们回到 project validation 这边,那因为我的工程这里使用的啊 t m p 这个文本包会小了一点,然后我们直接点击 fix on, 然后我们在我们的工程里面,我们现在工程里面的 first player 第一人称漫游,这个是用不了的啊,我们的 vr 也不是用这个,我们把这个先关闭, 然后在 start assets 这边的 prefabs 找到我们的叉 r origin, 把它拖退到我们的场景里面,这个是我们的 vr 漫游啊,旋转一下角度,然后我们现在这个 ui, 我 们的 comcast ui 是 overlay 的 模式, overlay 的 模式在 vr 里面也是看不见的,我们需要把它改成 border space, 改成 word space 之后,那我们也还需要添加一个组建 track device graphic recast 就是 我们的设备胶布,组建胶布设线,我们 track device 这个加上,加上之后,我们再 展开我们的叉 r origin, 在 main camera 下面这边创建一个摄像头啊,这个就作为我们的 u i 炫的摄像头, 然后把我们的 near 这个距离给它改成零点零一,最小啊,就是最小的,然后它的渲染只渲染我们的 ui, 只勾选我们的 ui, 然后把我们的 audio listener 这个去掉,同时把我们的渲染模式给它改成 overlay 的 模式,叠加的模式,然后在主摄像头这边把我们的 ui 去掉,我们的 ui 层去掉,然后再添加 camera 这边把我们的 camera 添加上, 然后我们在 comcast 这边把我们的 comcast 模式给它改成摄像头模式,然后选择我们的这个小摄像头,然后它会自动跳到这个位置,然后把这个距离给它改一,它跑到了前面大概一的这个位置,然后我们再把这个模式改成 word space, 然后把这个 comcast 缩小缩小一半,零点五左右。那大概这么大啊,具体的大小的话,大家看自己压头盔,如果不缩小的话,它如果顶边,我们其实是只看到了中间这个区域 旁边的话,它是顶边就会看不到,我们给它缩小缩小一点,缩小完成之后,我们再添加一个 parent constant 这个主键, 然后点击加号,把我们的这个摄像头加进来, lock 一下 active 还有 lock 给它勾选上,然后找到叉 origin 下面的 left controller 和 right controller 左右控制器,把它的层级给它改成 u i 选择是的,改成,改掉所有的子层级 指向。好,这样子我们就可以通过手柄射线去做这些交互,那我们原本的功能就能正常的使用。然后我们使用的是 camera 叠加的方式,那我们穿墙的时候,我们的 u i 也不会穿到里面去,也不会穿到墙里面去,但如果你只是用三 d 摄像头,只是用三 d 的 u i, 那 你的 u i 会穿进去, 好,然后我们这里因为用的是我们最新的三 d 的 u i, 那 你的 u i 会穿进去,好,然后我们这里因为用的是我们最新的三 d 的, 我们的 u i 会穿进去,好,然后我们这里因为用的是这个预制品,我们的交互 是相当于鼠标交互的,这种方式吃哪打哪啊。如果是原本的这个模拟器的话,我们需要按下键盘的 y, 然后去调整这个 射线去旋转啊,交互上会有一点点迷,那我推荐大家就直接用最新的这个三点五这个版本,然后直接用这个 x r interaction similar 的 这个模拟器,然后我们物体的交互,那其实 vr 下面的 x r 的 物体交互,它提供了一个两个主键, 那其实我们可以直接使用叉 simple interactable 啊,这个简单交互,那这个简单交互它提供了一些手柄射线的一路移出啊,还有我们的手柄射线的选择 好这些它基本的事件,那这个事件就跟我们原本的 event trigger 这个事件是一致的。然后现在啊,现在因为我们的这个原本的物体交互使用的是 on point, 就是 我们的鼠标,鼠标交互,那我们这里现在是用不了的,我们打开我们的代码,好,那这里的话我们需要添加这个主键,那这个主键才能够被我们的手柄去做交互, 然后我们打开我们的这个代码,在这里我们需要去做一个绑定,我们直接 void start, 直接 void start, 这里原本的时候 point 就是 我们的鼠标交互,我们现现在给它改成我们的手柄交互, 然后我们这里直接判断,如果这个是空的时候添加这个主键,然后我们需要监听上面的移入,移出,对应我们鼠标的移出,还有我们的鼠标的点击, first focus enter at listener, 然后对应的就是这个,我们是鼠标移入,我们对应的我们的鼠标移入,然后鼠标移出,还有我们的点击, 点击的话这里可以用 select 或者是 focus 都可以,那这里直接使用 select 好, 然后这里的话是那个射线一路移书写错了,这里要用用的是 first hover entered 和 last hover exit, 这里写错代码了。 好,这样子我们就可以实现手柄射线的一路移出。好,我们的物品信息弹窗,这里同样使用的是鼠标的点击,那我们再把这里的代码复制一下, 然后这里不用鼠标一路一出,直接用这个点击的方式点击,然后我们把这个点击的时候打开我们的信息弹窗,保存一下,回到我们的工程。 好,这样就可以实现我们的 u i 的 交互,正常交互。然后点击物品设限的一路一处高亮,然后我们点击物品,展开它的信息弹窗。