小白错误<二>———未达到预设子弹生命时间,子弹自动消失

如需转载,请保留本文链接。

出现问题:子弹正常出现,偶尔几枚子弹会有,没有存活到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()中调用一次.

posted @ 2017-10-07 22:48  一颗菜的成长史  阅读(272)  评论(0编辑  收藏  举报