
游戏开发日志
J-SL
随便写写的小白
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
游戏开发日志17(保存技能树信息)
经测试,通过Save/Load按钮,可以正确实现技能树信息存储了,但是会有问题,当保存后继续加点其它技能,再load后,保存后继续加点的其它技能依然显示,经检查数据保存是没有问题的,只是忘了把之后技能的颜色返回原本的灰色,所有我先在Awake中去记录最初的阴影颜色。最开始的想法是这样的:在GameManage中写一个public List<SkillData> skills=new List<SkillData>();与unity中的SkillData资源文件联系起来,在Save类中创建。原创 2023-06-22 12:19:41 · 4037 阅读 · 2 评论 -
游戏开发日志16(技能树下)
由于SkillData中的preSkills[]是用来存放解锁条件的SkillData类型值,其中有个isUnlocked,于是可以写个函数UpGrade,在UpGrade中遍历preSkills来判断是否有isUnlocked为true的,从而进行updateSkill。但是,ScriptableObject并不能保存数据,接下来我将利用PlayerPrefs/二进制 来存储技能树信息,并且开发相应的技能功能。原创 2023-06-18 16:31:13 · 177 阅读 · 0 评论 -
游戏开发日志15(技能树上)
这样,当鼠标点击button时,SkillManage.instance.activeSkill=skillData;可以由activeSkill接收到所点击的图片的SkillData类型的数据,再用DisPlaySkillInfo函数把activeSkill的信息提取到介绍的UI上。如图每张图片都是个button,并添加上SkillButton脚本,给每个SkillButtonn脚本赋上SkillData类型的值。之后是点击让技能信息显示,创建SkillManage脚本,将其挂载在一个空物体上。原创 2023-06-16 21:06:04 · 286 阅读 · 0 评论 -
游戏开发日志14(利用二进制来存储数据)
现在就创建好了一个Data.text的二进制文件来存放Save类的数据,读取也是类似的操作,由于我的这个游戏击败了敌人敌人不会消失而是变换状态,所以在save前判定broke为false时(被击败),不做操作,在save后判定broke为false时,说明save前为true,这样就执行销毁(save后的broken为false状态),重新生成一个(broken为true的状态)。首先,我想要存储敌人的位置信息,且当我消灭了敌人时(save之后),load依然能使它出现在预期位置,并且状态正确。原创 2023-06-11 11:13:51 · 834 阅读 · 0 评论 -
游戏开发日志13(利用PlayerPrefs来存储数据)
这里使用rubby.transform.position=new Vector2(position.x,position.y);来修改位置信息是个不错的选择,因为rubby.transform.position是不能被修改的。其中PlayerPrefs这个静态类,可以通过键值对来存储整数,如PlayerPrefs.SetInt("BGM",0)中,BGM为键名,0为要存入键的值。为游戏设置一个音量键,可以自由选择背景音乐是否开启,并且保存这个设置。其中BGM为Toggle,其余四个为Button。原创 2023-06-08 19:24:17 · 352 阅读 · 0 评论 -
游戏开发日志12(优化技能UI)
将其颜色调暗(冷却状态),再把Image Type改为Filled,这样就可以通过修改Fill Amount的值来改变遮罩程度了。将Clockwise取消勾选,则可改成顺时针取消遮罩的状态 (clockwise:顺时针)创建一张image,再将它复制一张(image(1))作为其本体的遮罩。添加Button组件,来为它写个冷却的脚本SkillTrigger。可以在text文本上添加Shadow组件为其增加阴影效果。可以添加Outline组件为文字增加边框,调节边框颜色。其中X,Y为阴影偏移量方向。原创 2023-05-29 19:04:00 · 100 阅读 · 0 评论 -
游戏开发日志11(大Boss制作)
由于在一个物体身上添加多个BoxCollider,其都是通过一个方法来统一调用的,为了能实现在不同部位产生不同的伤害效果,所以我干脆用多个空物体来替代。复制一个Enemy,将它放大,删去并重写EnemyController和EnemyBar脚本。想了想感觉我特效还不太会,就暂时不做技能了,接下来的时间里学一学UI和特效。原创 2023-05-27 11:42:00 · 128 阅读 · 0 评论 -
游戏开发日志10(敌人血条跟随及动画适配)
要使敌人被击中后相应的减少血量,MaxValue和Value就不需要序列化了,所以我把它们设为了private,然后在Change函数里传入子弹的伤害值DanmageValue就行了,但是有一个问题,子弹是未实例化的,所以要将DanmageValue设为static,如果在Update函数里调用还要去判断是否trigger,不如直接在子弹的脚本里调用Change更省事。明天我会创造一个更强的Boss,拥有更厚的血量,并且被击的部位不同受到的伤害也不同,攻击力更强且有一个强大的技能。在敌人被修复后关闭血条。原创 2023-05-26 15:31:21 · 210 阅读 · 0 评论 -
游戏开发日志9(敌人血条制作)
刚刚我们说到他们的使用是有一定的规则的,那么规则是什么呢,答案是前两种结束协程方法的使用上,如果我们是使用StartCoroutine(string methodName)来开启一个协程的,那么结束协程就只能使用StopCoroutine(string methodName)和StopCoroutine(Coroutine routine)来结束协程。协程,从字面意义上理解就是协助程序的意思,我们在主任务进行的同时,需要一些分支任务配合工作来达到最终的效果。原创 2023-05-25 17:17:27 · 212 阅读 · 0 评论 -
游戏开发日志8(自动寻路系统)
如果要让敌人绕过某个物体来追击主角,可以在物体上添加Navigation Modifier,把Area Type改为not walkable,然后重新Bake。但由于TileMap的一些collider和背景重叠了,分离起来比较麻烦,所以我暂不处理,应该有多张TileMap,分为背景层和碰撞层。回到刚刚创建的NavMesh物体上点击 Navigation Surface的Bake,这样就会依据TileMap自动生成导航网格。综上,自动寻路系统还很不完善,以后再慢慢改进,下回我将会为敌人制作血条。原创 2023-05-23 17:54:56 · 435 阅读 · 0 评论 -
游戏开发日志7(给技能一些限制条件)
这里存在一个问题,也就是提示玩家技能正在冷却的ui显示不正常,原因是usedCount--会被减至负数,我需要让其在数值降至0时不再下降。接下来我要让当技能重新填装时,ui消失。因为就两格能量,我就用笨方法了。原创 2023-05-21 15:12:26 · 92 阅读 · 0 评论 -
游戏开发日志6(给主角添加技能)
Debug发现skillAbility 是0,可是skillAbility 不是局部变量啊,仔细一看原来我写成了public,而在unity中不知何时把它的值设为了零。想法是给主角写一个Skill类,在这个类里去获取主角的方向属性和位置属性,通过方向属性来判断闪现方向,通过修改位置属性来实现效果。的原因,由于currentLookDir和position在函数内部,为局部变量,而我还去用Vector2 定义,实在太马虎了。但是在写脚本时还是遇到了不少问题,不过都一一解决了。原创 2023-05-21 11:11:21 · 198 阅读 · 0 评论 -
游戏开发日志5(新增装备:子弹伤害放大器)
最初想法是设一个计时器,在持续时间内去访问Projectile脚本,修改子弹的伤害属性(DamageValue),由于Projectile未实例化的原故,我把Projectile的脚本暂挂在了其它地方。原本是想做一个可以使下一次Projectile的伤害大大增加的,不过因为Projectile未实例化的缘故,暂时没想到什么好的方法,还是改成了让效果持续一段时间,不过在写脚本期间还是遇到了一些问题。发现子弹伤害值显示被更改,但是打到敌人时伤害又被重置为1了。在实际测试中却并没有如期。原创 2023-05-20 10:28:29 · 101 阅读 · 0 评论 -
游戏开发日志4(新增装备:铠甲)
接下来做的铠甲,我想要让它在有效期间,减少主角受到伤害的70%,目前我只设置了两个可以造成伤害的物体,且都是用ChangeHealth函数来改变血量值的。于是想到可以在ChangeHealth函数里改变传入的参数amount,写一个脚本给铠甲,当脚本激活时,改变amount。在UseSystem里加上:private string message3 = "在一定时间内减少任意来源的伤害";原创 2023-05-19 14:58:24 · 132 阅读 · 0 评论 -
开发日志3(增加新物品:动力药水)
于是再UseSystem脚本上加上GameObject.Find("动力药水").GetComponent<PowerWater>().enabled = true;由于背包系统的RefreshItem函数完善的挺好,照葫芦画瓢加了个动力药水,使一段时间增加移动速度。不过感觉让Update在这个脚本上一直运行有点耗费性能,寻思着在必要时再打开它。这可以使得这个脚本开启,等到脚本执行完毕时,再让它关闭。在UseSystem脚本上写上。原创 2023-05-18 18:50:38 · 87 阅读 · 0 评论 -
Unity背包系统(源码)
3、GoodsOnWorld与InventoryManage。2、GoodsItem与Inventory。3、背包中物体的显示、移动、交换。以下是这个背包系统的所以源码。1、背包的打开、关闭与拖拽。2、背包中物品数据的存储。4、背包数据库的实时更新。原创 2023-05-08 20:45:47 · 946 阅读 · 0 评论 -
Unity更改列表中的数据
通过inventory.GoodsItems.Remove(item);当我把背包中的一个item用完后,我在设置Slot中写道。但是相应的,背包对于的列表中的元素也要修改,可以。当用完item,这样图片就不会出现在背包中了。但别忘了移除后还要加一个空的回去。这样就实现了更改列表中的元素。原创 2023-05-15 15:53:35 · 1623 阅读 · 0 评论 -
开发日志2(接上回修改背包系统导致的一些问题)
稍作修改,让SetupSlot方法增加一个参数i,标志传入的item在列表的几号位,再将列表中与i对应的元素设空。由于我更改了Slot类,使得当物品用完后使其在列表中的数据移除,但是,这无形中移动了物品在背包中的位置。我想现在的RefreshItem方法应该完善了。原创 2023-05-18 12:54:49 · 104 阅读 · 0 评论