求助,真的求助
unity3d吧
全部回复
仅看楼主
level 9
我用状态机做个一个敌人,并把它放在了预制体中
当场景中存在一个敌人时玩家攻击敌人,敌人死亡一切都很正常
但是出现两个敌人时,就发生问题了,我攻击第一个敌人第二个敌人受伤死亡,第一个敌人的所有反馈都反应在了第二个敌人上的。攻击第二个敌人,第二个敌人倒是正常的。
我想了很久
可能是和我所有的敌人都添加的一个FSM有关系,出现两个以上的敌人时,fsm就会更新但是我引用fsm的数值,都是直接通过单例EnemyFSM.instance.paramenter.(像这样引用的)。
我就尝试着改了一下(如下)这个扣血顺序不对的问题就解决了
但是这种问题存在挺多的,而且有的地方不太好修改,像下面这张图,这个我也尝试着改过,但是没成功
这里就是玩家的被击退方向,通过计算enemyFSM脚本中的target.position和attckPoint.position的坐标矢量差确定方向,但是这个fsm所指向的都是同一个脚本(特指挂载在敌人1上的脚本),玩家的击退方向也就是敌人1的反方向。上的扣血问题也大概是这个问题
如果要修改的话这里到底该如何修改好啊
还有一个,玩家的攻击检测同时检测到两个以上的敌人时,就会卡在下图的“将动画速度设为0“的代码上,虽然不知道是什么原因,但应该也和上面的有关
我也有问过GPT,好像是 说因为引用的是,enemyFSM.paramenter中的变量,而这个变量是全局变量,所以才会引发一系列的问题。
吧u
们我该怎么改啊,现在真的一头雾水了,先玩会歇歇了,头痛
2024年01月20日 12点01分 1
level 3
你这个看起来代码基础不是很好啊,要不去b站看看视频先按照视频做着看看吧
2024年01月20日 15点01分 2
好吧
2024年01月20日 15点01分
@二十一号七 【【Unity教程】从0编程制作黑魂: 黑暗之魂DarkSouls复刻经典教程 ARPG DARK SOULS in Unity3d-哔哩哔哩】 https://b23.tv/fRjsEZH
2024年01月20日 15点01分
@二十一号七 b站挺多教程挺好用的
2024年01月20日 15点01分
@happy水笔3 不过我还是挺想知道这里我哪错了,可以指点一下吗
2024年01月20日 15点01分
level 11
其实我觉得楼主代码是自己写的话能把数据和Fsm逻辑分离开来说明水平还是挺不错的。但是不太明白怎么会使用单例去访问敌人数值
2024年01月21日 00点01分 3
那能请教下怎么正确的访问吗
2024年01月21日 02点01分
@二十一号七 准备写结构先得有个建模思想,敌人实例有若干个对吧,这种情况用一份数据肯定不合适的,至少得让每个敌人都单独持有一份数据
2024年01月21日 03点01分
@二十一号七 先把instance的引用全部去掉
2024年01月21日 03点01分
@NEKO电台 嗯好
2024年01月21日 03点01分
level 1
老哥你的fsm代码怎么写的贴出来看下。有一个问题,既然你的fsm脚本挂在敌人身上,可以在碰撞时获取到fsm的引用,那么为什么还要用instance来引用fsm呢,出bug的问题可能和这个有关吧
2024年01月21日 03点01分 4
那个我的碰撞检测是单独的一个脚本 不用那样引用的话,就会出现第一个攻击第一个敌人,第二个敌人扣血这样的问题,反而改成了图一那样才解决了
2024年01月21日 04点01分
@贴吧用户_GGW31RP 代码我贴楼下了,
2024年01月21日 05点01分
level 9
楼主是边学边做的,代码写得有点烂,各位指导一下吧
2024年01月21日 05点01分 5
攻击检测是附在另一个子物体上的,fsm上有game objects.find的代码是后来加的,加上这个才解决了血量不对应的问题
2024年01月21日 05点01分
我也很奇怪每个都是独立的物体,都挂载有fsm,为什么会出现血量不对应的问题
2024年01月21日 05点01分
level 1
是这样的,你的instance是声明为static,这是共享的字段。当有两个敌人时,生成两个fsm类,这两个类在start函数中会依次执行instance=this,所以第二个类会把这个instance设置成自己。当你攻击第一个敌人时,第一个类调用instance这个共享的字段,此时他的值是第二个fsm类的引用,所以会出现第二个敌人扣血的情况。你第一张图的修改没用通过instance来引用fsm类而是直接用getcomponent来获取引用,所以避免了这种情况的发生。
2024年01月21日 05点01分 6
所以那个instance的值是唯一确定且后面不再变化的,也就是最后一次执行start的那个fsm的引用,不管你在哪个敌人的脚本上用了这个instance,他都会指向最后一个敌人身上
2024年01月21日 05点01分
哦哦明白了,感谢
2024年01月21日 05点01分
@贴吧用户_GGW31RP 成功解决了,学到了很多,谢谢老哥[真棒]
2024年01月21日 08点01分
level 2
状态机和它关联的对象肯定不能是单例
2024年01月22日 00点01分 7
1