- 博客(27)
- 收藏
- 关注
原创 “场景”水和荆棘的逻辑实现
我们创建两个单独的Tile Map,一个用来画我们的水Water,一个用来画我们的场景当中的荆棘叫做Spike,他们两个身上都一定要挂载我们的tile map2D这个组件,并且要勾选Is Trigger,不然会把人物弹开了,人物掉在水上就下不去了。我们现在Scenes点击“ + ”--现在Scene,创建一个新的场景来进行绘制Forest,之后我们就可以打开这个Scene,在这里进行场景的绘制,我们只在这个场景中绘制地图,不需要摆放其他的文件内容。到水面,就死亡,更新血量,或者播放音效或者其他东西。
2024-10-25 13:07:46
422
原创 “声音”音源设置和音效播放
摄像机上有Audio Listener原因就是有时候可以使用一些3D的音效,只有走进的时候,才会播放,这样的话,我们就会挂载特殊的物体身上,比如野猪来回巡逻的时候,可能会发出喘息声和走路的声音,在他身上会有一个移动的音效,他也有一定的范围,只有我们的摄像机进入这个范围之后,才能够监听这个音效,我们其他的音效,攻击跳跃等等,不会持续不断的播放,也不会在游戏一开始就播放,所以我们再添加另外一个Audio Source,这个取消勾选Play On Awake和Loop,用这个来播放其他的音效。
2024-10-24 20:57:50
1498
原创 “摄像机”跟随及攻击抖动实现
我们看一下我们Virtual Camera--Cinemachine Confiner,在我们获得了我们的碰撞体之后,下面有个按钮叫做Invalidate Cache(强制我们清理一下缓存,下边有详细的说明,如果一旦从一个场景切换到另一个场景,从一个边界切换到另一个边界,需要通过这个默认的函数方法,来清理掉之前的形状缓存,这样才能让他应用于新的这个形状),所以我们可以直接调用这个函数Invalidate Cache,我们在代码当中把它添加进去。有了这个震动源,他才会监听每一次的震动事件。
2024-10-23 22:28:36
1001
原创 血量更新逻辑的实现
ScriptableObjectt是一个可以持久化储存在项目当中的一个资产性的文件类型(例如上次添加的ColorPalette插件,他其实就是一个ScriptableObject,我们的inputSystem下的inputControl,也是一个资产性文件,我们可以找到这个资产性文件对应的所有的子类,每一个都是一个单独的ScriptableObject,所以它可以持久性的存储在我们的项目当中,是一个.asset的文件)这样只要我们受伤了之后,我们的血量就会传递进去,然后每一次都会执行。我们来创建这个代码,
2024-10-22 21:58:16
1080
原创 创建人物状态栏
Canvas非常的大(因为Canvas是覆盖我们整个屏幕画面的,可以看到右侧的Canvas的Render Mode是Screen Space-Overlay(也就是整个屏幕是多大,Canvas就有多大,它可以完全覆盖整个屏幕,也就是他跟我们的场景是完全分离的,这一点就不用担心在不同的设备上有不同的效果了,我们能保证在所有的设备上都能满屏的填充,我们的整个的画布)Match设置为0.5(这个的作用,有些同学使用的是带鱼屏,带鱼屏的宽度会非常的宽,比如说2560,所以如果希望优先考虑宽度,就拉到左边;
2024-10-22 18:08:08
1015
原创 “敌人”追击状态的转换
我们做好了这些之后,我们可以看到Boar的中心点,我们希望能知道我们检测的这个盒子发射了多远,希望可以在Scene中绘制出来,然而这是中心点这个位置其实并不是非常重要,那我们可以再次加上Vector3的值,把它的x值赋过去,给到我们的checkDistance,让这个坐标移动到检测范围的那个地方。如果我们丢失了这个目标之后,我们就要让他进入一个倒计时,我们也要场景一个新的计时器,之前我们有一个等待实际,我们也要有一个丢失目标的等待时间,然后我们计时器过了一段时间之后,就把状态转换回去。
2024-10-21 21:05:57
769
原创 有限状态机和抽象类多态
我们先来写一下,这些函数方法,我们也用abstract来定义(之前用的是virtual,因为它继承了ScriptObject,也是unity当中的一种类的类型,里面也包含了一些,帮我们写好的预制函数的方法等等的一些逻辑),在这里,我们什么都没有继承,我们直接用abstract来修饰这个函数方法。这些都是类继承的好处。首先先返回到野猪的Boar代码,把以前写的Move函数删掉,我们不用重写我们的移动,就放在FixedUpdate当中去执行就好了,至于动画,我们会放在我们的状态机里面去执行,
2024-10-21 01:25:13
817
原创 “敌人野猪”受伤和死亡的逻辑和动画
协同程序返回值),返回一个迭代器,这个迭代器中包含,按住ctrl键点击IEnumerator一下,会出现代码,这里边是可以按照一步一步的顺序来执行的,我们可以看到现在有一个当前执行的内容,这里面有一个布尔值叫做MoveNext(移到下一个步骤),所以用携程的方式,可以帮助我们按照一定的顺序来逐一执行,而且在中间我们可以添加等待的内容,让他等待一段时间或者等待上面执行完成之后,再执行后面的内容。首先我们现在运行游戏的时候,我们的玩家是可以一边跳跃一边攻击的,如果需要有这样的功能,可以保留;
2024-10-20 12:45:54
886
原创 “敌人野猪”撞墙判定和等候计时
右侧x的值应该等于我的碰撞体整体size的一半,那我们要用的就是碰撞体,然后这里面我们要用到的变量叫做bounce(世界坐标)碰撞范围,在Scene的窗口种看见的绿色的框,他的尺寸的x,我们还有位移,我们只获得了这个x只是他的尺寸(比如说1.5宽,2.0宽,但是我们除以一半之前还要调整相加一下他的位移,这个点并不在我的碰撞体的这个边缘的位置,我们检测的基准点,是根据我们整个的当前的这个物体,也就是这张图片的中心点,我们是在中心点的基础之上来加上左右的offset,来进行绘制和检测的,
2024-10-17 19:58:33
955
原创 “敌人野猪”基本的移动逻辑和动画
在此基础上,我们想要播放我们的动画,我们可以在这里面单独的去播放,不过我们目前没有办法访问我们Animator的这个变量,原因就是因为刚才在Enemy当中的组件,我们没有添加修饰符。首先我们要调整一下,他有基本的移动,也会切换到跑步的状态,我们也要给他添加一些条件(我们不想让他和人物一样,通过velocity的速度来判断他是walk还是run,因为我们还要蜜蜂和蜗牛,三个敌人的移动速度都不一样)我们希望在这里面通过布尔值,通过切换状态来改变它的移动的动画或者是跑步的动画。y轴的速度,保持刚体的y轴速度。
2024-10-16 13:49:05
940
原创 角色实装攻击判定
那我们怎么做攻击的动画呢,我们要一直让他启动吗,我们知道我们会用Tigger的方法,那么我们只在一帧里判断的话,就执行单次,那我们就会使用关闭和启动的方式(比如说我们在攻击的时候,我们要选择这个物体的编辑,我们在不攻击的时候,我们就把这个物体关闭,他就不显示了)然后我们在时间轴上查看一下动画,我们希望他在0:03这一帧的时候来播放,判断的范围就是我们剑影大概的范围,我们点击编辑,将碰撞体的框子拖拽到这些点位上,来形成我们碰撞检测的范围(改碰撞体范围时,两条线之间,点按一下可以添加多一个判断的点)
2024-10-15 20:48:15
467
原创 三段攻击动画的实现
combo数字变化太快,导致我们连续按键的时候,他没有办法按照我想要的顺序进入到每一个攻击阶段,那么索性我们可以在这个项目当中不用combo,我们留意一下Animator在这个攻击二段的时候,这个动画我们只有两针,所以动画变化速度非常快,我们用90%的动画播放时间作为一个判断标准,在这个判断时间之内,我们按下攻击按键,都可以进入到下一段,这样就可以成功满足我们的三段攻击,我们直接修改一下条件,把combo删掉。我们要在他播放到90%之前如果我们按下按键,那么就切换到Attack2;
2024-10-14 14:12:20
692
原创 受伤和死亡的逻辑和的动画
我们要在OnDie中添加一个方法,比如说我们要执行Animation当中的一个动画,人物的死亡的状态是这个布尔值,所以他不是单次执行,我们没有必要单独去写,我们可以把这个状态,直接联系到我们的Animation当中,然后我们通过Controller,要停止我的人物的所有输入,静止人物跑跳,让人物一直躺着。我们要取的是他的方向值,而不是实际的数据大小,那我们算完之后,如果人物离野猪非常远,x的值非常大,再乘以反弹力会出现一个很大的数值,里的近的时候,数值会变小。在这里面我们先不调用受伤的动画。
2024-10-14 11:10:23
666
原创 人物属性及伤害计算
一旦触发无敌,我们就要判断一下,如果当前不是无敌的状态下,我就把它设置为无敌,所以当前不是invulnerable的状态下,那么我第一个要改的就是把invulnerable改为true,接下来进行触发时间,要让invulnerableCounter=invulnerableDuration,计数器时间有了,计数器时间我们不能随意修改,我们要保持他不变(每次固定几秒的无敌状态)我们点击Player来运行一下,现在人物就可以穿过野猪了,两个野猪也不会发生碰撞了,那么我们如何检测他贴近我们的野猪,会产生伤害。
2024-10-12 13:34:36
906
原创 创建人物跳跃动画
y轴的速度目前我们还不知道,接下来我们先保存项目,返回到游戏当中,我们选中Player,查看一下Rigidbody2D这个组件,打开info边运行边观看velocityY这个值(先从这个正数变成0然后变为负数一个很大的值,大概正数13,14,15左右,空中最高点为0,下落为负值,这就是一整个动画的转换的速度的切换值)那刚才我们创建了这个变量velocityY,我们要在代码当中将他同步到Rigidbody的y轴的数值。如果人物落地直接跑动,我们就马上执行跑动的动作,快速打断落地动画。
2024-10-11 23:06:14
1037
原创 创建人物基本动画
条件创建在Animator窗口的左侧左上角有一个Parameters,在这里我们可以创建一系列的变量参数来实现不同条件,在没有任何条件的情况下,它也可以单独切换,inspector窗口中有一个Has Exit Time,我们人物一旦跑起来,它的x轴的速度就发生了变化,我们可以通过这个速度的变量值来切换我们的这个动画,到Parameters里面点击加号,可以看到我们可以创建四种类型的变量参数,在这里面我们创建float,速度是float值,起名为velocityX(Parameters变量中最好以小写开头)
2024-10-10 21:27:31
1032
原创 物理环境检测及绘制
我们留意在Rigidbody2D当中,我们有一个参数变量叫做Material(物理材质),里面写了Physics Material 2D,同样在我们的Capsule Collider当中也有这个Material,也就是说当前的碰撞体,你也可以给他添加一个物理材质,那我就可以创建一个光滑的物理材质,让这个人物不会粘在物体身上,接下来就是我们检测的范围,我希望这个范围可以在unity中进行编辑,所以我们可以创建一个变量,起名为checkRaduis检测范围,这样我们就可以在unity中进行编辑,修改调整大小。
2024-10-09 18:09:43
940
原创 实现人物跳跃
因为注册函数是有固定写法的,可以看到这个函数是有一个参数变量在括号当中,我们之前写的Move是没有任何参数在括号中的,这时候我们按下按键跳跃,他会传递进来一个我们inputAction的一个Callback的返回函数,在这里面,我们不需要修改callback的任何内容,不更改变量名字,调整一下函数的位置,到Move下方。他是一个事件的方法,那我们要添加一个事件注册函数,注册的内容就是用“+=”来进行注册,注册函数Jump(代表把这个函数方法添加到你按键按下的那一刻执行,也可以添加多个,按下后都会执行)*/
2024-10-08 21:58:03
616
原创 实现人物的移动和翻转
保存代码,返回到unity当中,接下来我们可以在Player的Player Controller当中看到变量Rb,这里面现在是空的,没有获得任何的Rigidbody 2D的组件,那我想要获得一个简单的方法,我可以将自身身上的Rigidbody 2D点击拖拽,放到这个位置,那么我们就获得了这个组件的使用权,有了这个组件后,我们就可以调用这个组件当中的所以变量参数。首先第一点要确定我们的人物的图片,图片的锚点位置决定图片的翻转,这个位置决定了我们人物的中心轴的翻转方向,要注意翻转的轴。
2024-10-08 19:51:50
760
原创 创建及配置新输入系统
文件名字要与class后的类名一致,如果不一致,那么无法使用该代码,所以一开始创建的时候,就要把名字改好(创建之后就要立即改名,否则会不方便,脚本名统一用大驼峰的形式,在命名变量的时候可以使用小驼峰的方式,尽量使用统一的代码规则,方便对代码进行纠错),然后就可以将这个代码添加到Player的身上。在path中点击下拉菜单,点击listen,这个时候他会监听我们输入的按键,比如说手柄的左侧遥感,移动手柄摇杆,会自动提示,希望输入检测那个一个手柄的值,这样就实现了多种输入的绑定。
2024-10-08 09:04:36
1049
原创 设置人物及基本组件
碰撞时相关的检测的关系,collagen detection(检测的频率,默认选择为间歇性的Discrete,还有一个选项持续不断的检测Continuous,由于人物后续会添加爬墙滑铲等更多的动作,人物的动作很多,希望检测更加精准,可以选择continues)player中的Rigidbody2D的Mass:人物的质量(相同的两个物体,谁的质量大,代表模拟他的重力就更大,在移动的时候,可以撞击开比较轻的物体,模拟真实世界的物理碰撞)
2024-09-26 22:11:41
839
原创 有规则和动态瓦片
流水是3*4的图,用一行的三张基础图,让三张图片按照固定的帧率向下,逐一切换到下一张图,让其动态的切换图片,实现一个流动效果。为了方便找到瓦片,可以到Forest-1的切割画面对瓦片进行改名Ground1-1(中间黑色的六块先无需改名)size选择3,草坪有三种类型的瓦片,选择3,在下方选择瓦片样式,再添加时,3种瓦片可以随机出现。Noise选项表示随机的内容,改变的时候,图片是有变化的,表示其的随机数,可以自己调整。这样就设置好了规则的瓦片,需要理解里面的设置原理,和瓦片的随机,等等内容。
2024-09-24 20:54:31
925
原创 场景绘制和叠层设计
在Scene窗口的右下角有Focus On选择Tile map即可显示当前绘制的图层,与Tile Palette中的绘制图层相对应。Back和Front中的内部顺序通过Order in layer进行设置,(数值越大,显示越前面,数值越小,显示越后面)为了使物体显示图层不同,草坪显示在人物后方,将刚才在Hierarchy中的Tile map改名为Platform。Hieraichy--“+”--2D Object--Tilemap--Rectangular创建一个方形。
2024-09-23 12:10:17
643
原创 素材导入和整理
Type--Grid By Cell Count(指定行列大小进行切割)(若选择Automatic方式切割,每一个图片被单独切割出来,位置高度不同,不适合制作动画,为方便使用要选择统一的锚点位置,按照像素比例或者每一行每一列的方式进行切割)Pivot(锚点,图片中心轴点的位置,默认情况下以中心为锚点“小蓝圈”,按照脚底来进行切割方便人物在场景当中,每一次贴近地图都以脚底的位置来进行计算)Pivot--bottom(以脚底中心点为图片编辑的中心点)未切割好的话只有一张。
2024-09-22 17:19:43
682
原创 get和post传参演示
GET请求是一个幂等的请求,一般Get用于对服务器资源不会产生影响的场景,如请求一个网页的资源,post一般用于对服务器资源会产生影响的情景,如注册用户。get请求时直接通过URL直接请求数据,数据信息可以在UIR中直接看到,比如浏览器访问,而post请求是放在请求头中的,我们无法直接看到的。post传参的方式字符串:创建对象,设置请求行,设置请求头,发送请求,获取响应结果。get请求可以将请求的参数放入url中向服务器发送,GET通过字符串传参,post通过请求体传参。get请求安全性不如post。
2023-10-27 21:52:25
136
1
原创 【无标题】运用phpstudy构建网站
step 1:打开 phpstudy,启动WNMP,Apache2.4.39,MySQL5.7.26。step:创建文档后,打开根目录,在记事本中输入。step2:网站建立。step4:打开网站。
2023-10-27 00:36:06
86
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人