求助,有关对象池的问题
unity3d吧
全部回复
仅看楼主
level 9
最近自己学了下unity自带的对象池,自己做了个刷怪的池子,有些问题实在解决不掉
我做的怪很简单,就行走,攻击,死亡。死亡后就会呆在死亡状态,然后透明度逐渐降低然后消失。但是第二波以及以后,从对象池中取出 就会一直重复,透明度降低然后消失的状态。所以我就写了下重置敌人所有状态的方法在actionOnGet中调用,方法如下
但是出现了下面的报错
这里出现了空应用,但是是哪啊,是active设为true再重置的
然后它 这里指向的是设置颜色的,我就把上面的 重置颜色的部分注释掉了,结果还是不行,出现了下面的错误,
也同样是个空应用,是找不到Walk这个状态。
两个错误的表现就是疯狂地刷怪,都指向下面这个pool.Get();
只好请教下吧友们了
2024年01月29日 15点01分 1
level 9
上面是FSM的下面是重置敌人状态的方法
2024年01月30日 02点01分 3
level 1
代码发全看一下吧,这样看不出来
2024年01月30日 03点01分 4
楼下发了
2024年01月30日 08点01分
@二十一号七 你这个pool.get是干嘛用的
2024年01月30日 11点01分
@贴吧用户_GGW31RP 从对象池中获取一个对象
2024年01月30日 11点01分
2024年01月30日 08点01分
level 9
下面是对象池的脚本
2024年01月30日 08点01分 5
level 1
找到问题了,没有经验的话光看是很难看出来的,因为你写的代码真的是没毛病的,只要把start函数的代码移到awake函数里面就可以了。之前一直以为错误出在从对象池中取出被取消active的对象的时候。后面我自己试了一下,原来错误出现在对象第一次被创建出来的时候。而且错误只出现在操作对象身上的引用类型的时候,因为这时候start函数还没有被调用,引用类型还没有分配内存所以会出现空引用错误。而对值类型的操作就不会出现错误,比如在actiononget里面的对transform.position的赋值这一行就没问题。这是脚本生命周期的问题
2024年01月31日 01点01分 6
懂了谢谢老哥[真棒],我都打算不用对象池重写一个脚本了
2024年01月31日 02点01分
1