//-------------------------------------------------------------------------
    public void ReloadOrRecalculateSingleCollider(AlphaMeshCollider target)
    {
        if (!target.CanReloadCollider)
        {
            return;
        }

        string        colliderMeshPath = target.FirstFrameFullColliderMeshPath();
        ColliderGroup colliderGroup    = FindColliderGroup(colliderMeshPath);

        if (colliderGroup == null || !IsColliderGroupValid(colliderGroup))
        {
            if (!target.CanRecalculateCollider)
            {
                return;
            }

            target.RecalculateCollider();
            UpdateSimilarCollidersAndGroupToTarget(target);
        }
        else
        {
            AssignValuesFromColliderGroup(target, colliderGroup);
        }
    }
    //-------------------------------------------------------------------------
    protected void UpdateSimilarCollidersAndGroupToTarget(AlphaMeshCollider target)
    {
        string colliderMeshPath = target.FirstFrameFullColliderMeshPath();

#if UNITY_4_AND_LATER
        object[] alphaMeshColliders = GameObject.FindObjectsOfType(typeof(AlphaMeshCollider));
#else
        object[] alphaMeshColliders = GameObject.FindSceneObjectsOfType(typeof(AlphaMeshCollider));
#endif

        ColliderGroup colliderGroup = FindColliderGroup(colliderMeshPath);
        if (colliderGroup == null)
        {
            // add new group.
            colliderGroup = new ColliderGroup();
            colliderGroup.mFullColliderMeshPath = colliderMeshPath;
            mColliderGroups.Add(colliderGroup);
        }

        AssignValuesFromInstanceToGroup(target, colliderGroup);

        colliderGroup.mAlphaMeshColliderObjects = new List <WeakReference>();
        foreach (AlphaMeshCollider collider in alphaMeshColliders)
        {
            if (collider.FirstFrameFullColliderMeshPath().Equals(colliderMeshPath))
            {
                colliderGroup.mAlphaMeshColliderObjects.Add(new WeakReference(collider));

                if (collider == target)
                {
                    continue;
                }
                else
                {
                    // reassign previously calculated values.
                    AssignValuesFromColliderGroup(collider, colliderGroup);
                }
            }
        }
    }
	//-------------------------------------------------------------------------
	protected void UpdateSimilarCollidersAndGroupToTarget(AlphaMeshCollider target) {
		
		string colliderMeshPath = target.FirstFrameFullColliderMeshPath();
#if UNITY_4_AND_LATER
		object[] alphaMeshColliders = GameObject.FindObjectsOfType(typeof(AlphaMeshCollider));
#else
		object[] alphaMeshColliders = GameObject.FindSceneObjectsOfType(typeof(AlphaMeshCollider));
#endif

		ColliderGroup colliderGroup = FindColliderGroup(colliderMeshPath);
		if (colliderGroup == null) {
			// add new group.
			colliderGroup = new ColliderGroup();
			colliderGroup.mFullColliderMeshPath = colliderMeshPath;
			mColliderGroups.Add(colliderGroup);
		}
		
		AssignValuesFromInstanceToGroup(target, colliderGroup);
		
		colliderGroup.mAlphaMeshColliderObjects = new List<WeakReference>();
		foreach (AlphaMeshCollider collider in alphaMeshColliders)
		{
			if (collider.FirstFrameFullColliderMeshPath().Equals(colliderMeshPath)) {
				
				colliderGroup.mAlphaMeshColliderObjects.Add(new WeakReference(collider));

				if (collider == target) {
					continue;
				}
				else {
					// reassign previously calculated values.
					AssignValuesFromColliderGroup(collider, colliderGroup);
				}
			}
		}
	}
	//-------------------------------------------------------------------------
	public void ReloadOrRecalculateSingleCollider(AlphaMeshCollider target) {
		if (!target.CanReloadCollider)
			return;
		
		string colliderMeshPath = target.FirstFrameFullColliderMeshPath();
		ColliderGroup colliderGroup = FindColliderGroup(colliderMeshPath);
		if (colliderGroup == null || !IsColliderGroupValid(colliderGroup)) {
			if (!target.CanRecalculateCollider)
				return;
			
			target.RecalculateCollider();
			UpdateSimilarCollidersAndGroupToTarget(target);
		}
		else {
			AssignValuesFromColliderGroup(target, colliderGroup);
		}
	}