protected void OnDestroy() { // 已知在Editor下结束游戏时m_TrailRenderer可能为null if (m_TrailRenderer != null) { m_TrailRenderer.OnTrailMeshWillRender -= OnTrailMeshWillRender; Destroy(m_TrailRenderer.gameObject); m_TrailRenderer = null; } }
protected void Awake() { // TEST 为了看效果临时写的 RendererCamera.depthTextureMode = DepthTextureMode.Depth; m_TrailRenderer = new GameObject("(TrailRenderer)" + name).AddComponent <hwmTrailMeshRenderer>(); m_TrailRenderer.OnTrailMeshWillRender += OnTrailMeshWillRender; #region Create Buffers // TODO 这里应该可以优化,减少Buffer数量 // 魔法数字4: 一个Section是一个长方形Mesh,一个长方形4个顶点 m_PositionBuffer = new Vector3[MaxSectionCount * 4]; m_ColorBuffer = new Color32[MaxSectionCount * 4]; m_UVBuffer = new Vector2[MaxSectionCount * 4]; m_IndexBuffer = new int[(MaxSectionCount - 1) * 6]; for (int iIndex = 0; iIndex < MaxSectionCount - 1; iIndex++) { m_IndexBuffer[iIndex * 6] = iIndex * 4; m_IndexBuffer[iIndex * 6 + 1] = iIndex * 4 + 1; m_IndexBuffer[iIndex * 6 + 2] = iIndex * 4 + 2; m_IndexBuffer[iIndex * 6 + 3] = iIndex * 4 + 2; m_IndexBuffer[iIndex * 6 + 4] = iIndex * 4 + 1; m_IndexBuffer[iIndex * 6 + 5] = iIndex * 4 + 3; } #endregion // Mesh要放在Create Buffer后面 m_Mesh0 = CreateDefaultMesh(); m_Mesh1 = CreateDefaultMesh(); m_DummyMesh = new Mesh(); m_TrailRenderer._MeshFilter.mesh = m_DummyMesh; m_TrailRenderer._MeshRenderer.sharedMaterial = TrailMateiral; if (AutoEmittingWhenAwake) { StartTrail(); } }