コード例 #1
0
ファイル: Uni2DSkinning.cs プロジェクト: Hengle/GGJ2016
 // Awake
 private void Awake()
 {
     if (m_bAwakeHasBeenCalled == false)
     {
         m_rSprite = GetComponent <Uni2DSprite>();
         m_oRefManipulatedRenderMesh.Initialize(this, true);
         InitializeManipulatedColliderMeshReferences();
         m_bAwakeHasBeenCalled = true;
     }
 }
コード例 #2
0
ファイル: Uni2DSkinning.cs プロジェクト: Hengle/GGJ2016
    // Update Physics Skinning
    public void UpdatePhysicsSkinning()
    {
        if (m_oMeshColliders != null)
        {
            if (m_oBones != null)
            {
                int iColliderCount = MeshColliders.Count;
                if (iColliderCount > 0)
                {
                    // Create Collider meshes arrays if needed
                    if (m_oPoseColliderMeshes == null || m_oPoseColliderMeshes.Length != iColliderCount)
                    {
                        m_oPoseColliderMeshes = new Mesh[iColliderCount];
                    }
                    if (m_oRefManipulatedColliderMeshes == null || m_oRefManipulatedColliderMeshes.Length != iColliderCount)
                    {
                        // Destroy old references
                        DestroyManipulatedColliderMeshReferences();

                        // Recreate
                        m_oRefManipulatedColliderMeshes = new ReferenceContainer[iColliderCount];
                        for (int i = 0; i < iColliderCount; ++i)
                        {
                            ReferenceContainer rReferenceContainer = new ReferenceContainer();
                            rReferenceContainer.Initialize(this, true);
                            m_oRefManipulatedColliderMeshes[i] = rReferenceContainer;
                        }
                    }

                    // Apply the skin blend on each collider
                    int         iColliderIndex  = 0;
                    List <Mesh> rColliderMeshes = m_rSprite.SpriteData.meshCollidersList;
                    foreach (MeshCollider rMeshCollider in m_oMeshColliders)
                    {
                        if (rMeshCollider != null)
                        {
                            // Get The pose and manipulated mesh
                            Mesh rPoseMesh = m_oPoseColliderMeshes[iColliderIndex];
                            ReferenceContainer rRefManipulatedMesh = m_oRefManipulatedColliderMeshes[iColliderIndex];

                            if (ApplySkinBlend(rColliderMeshes[iColliderIndex], rMeshCollider.sharedMesh, ref rPoseMesh, ref rRefManipulatedMesh))
                            {
                                // Update collider mesh
                                rMeshCollider.sharedMesh = null;
                                rMeshCollider.sharedMesh = rRefManipulatedMesh.Reference as Mesh;

                                m_oPoseColliderMeshes[iColliderIndex] = rPoseMesh;
                            }
                        }

                        ++iColliderIndex;
                    }
                }
            }
        }

                #if AFTER_UNITY_4_3
        if (PolygonCollider2D != null)
        {
            PolygonCollider2D.points = Uni2DSkinningUtils.ApplySkinBlend(m_rSprite.SpriteData.mesh2D, m_oBones, transform, quality);
        }
                #endif
    }
コード例 #3
0
ファイル: Uni2DSkinning.cs プロジェクト: grifdail/GGJ2016
	// Update Physics Skinning
	public void UpdatePhysicsSkinning()
	{
		if(m_oMeshColliders != null)
		{
			if(m_oBones != null)
			{
				int iColliderCount = MeshColliders.Count;
				if(iColliderCount > 0)
				{
					// Create Collider meshes arrays if needed
					if(m_oPoseColliderMeshes == null || m_oPoseColliderMeshes.Length != iColliderCount)
					{
						m_oPoseColliderMeshes = new Mesh[iColliderCount];
					}
					if(m_oRefManipulatedColliderMeshes == null || m_oRefManipulatedColliderMeshes.Length != iColliderCount)
					{
						// Destroy old references
						DestroyManipulatedColliderMeshReferences();
						
						// Recreate
						m_oRefManipulatedColliderMeshes = new ReferenceContainer[iColliderCount];
						for(int i = 0; i<iColliderCount; ++i)
						{
							ReferenceContainer rReferenceContainer = new ReferenceContainer();
							rReferenceContainer.Initialize(this, true);
							m_oRefManipulatedColliderMeshes[i] = rReferenceContainer;
						}
					}
					
					// Apply the skin blend on each collider
					int iColliderIndex = 0;
					List<Mesh> rColliderMeshes = m_rSprite.SpriteData.meshCollidersList;
					foreach(MeshCollider rMeshCollider in m_oMeshColliders)
					{
						if(rMeshCollider != null)
						{
							// Get The pose and manipulated mesh
							Mesh rPoseMesh = m_oPoseColliderMeshes[iColliderIndex];
							ReferenceContainer rRefManipulatedMesh = m_oRefManipulatedColliderMeshes[iColliderIndex];
							
							if(ApplySkinBlend(rColliderMeshes[iColliderIndex], rMeshCollider.sharedMesh, ref rPoseMesh, ref rRefManipulatedMesh))
							{
								// Update collider mesh
								rMeshCollider.sharedMesh = null;
								rMeshCollider.sharedMesh = rRefManipulatedMesh.Reference as Mesh;
								
								m_oPoseColliderMeshes[iColliderIndex] = rPoseMesh;
							}
						}
						
						++iColliderIndex;
					}
				}
			}
		}
		
		#if AFTER_UNITY_4_3
		if(PolygonCollider2D != null)
		{
			PolygonCollider2D.points = Uni2DSkinningUtils.ApplySkinBlend(m_rSprite.SpriteData.mesh2D, m_oBones, transform, quality);
		}
		#endif
	}