码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-07 23:39:16      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:alt   pre   obj   自动   adb   private   tac   life   atime   

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

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

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

标签:alt   pre   obj   自动   adb   private   tac   life   atime   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!