跟着元气学编程【5】:武器的草率实现

2022/12/31476 浏览综合
开始之前有必要说明一下,我找到美术了!ohhhhhh!这位热心的大佬就是 黎明踏梦 ,接下来的武器及子弹等众多优质素材全部来自于此,这里给大佬磕头了,感谢大佬的帮助。
前前后后写了又改改了又写,搞到最后成功内容估计不多,赶紧把失败的记下来水点内容,要不然我不白浪费这么多时间了吗?ʕ •ᴥ•ʔ
决定把配置文件换成xml,txt草率了,最开始以为能用一会,没想到第5期就废了。不过抢救txt时倒是发现了C#的一个功能。
当时因为配置文件内容更改只能重写读取逻辑,用substring切割时发现弹了个提示,说是“范围运算符“。点击后我震惊了,这?搜了一篇文章,原来是C# 8就有的功能了。又是编译器教我编程的一天。
TapTap
然而还是没有抢救过来。我拜读了一位大佬的框架,这篇文章刷新了我对架构的认识。文章内提到的初学者容易犯的错误我是一个没落下,还好大佬把源代码贴出来了,我去看了看,哇,没看懂。现在我到了一个进退两难的地步,之前我都是“无知者无畏”,反正不知道自己写的有多垃圾,那根据相对论就是“我写的不垃圾”。现在有了参照物,高下立判,我怂了。当前设计的抽象根本没抽好,又不知道怎么改,便发呆了一晚上,直到回想起了编程的真谛。
TapTap
(所以真的有长这样的键盘吗?)
我们一般把这个叫“借鉴”。然而我发现根本塞不进去啊,那套框架的东西太完整了,我手上这个连个壳都没有。勉勉强强塞了几个,不想干了,还是我自己摸索吧,就学一下思想。
先把配置文件搞好。xml不难,结合要做的武器就写了个简单的测试一下。
TapTap
xml标签完全自定义,除了第一行标准格式,其他开心就好。那难点在什么地方呢?xpath!这是xml的查询语法,真的要命了,官方写的文档又过于官方,我这个菜狗看不懂。找了篇比较通俗的文章,也算是把一个脚趾放进门槛了。
TapTap
上方代码加载xml配置文件,找到指定名称的节点,往下获取其Bullet子节点,最后找到AssetBundle节点,输出内容是bullet.assetbundle。且这里也换了一种加载配置文件的方式,之前用Resources是因为就知道这一种,今天用了xml,查了发现这样也可以。Application.dataPath固定返回项目下Assets文件夹的绝对路径,也就是说我们的配置文件不一定要放在Resources下了。
至于xpath语法,/xxx/xxx是绝对路径,就跟文件路径一样的,只不过路径走的是节点。/BulletLaunchers/BulletLauncher选出文件中所有的BulletLauncher子节点,但是我们还加了个限定,要求这个字节点有一个名为Name的子节点且值为Embers_Shining。xmldocument本身还挺好理解的,官方文档再官方都看得明白。
现在的我陷入了一个怪圈,每次都觉得当前的代码不好想重写一个,最后的效果就是多用了1个小时,完成了曾经一样的效果!要是重写的代码很好,以后都不用改了,倒也可以接受,问题是好像也不是很好。今天的我花了一个下午重走了曾经的路, 竟然达到了和曾经一样的进度,好开心,休息;第二天发现什么玩意,又退回去,又写一遍一样功能的代码。这样的效率真的是太高啦!
痛定思痛不能再这样了。要求别那么高算了,能跑就行,能跑就行。拉低标准后写代码就简单多了,浅浅写个武器。然而准备测试时发现了问题:子弹的aseetbundle打包不进去,每次打包都提示“ The name 'AssetDatabase' does not exist in the current context”。明明运行时没问题的,搜了一下,原来是AssetDatabase加载资源的方式只能在编辑器内使用,打包时就会出问题。
回想一下我是为啥要换AssetDatabase。emmm,好像是因为官方说Resources加载资源太慢。于是我就搜到了AssetDatabse,然而搜到的文章没告诉我AssetDatabase出了编辑器就用不了了。继续去搜有没有别的加载方式,没了,就Resources和AssetBundle。AssetBundle这种加载方式根据我的设计(请假装一下我真的设计了)要写配置文件,不想写,那直接上Resources吧,兜兜转转又回到Resources的怀抱。性能有没有爆炸式提升我不知道,我是爆炸了。
TapTap
还好Resources用起来很简单,改几行代码就行了。这篇帖子经过我精密的计算,跨年那天发刚刚好。现在距离跨年还有整整一个多月,不想写了,我先去吃个零食,等会再写。
今天跨年。我看着一个月前的我写的东西,嗯……应该是零食的问题,我家的零食具有神秘的力量,吃一口就穿越到一个月后了,我也没办法。有时候是这样的,也不是第一次了。你们家的零食吃了不会穿越吗?肯定会的对吧?吧?
只用了不到半个小时就写出了切换武器的效果,但是为什么它切换不了发射的子弹啊?啊?啊?我调试了几个小时都没发现问题,Unity你告诉我为啥啊?这不是切换的好好的吗?组件切换没问题,sprite该换的也换了,你还有什么理由不切换你告诉我?
TapTap
下面的sprite我是根据上面的复制出来的,为什么实际情况就不一样了?罢了,我换种写法,多个字段而已。
结果它成了。拿什么来换回我逝去的几个小时?我本来觉得调试调不出来的我像个sb,现在改个写法一下子就出来后感觉我更像个sb了
TapTap
今天先这样吧,本来还想推个生成地图的主线的,看起来时间不够了。武器这个也很潦草,不是完全体,代码放一部分,太烂了不过之后会好的,真的,
TapTap
TapTap
TapTap
TapTap
最后当然是演示部分。
最后测试时发现子弹好像乱飞,根据角色的移动方向乱跑。看,写出了特色,是复刻版独一无二的特色。另外还有一个新人物素材演示。
又发现当子弹和人物同一方向时,相对速度就显得很鬼畜。这是最真实的物理引擎,没有问题的,怎么能叫做问题?
另外提一嘴,各位千万不要在assetbundle打包后把原来打包的素材删了,当时不会有问题,后续打包别的就出问题了,贴图加载不出来。本经验不来自于网络。
今天没法像去年那样卡12点发了,人不行了,熬夜真的难受,身体是一年不如一年。这期就是汪洋大海,就是为了沾跨年祝福这碟醋才包的水饺,祝愿各位身体健康,新的一年心想事成,好好享受这一年一度一觉醒来就是第二年的美好一天(我可太喜欢跨年冷笑话了)。
10
5