粉丝1.1万获赞3.6万

大家好,我是游戏石匠,一个从业很多年的游戏程序员。如果你关注我的频道,可以在第一时间看到我最新的视频。哈喽, 继续开始我们的 unit 面试题,每日一讲。今天的题目是不用的物体怎么办? 好按快递。先看题目, 现在有一个三 d 物体是普通网格,也就是用 maxrender 来炫耀的。假定我们可能高频率的对他进行显示和隐藏, 那么有以下两种方式,选出集中性能最好的方式,并且说明理由。如果你有更好的方, 可以单独回答那方式一, game of security 处或者 force。 方式二,在隐藏的时候把物体设置到很远的地方,显示的时候再放回原来的位置。 第二部分答案和解析两个答案,一个是隐藏物体,减少运行消耗,第二个移动位置,避免频繁的钓友。 大家有时间想一想,然后再选择你的答案。 这道题呢,答对的人还是挺多的,毕竟提示还是比较多好,我们来看一下 正确答案,正确答案是 b 移动位置。 那么接下来对这个题进行解析。这道题呢,我得先说一下,其实题目呢,不是出的特别严谨,特点情况下显选式隐藏也许是对的, 但是面试官考察你的时候肯定不希望你抬杠,所以回答的时候按照最合理的方式来回答就可以了。 那么我们来看一下 c 的 active to 和 force 他做了什么。 当我们使用 ctrt 处的时候,当前物体上挂着的所有脚本,他的昂 enable 这个方法都会被钓鱼一次。同样的,如果是 set active force undisable 会被钓鱼一次。 不仅是如此,地规向下,他们所有的植物体都会做同样的处理。 当然了,与此同时,所有脚本的 updata 和勒他 data 的消耗是清零了。 那么再看一下 transform, 点儿破嘴型等于什么时候又做了什么呢? 对位置进行了移动,所有植物体同时也发生了位置上的变化。比较而言,在平凡线 是隐藏的情况下, update 和雷达 update 的体消耗本身也难以避免。选择移动位置写的是正确方案,因为 on enable 和 on disable 是很多脚本进行初始化的时候都会进行调温的, 他们的性能消耗是难以极速的。这道题的题目上专门指出频繁进行显示隐藏,所以明显面试官希望你回答选择移动位置的方式, 而不是调用 c 的 xt 五。这种 app 计时是雷特 update 和 update 继续执行 设置位移同样是消耗更小的一种方式。这道题呢,还有个扩展移动位置,这种方式其实也并不理想, 只不过因为我们这道题面对的相对初级,所以回答移动正位置就可以算你对了。移动位置的时候,他可能会影响大量物体的位置。举证 相关联的这种消耗也是不可避免的。而且呢,还有一个问题是,很多地方都有可能修改位置,如果你随意进行位置移动,那可能会导致大量难以溯源的 bug。 就是如果其他人也移动了,那你就 over 了。说到这里, 更为理想的方式是什么呢?我们有两种方式,几乎是等效。 第一种修改 game of you to the layer, 使他在相机的 qd mask 之外直接使相机不再渲染此物体。这样的话,首先 undisable unable 这两个方法是不会被调用的,其次我们的位置也不会发生变化。 另外一种方式直接获取 master, 把他的 enable 的改为处或者 force。 第二种方式是很多优化插件使用的方式, 和上面一样,他既不会掉用 on disable and naval 哦对 自身的 on a naple 和 disable 是会掉的,但是其他脚本不会被掉哟,同时呢,它也不会修改位置。目前而言,在我测试当中两种方法性能消耗在各种情况下是比较接近的, 那么选用这两种方法都是比较合适的。其实 unit 里面要实现显示隐藏有很多方式, 但是其中每种方式他内部到底做了什么,如果你不搞清楚的话,你就可能没有办法判断出哪种方式是性能更好的方式。 哈喽,今天的视频呢,就到此为止,如果大家觉得我的视频有用的话,请给我一键三连,谢谢大家,我们下次再见。

