首页 > 其他 > 详细

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

时间:2017-10-07 23:15:05      阅读:249      评论:0      收藏:0      [点我收藏+]

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

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

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

原文:http://www.cnblogs.com/yikecaidechengzhangshi/p/7636116.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!