public void Play() { if (m_isPlaying) { Debuger.Log("还没结束就重新播放了"); Stop();//先结束老的 } Renderer r = GetRender(); if (r == null) { return; } MaterialMgr mm = r.AddComponentIfNoExist <MaterialMgr>(); m_handle = mm.Add(this); if (m_handle == null) { return; } m_beginTime = Time.time; m_isPlaying = true; m_needDestroy = false; m_destroyTime = -1; foreach (MaterialAni a in m_anis) { a.OnBegin(m_handle.mat); } }
public void Stop() { if (this == null) { return; //可能已经被销毁 } if (!m_isPlaying) //防止死锁 { return; } //1 必须先把这个值设置正确,不然可能造成死锁 m_isPlaying = false; m_destroyTime = -1; //Remove和stop可能会互相调用,内部已经防止死锁,这里不用判断 m_handle.mgr.Remove(m_handle); m_handle = null; foreach (MaterialAni a in m_anis) { a.OnStop(); } }