hello, 各位同学,大家好,咱们这节课来学习一下循环跳转语句。好,咱们啊,首先呢,按照案例里面的一些需求,咱们看一看,哎,为什么会需要所谓的循环跳转语句呢? 这个案例是这样的说啊,模拟一个用户输入密码的一个匹配过程,如果呢,用户输入的不对,那就我们给他输出密码有误,重新输入, 那如果用户输的密码是对的,那就给他输入啊,输出登录成功,如果连续三次输入错误的话,则输出登录失败,并且退出程序。 好,那在这里呢,我们可以看到,咱们的用户是不是有三次的输入机会啊,如果输对了,我们就登录成功,如果输错了, 就密码有误了。然后呢,还可以继续输入,超过三次就登录失败了。好嘞,那咱们呢,先分析一下,首先呢,我们可以定义一个字符串的变量叫 password, 这个字符串呢,它用来作为正确答案,然后等待匹配, 也就是说一会我们输的支付串都要跟这个 password 来比一比了。好嘞,那接下来呢,定一个支付串叫做 input, 那作为用户输入的变量 之后咱们使用 for 循环,循环几次呢?咱们是不是有三次输入的机会啊?那就循环三次, 那在循环题里面我们干什么呢?那肯定是要接纳用户的键盘输入,判断是否是正确的,那如果是,则 登录成功,如果不是的,那就好嘞,那就继续让用户下一次输入,直到循环结束。好,那大家来想一想,这样的过程里面,哎,有没有什么问题啊? 好,那告诉大家,问题在这里,如果匹配了的话,那就登录成功,但是呢,假设用户第一次啊,在咱们循环当中就匹配成功了的话,那后面是不是还有两次循环啊?那那两次循环是不是就多余了呢? 所以啊,咱们就需要在他匹配成功的时候呢,直接将当前的循环啊给他结束掉,不管说我是第一次执行循环体,还是第二次执行循环体,我呢都直接给你判定当前循环结束,我后面的循环就不做了, 哎,这就叫做循环的一个中断跳转。好嘞,那我们接下来用代码来给大家演示一下。好,我们来到 vs 当中, 咱们是要模拟一个用户啊密码匹配的过程,所以第一步的话呢,咱们应该是确定正确密码好了,确定正确密码之后呢,咱们再定义用户输入的密码字符串 好,然后呢咱们就要开始匹配。 ok, 那这些步骤里面呢,首先我们先做第一个 string, 然后呢叫做 password, 比如说呢,咱们正确的密码是一二三。好,那在这里定义变量的时候,大家需要注意,我们这 password 是不是在下面的程序里面不允许被更改啊?因为呢,你输入的所有的密码都要跟他做对对比啊,所以呢,我们可以在前面加一个 const, 然后呢表明他是一个长变量。 好,那接下来呢,我们定义 string 叫做 input, 它呢是用来匹配用户输入的密码,然后咱们给它一个空字符串就可以了。好,下面开始匹配 匹配的话呢,需要一个循环,我们使用 for 循环,然后呢小括号,大括号,在这里啊,咱们定义一个技术变量 int i, 等于啊,我们可以从一开始, 最后呢,我们匹配多少次呢?让他小于等于三,我们给他三次机会,然后呢?哎,加,加好了,那在匹配的 里面我们需要干什么呢?来,我们三点一,这一步的话呢,是用户输入密码,然后用户输入密码之后,我们要进行什么步骤呢?与正确密码进行比对, 那比对之后呢,如果正确则干嘛呀?我们就登录成功啊,那否则就干嘛呀?哎,登录失败。好,然后呢,再次输入。 好嘞,那我们就开始编写代码哈,首先用户要输入密码,那么在这里呢,给用户一个提示, ctrl 点 right 啦, 好,在这里呢,输入一下啊,说这个请输入密码。 好,然后呢,在这边我们 input 等于 ctrl 点 read 栏,那我们输入一行, ok, 这样输入就完成了。 那完成输入之后呢,我们要对比一下,对比我们是不是应该用条件啊?所以 f, 如果我们输入的密码与咱们的 pass word 一致的情况下,我们要打印,叫做登录成功。好, 那如果否则的话就登录失败了,那当然要用 airs 了,对吗? airs 就是两者不匹配的话,我们就说啊,登录失败,请再次输入。 好嘞,那整个都做完之后呢,我们应该打印一个结束的语言哈,我们就说程序结束。 好,在这里呢,我们来实验一下啊,点击运行。 好,我们可以看到,请输入密码,那我们先输一个一四五,对不对啊?登录失败,再次输入密码,三四五啊,也不对啊,然后呢,最后一次机会了,我们输一二三,然后呢?哎,登录成功啊,程序结束 啊,好,刚才呢程序啊,直接就结束了,咱们在这里呢,直接 ctrl 点 read, 咱们让程序从这里停下来,等待我输入啊,这样看的更清楚。好,总之呢,刚才我们输入了两次错的,然后呢,一次对的,但是大家注意一点啊,你看啊,如果我输入的第一次就是正确的,一 二三,点击回车,你会发现,他虽然打印了登录成功,但由于这是咱们的第一轮循环,那后面还有两轮,他呢会继续回去,从上到下再进行一次第二轮循环,又让我输入一个密码,这样的话,哎,岂不是就不正确了,对吧? ok, 那有什么办法能够让我匹配成功之后直接跳出这个循环呢?很简单,我们只需要在匹配成功之后,在这个输出语句后面,我们写一个 break 好了,那这个 break 的意思是说, 我们呢,先找到他所在的循环,哎,是不是这个否循环啊?那只要遇到了布瑞克语句,那他所在的这个离他最近的否循环就直接暴力的被 结束掉了。好了,我们试一试啊,不管说他后面还有没有其他循环,都会直接退出循环啊,来,第一次密码一三四是错的,对吗?好,他让我再输入一次,我再输入是对的,一二三,点击回车,你看,这一次登录成功,程序结束了, 所以说呢,在第二次循环的时候,我就匹配成功,直接 break 调好,他就没有办法再进行循环了,因为直接退出,然后到达程序结束这一句话了。 ok, 那这就是 break 语句相关的作用。 好,接下来我们看一看啊布瑞克语句的一些细节的总结啊,布瑞克语句啊,现在咱们呢,有两个地方看到过他,一个是在循环当中,那不管是爆循环还是 是哇循环嘟哇循环,在这些循环里面啊,只要遇到了 break, 他呢就会结束当前所在的循环,然后呢让他跳出来 switch 呢,是不是也是这样子呀? 那如果匹配了一个选项之后,那会执行完相关的语句,随后遇到 break, 是不是也是跳跳出了整个 switch 语句啊? 第二点,布瑞克呀,他只能够结束当前所属的语句范围,那我们说了, 你呢在 break 两边找到啊,离他最近的这个循环,然后他所结束的就是离他最近的那个循环,那 switch 呢,也是这个道理啊,那他就是结束他所在的 switch。 来,接下来我们看一道例题,这个题目啊,是 这样的模拟 game 啊,叫女孩心思,你得猜是吧。啊? game 什么呢?是日本那边比较流行的游戏,那就是与虚拟的女朋友进行对话,现在说女朋友发高烧了,哎呦,你看,三十九度了,请问呢,接下来你要说什么呢?来,给你几次机会哈, 那第一个多喝热水,第二个还真牛逼,是吧,发烧到三十九度了都,第三个开门给你拿药了,你直接赶过来了哈。第四个就是你不想玩了啊,这个题太难了。好, 那我们啊,对应每个输入会有对应的输出啊,如果你是一和二呢,肯定会被打一顿的啊,实在是太太奇奇怪怪了是吧,那如果是三呢啊,女孩子非常感动,就会收获爱情,如果是四呢,那程序就直接退出了。咱们现在啊,是用一个循环, 然后来表达这件事,每一次循环的时候呢,都会问你啊,女朋友三十九度了,你该说什么呢?那如果说你每次循环当中啊,输入的是一和二,那就输出被打,输入的如果是三,那就收获爱情, 那如果说呢,这个循环你不想玩了,那就直接四啊,点击四的话呢,就会退出这个循环好了,我们呢先截个图, 把它放在这里啊,然后咱们去到 vs 里面来完成这个题目啊。好,我们把上面的代码啊先给注释掉,哎,注释好了,接下来呢,我们就开始我们的游戏啊,首先肯定要先搭一个爆循环的架子啊, 小括号,大括号。好,在这里面的话呢,我们其实是一个死循环, 不停的循环。那循环啊,死循环怎么写啊?是不是应该分号,分号就可以了,我们没有出使的条件,也没有终结的条件,然后呢,也没有迭代啊,也没有爱加加。好,在这里面呢,我们每次先输出一句话说女友高烧啊,然后三十九度, 请问你要说什么?好嘞, 然后呢,咱们给他几个选项啊,首先第一个选项是如果你输的是一啊,就是多喝热水,好啊,复制一份二 应该是什么呢?牛逼啊,是吧,啊,太猛了,这个度数我都发不到是吧,你都发到了三啊,那就是开门给你拿药了, 好,女孩子很感动是吧?然后四是什么呢?四是不玩了啊, 好,那我们每一次循环啊,都会打印这些内容啊,公用户来进行选择,随后呢,我们是不是应该啊,来一个数字啊, inter 用户的 input 啊,等于什么呢?我们是应该 control 点 read line 啊,读一行, 然后呢,把读取的这一行咱们需要给它啃啊, convert 啊,然后 to in 和三十二把它转换成一个数字好了,我们就拿到了用户每一次输入的选项, 然后接下来呢我们,哎,你看,这是不是三四个不同的选项啊?那这四个不同的选项是不是非常确定啊?当我们四个选项 是确定的时候,我们是用 f 还是 switch 呀?哎,是不是应该是 switch 呀?选择一下吧,然后 input。 好,在这里 case, 如果你选择的是一号的话,哎,那我们是不是应该输出什么呀?被打一顿啊,被打了一顿。 好,那我们是不是发现二号也是会被打一顿啊?所以说呢, case 一 跟 case 二可以做一次 case 穿透,哎,你看咱们之前学的是不是都用上了呀?好,接下来呢 case 三,如果是 case 三的话呢,我们应该怎么办呢?来把它们复制一下到这来。 好, k 三的话呢,就是收获了爱情啊,女孩子说,我好爱你啊,好,这是一个非常好 好的结局啊。 kiss 四,如果是 kiss 四的话,我们应该怎么办呢?哎,是不是就会选择游戏退出啊?对不对?在这里呢,我们先 break 一下啊。 好,那这个地方呢,处理就稍显麻烦了。你看,如果我在这里直接补 rick 的话, 那么是不是他就直接退出的是 switch 啊?因为呢, break, 他只能够退出当前所在的 switch 或者当前所在的缝儿,那他就开始找啊,这个 break 他会找。哎呦,我所在的是最近的是一个 switch, 那我就把这个 switch 退出, 那我如果想退出这个 for 循环,那可怎么办呢?哎,所以呢,咱们在这里是不是得有一个东西来标志一 用户是否想退出啊?好嘞,咱们在上面写一个 inter 啊,叫做 quit 啊,退出,那么等于啊,不要 inter, 我们 false, 呃,不玩吧,不玩 quit 等于 false。 好,那这个呢,它是用来代表 用户是否想退出,那 force 呢?代表用户暂时不想退出,对吧?好了,那如果说 kiss for 的话,那代表用户想退出了,所以 cut 等于处。哎,这样不就可以了吗?好, 那 switch 语句结束之后,我们是不是要判断一下呀?说,哎,这个 cut 呀,是否已经是处了?你看,如果 cut 是处的情况下,那我这里面应该怎么写呢?是不是叫 break 呀?你看当前这个 break, 它所在的是 switch 还是 for 循环啊?你看 switch 在这呢,对不对?所以它所在的是最近的是一个 for 循环,你看它是被囊括在了一个 for 循环里面。 好,那所以呢,一旦在这里补 rec 的话呢,他是不是就把当前这个 f 循环,也就是这个死循环给他补 rec 了呀? ok, 好,我们再次梳理一下在 switch 语句当中这一堆的 burick, 它们呢,是用来终结掉这个 switch 语句的,因为它们位于这个 switch 语句的大括号之间, 那这个 bureak 呢?他去找一找它位于外面的这一层 four 循环中间,所以这个 bureak 是服务于外面这样一个 爆循环的。好,来,咱们实验一下这个程序啊,走, 好,怎么办呢?我们首先多喝点水吧。啊,被打了一顿,然后继续问你啊,好,嗯,好牛逼啊,又又又被打了一顿啊,没办法了,那此时呢,我们学乖了啊,我们要收获爱情了。好,哎,好了,我们选三,他就收获了爱情啊,然后呢,这个女孩子说,我好爱你啊, ok, 那最后呢,我们啊,这个游戏不想玩了,我们就输入四走,你看这样的话就退出了,对不对?哎,退出呢,我们这个地方,我们再打印一条语句,表示退出啊,在这里 right 了啊,游戏结束。 好,这样我来标志一下,大家能看的更清楚。好,我们再实验一下啊,走,好,在这里呢,我们先随便输入个一,然后被打了一顿, 对吧?然后呢,直接就不玩了,数四走,那游戏就结束了啊,你看这个死循环就被跳出了。好,那这里呢,我们就展示了布瑞克的用法。 ok, 咱们回到 ppt 啊, 接下来呢,咱们来介绍第二个关键字,叫做 continu, 那介绍 continu 的话呢,我们使用案例二来给大家引导一下。说呢,要计算从一到一百之间的偶数加和, 那我们想是不是也是一个循环啊?我们之前做过从一到 n 相加的这么一个循环,案例在这里呢,我们只加其中的偶数, 也就是说在每次循环的过程当中啊,如果我们判定当前的这个 i 啊,它是基数的话,我们能不能有一个办法把它过滤掉啊?哎,好,那接下来咱们还是 去到 vs 里面去实现这个过程,先把这个架子搭出来,然后咱们再做一个分析啊,哎,上面的这些程序啊,咱们再把它给 啊打上注释好了,那我们先计算从一到一百之间数字的加和吧,是不是也很简单啊?先定义一个,哎,定义一个 some 用于存储数字的加和,然后呢,我们接下来定一个放循环,然后 inter i 等于一,从一开始 i 小于等于谁啊?一百,然后每次 i 都要加加,对吧?好, okay, 那在这里面我应该怎么写呢?我计算加和是不是应该 sum 加等于。哎呀,这个咱们之前都非常熟悉了啊,好,那在这个过程当中啊,我们只能够选择 g 啊,武术啊,如果是 基数的话,叫过滤掉,那实现这个过滤的功能,我们应该怎么办呢?你看很多同学啊,是这么想的,如果啊,基数,哎,基友数,我们怎么判定呢?是不是用 i 来百分之二啊,就是取一个余数啊, 如果说他除以二要余数的话,那就是不等于零啊,有余数的话,那就是基数,对吧?哎,这里呢,说明是基数。 好,那 airs 的话,那么就是偶数,对吧?好, 也就是说呢,我们试偶数的时候,是不是才把这个数加到项目上面啊?哎,很多同学是不是看这样写啊,那这样写的话呢,其实你看代码还是蛮丑的,对不对?那这个地方是不是就漏洞了啊,什么都什么功能都没有实现啊,如果是基数,直接就忽略了,对不对?好,那我们看一下有没有第二 二种写法啊?来,咱们把它注视起来,这是第一种,用 if 语言, if 语句啊来写。那第二种是什么呢?我们首先判断 if 啊, a 啊,百分之二,或者说向二取于,如果不等于零,那说明它是一个什么?是一个基数,对吗?好, 那如果他是一个基数,来这边写上,如果是基数,则选择过滤掉。好,咱们先这么写啊,然后呢,我们在后面这样来写,你看 some 加等于 i 啊,有同学说,那你这个地方就会没有用了呀,你看过来之后,他判定是基数,然后你在这里如果说写一些语句,把它过滤掉,但是是不是他向下继续执行的时候,还会把这个 i 加到 sum 上面啊?你说不管你这边做什么,我是不是这个 i 都会被 加到 sum 上,那老师你这样写有什么意义呢?好来告诉大家啊,如果我在这里写上一句话,叫做 con, hey, new, 哎,这件事就变得不一样了, continue 是干嘛的呢?如果发现它是基数, 我们选择 continue 的时候,他会直接终结掉这一次的循环,然后直接就跳到爱加加,开始下一轮的循环体了。 也就是说,比如说吧, i 等于一,那 i 等于一,发现是不是余数不等于零啊?也就是说一是几数?那他遇到 continu 之后呢,下面的语句就不执行了,他会直接向上走到 i 加加这边,再判断一次,然后再往下走, 而此时 i 等于了二,所以二跟二取个余是不是零啊? ok, 是零,那这个 if 里面的东西就不执行了,他就会跑到 some 加等于 i 这边,把二加到 some 上,随后呢,再走到这里, i 加加, i 加加,之后呢, i 点三三小于等于一百没有问题,就会走到这里,发现三是个基数, 三十个基数呢,就要进到 f 语句里面去执行了,就发现了 continu, 然后呢,一执行, continu 下面的又得不到执行了,他会直接从 continu 这边又去到了 i 加加这边,然后 i 小等于百。 所以说 continue 是干嘛的呢?来,我们写在这里, continue 语句, continue 关键字啊,用于 干嘛呢?结束当前本轮次啊,我说本轮次吧,轮次的循环内容开启,直接啊开启下一轮循环。 哦,明白了,你看 break 的话会终结掉,直接把所有的循环都干掉,你就说后面的循环不做了,而 continue 的意思是说,我这一次的循环不干了,我直接跑到下一次循环里面,爱佳佳直接干下一轮了。 所以说呢,我们就可以将啊我们的代码写在后面啊,比如说丧加等于 i, 而前面呢,我们放了一个过滤器,如果呢,他是偶数,那就通过了过滤器,我们就可以走这一步,如果是基数的话,他就通不过过滤器,一 一个 continue, 把它送回到上面去了,开启下一轮循环了。好,这就是 continue 语句啊。来,我们把这个程序啊运行一下感应输出啊, ctrl 点 right line some 走, 看,我们就打印出来啊,二五五零。好嘞,咱们呢, debug 一下,看一下整个过程啊。来,我们还是在 sum 这打一个断点走,你。 好,然后咱们一句一句看啊主过程,走 i 等于一,没问题,出死化 i 小等一百吗?确实小等一百。随后呢,进到循环题里面,判断一下是基数吗?一去跟二去余,确实是基数,于是呢, 走到了 continu, 走到 continu 的话,你看他跑哪去了?他直接走到上面 i 加加来了,看到没有,哎, i 加加,然后呢, i 变成了二走确实小的一百没有问题,再检查一次条件,然后再往下走, i 是二,那就是偶数。好,就,那就不执行里面的 ctu, 我们看他去哪里了,哎,是不是去到 sum 加内 i 了, 所以这个二是不是会被加到 sum 上面啊,然后继续走,再判断,哎,加加之后,哎,变成了几啊,变成了三啊,哎,变成了三,你看 三确实小于等于一百,于是走看一下,三是基数吗?是基数啊,所以进到这里走 continue, ctrl 呢,又会把三给过滤掉,不执行下面的代码,继续走到下一轮循环, i 加加,于是 i 变成了四。好,那整个循环的过程啊,哎,就是这样去完成的。所以呢,我们可以把 contler 啊,当成一个过滤器,有很多不符合咱们下面代码 的一些条件。咱们下面代码啊,需要一些条件才能执行的话,那如果有些不符合条件的情况,我们可以在这里全部都拦截掉啊,用 continu, ok, 好,咱们回到 ppt, 那咱们总结一下 conteno 所使用的细节。首先呢, conteno 目前为止用于循环当中,那可以跳过当前循环的代码,强制开启下一次的循环执行。 然后呢,岗亭九通常用于过滤一些不需要执行本循环逻辑的情况啊,就是将异类给铲除掉。好了, 那咱们最后总结一下啊, break 与 continue 都代表什么含义? break 是强制结束所在的循环语句,或者是结束所在的 switch 语句。这里需要注意的是, break 能够结束他所在的离他最近的那个循环当中啊,能够结束离他最近的循环。好,那 continue 强制结束当前的循环过程,开启呢,下一轮的循环过程。好,那咱们这节课就到这里。

