小白错误—未达到预设子弹生命时间,子弹自动消失
Posted 一颗菜的成长史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白错误—未达到预设子弹生命时间,子弹自动消失相关的知识,希望对你有一定的参考价值。
如需转载,请保留本文链接。
出现问题:子弹正常出现,偶尔几枚子弹会有,没有存活到5秒钟,也没有碰到物体,就自动消失的问题.
解决关键函数:
错误代码如下:
public class BulletBase : MonoBehaviour { public float Speed; float lifeTime; private void Awake() { lifeTime = 0; } private void Start() { } private void Update() { Run(); disable(); } //子弹运动方式 public virtual void Run() { } //子弹生存5秒后死亡 private void disable() { lifeTime += Time.deltaTime; if (lifeTime >= 3) { gameObject.SetActive(false); Pool.DeadBulletList.Add(gameObject);//将子弹加入死亡池,预备集中处理 lifeTime = 0; } } }
正确代码如下:
public class BulletBase : MonoBehaviour { public float Speed; float lifeTime; private void Awake() { lifeTime = 0; } private void OnEnable() { lifeTime = 0; } private void Start() { } private void Update() { Run(); disable(); } //子弹运动方式 public virtual void Run() { } //子弹生存5秒后死亡 private void disable() { lifeTime += Time.deltaTime; if (lifeTime >= 3) { gameObject.SetActive(false); Pool.DeadBulletList.Add(gameObject);//将子弹加入死亡池,预备集中处理 lifeTime = 0; } } }
问题所在:
当gameobject setactive(true)时,会调用OnEnable()方法,不会调用Awake()方法.
Awake()初始化lifeTime=0后,不再进行调用,再次使用gameobject时会调用OnEnable()方法,所以lifeTime=0也需要在OnEnable()中调用一次.
以上是关于小白错误—未达到预设子弹生命时间,子弹自动消失的主要内容,如果未能解决你的问题,请参考以下文章