哈喽,大家好,今天做了一个这样的冲击波的效果,我们来看一下啊,每隔五秒会发动一次,就可以躲过他,如果你不躲的话就会掉血 对吧,这样一个东西,然后他消失的时候,他是有一个对吧,逐渐对吧消失一个过程的。 然后这怎么做呢?这个其实先做了一个 share 的,去实现这样一个圆环的效果,然后控制它的缩放,让它逐渐放大。嗯,我们先来讲一下,就是 这里有一个 blast wave 冲击波 软化的素材,其实是一个圆 形啊,就是一个就是一个圆,一个标准的圆。然后呢,给了他一个自己写的一个材质,是基于那个 shedgraf 的,然后 shedgraff 里面大概这么写的。其实也不复杂。 首先正常的 main text 进来对吧?采样,采样完之后把颜色呃给过来,然后这我成了一个颜色,可以让他有一个那种光晕的效果,成一个 h, d, r 的颜色。这个是小问题。 然后就是怎么实现这个圆环的效果啊。圆环的效果的话,挪开 圆环就这里先取出,即坐标,那么取坐标 给出来之后,它不就是第一个就是那个半径吗?半径应该是从零到一,然后你给它 y minus 反一下,就从一到零就有这样一个效果。 然后呢, percent 话是说他那个显示的圆环部分的比例占整个圆的百分比,比如说是百分之十的话,那也说那个圆环的厚度是那个半径的十分之一对吧。先给他也是 one minus 一下,剪一下, 剪完之后用那个 step 的函数,这可能看不出来,因为这个地方可能等一下应该能看出来。对啊,这个应该是零点有零点二 对吧?百分之二。剪完之后 step 对,因为它边上都是都是亮的,所以说看不太出来。你可以 把它再改小一点就看出来了。比如说那个厚度再厚一点,又到零点五对吧? 零点八的意思说就是这个圆环的厚度零点八。所以说呃大于半径零点二的部分往外都是都是都是一,其他都是零,就这个意思。 然后把这个东西和这样一个呃渐变的效果给它存起来,存完之后不就是一个圆环了吗,对吧? 这个是给他一个强度的值,然后这个圆环再跟这个 alpha 乘起来,给他 alpha 就实现了这样一个圆环效果就很简单。 那这圆环不有几个参数吗?我们可以看一眼对吧?有这么几个参数,一个 percent 就这个宽度是百分之二十,百分之十就更细一点,百分之五十就是这个圆一半的大小,你要是一的话就是就是个圆盘了。 los 卷式的话是那个渐变效果,你要把它调大的话,它就会对吧,渐变的比较弱, 你零点一的话它就能看出来一个渐变,它的透明度从从一到零加一个渐变,然后这个 h d r 颜色通过这个来调,它的发光这么大 对吧,你调小一点的话,发光力弱一点。 这一个发光的圆环。然后这个碰撞怎么来实现呢?因为我这个是没有挂碰撞体的,那么他的碰撞的话是通过那个代码来实现的。主要在这个里面就冲击波的控制,因为我们控制他从小变大吗?首先我们讲下那个从小变大怎么做的?呃,就是这样一个动画, 就是我那个 attack 之后它会执行这样一个动画。这动画的话是先把那个 percent 设成默认值,因为它最后消失的时候,那个 percent 要从零点二到到零那个变化。这也是啊,不会变的零点二。然后那个 s scale 那我设了一个 max, 这个有率最大的那个缩放就是这个像这个圆环,它这地方它是有一个最大的一个缩放是五,就是变成五倍嘛,等一下最大 变这么大对吧,他要从零开始,然后逐渐逐渐变到五这样一个过程。 然后这上面还有一个 speed 的,就是它扩张的时间对吧,你这个最大的那个缩放量除以这扩张时间,就是扩张的速度嘛。然后你写一个循环,让它那个呃缩放变大就行了。 然后这边是检测碰撞用的,然后结束的时候就是让那个 percent 从零点二 对吧,变到零,然后给他的材质就行了。最后结束的时候就会啊有一个逐渐消失这样一个动画。然后怎么检测碰撞呢? 碰到检测的话是在这里,我是等于是自己算出了一个圆盘大小,所以 反的话会等于这 s r 是那个 sprite render, 嗯,就是这里 就是圆盘。因为还有缩放吗?你看原始的尺寸,乘上这个缩放除以二,就是那个半径吗?对吧?然后我们直接用那个 phys physics to d 去 overlap 一个呃这么大半径的一个圆中心点,就是它这个圆盘的中心点,然后给它一个 呃,那个 layer 的一个野马告诉你碰撞哪些城嘛?楼这城的话,我这里是之前定义好的一些。比如说如果是我这个圣官那个阵营的 子弹的话,那么他需要碰撞的就是需要跟玩家碰撞啊,需要跟那个暗影联盟碰撞,然后需要跟 新创的生物碰撞,然后也需要跟物体碰撞,这是他需要碰撞的一些东西。 吃好之后就把所有的框框 d 取出来。取出 out 还还是不够的,因为有时候比如说 你这个主角对吧,我通过那个闪避技能闪避到里面去了,他在这个圆盘里面,他的碰撞也会检测到,但因为没有在这个圆环上对吧?我们应该把它刨掉啊。怎么刨掉呢? 就是我们再算一下他的那个距离对吧?我或许我的主角站立的脚的位置和这个圆盘中心的距离 就这个距离,如果这距离大于我的意见 percent 的话对吧?一个百分比就是那个零点二的话,就是一零点零点八零点八倍的那个半径吗?就如果你大于这个零点八倍的半径的话,我就容易碰撞。 这意思就是说当这个主角站立的脚的位置是在这个圆环上的时候,我才认为是一个碰撞。碰撞之后我会把它加到我一个 呃集合里面去,就防止他反复换同一个同一个物体。加入完进去之后,有每次在碰撞的时候会判断一下是否在集合里面,如果是的话就说明他已经被碰撞过了,碰撞过的话就不会再碰撞他,不然的话他一下对吧?那每一针都碰撞一次,那就直接立刻就死掉了。然后就这样一个逻辑。 呃。最后我们再来看一眼的效果, thank you。 就这样一个效果,大家看这个圆环,那个边缘碰到主角的时候还会掉血,然后你是可以躲的,我就看到他那个攻击的骑手,动画时候你一闪避,那就可以闪开闪开他。 这动画有点简陋啊,确实没办法,因为我要干的事情还很多,所以画在画,在这个画动画的时间可能只能一天就把它画完。所以这角色基本上就是全身不动,就手在动,非常懒惰。就这样一个效果。 好的本期的视频到这里了,谢谢大家。