/// <summary>引数のbehaviourが衝突する属性を持つか調べる</summary>
    private static MapPhysicsAttribute getCollidedAttribute(GameObject aBehaviour, out MapPhysics.CollisionType oCollisionType)
    {
        if (aBehaviour == mCollider.gameObject)  //自分の属性とは衝突しない
        {
            oCollisionType = MapPhysics.CollisionType.pass;
            return(null);
        }

        MapPhysicsAttribute tCollidedAttribute = null;

        oCollisionType = MapPhysics.CollisionType.pass;
        foreach (MapPhysicsAttribute tAttribute in aBehaviour.GetComponents <MapPhysicsAttribute>())
        {
            MapPhysics.CollisionType tCollisionType = MapPhysics.canCollide(mAttribute, tAttribute);
            string t = aBehaviour.transform.parent.name;
            if (tCollisionType == MapPhysics.CollisionType.collide)
            {
                tCollidedAttribute = tAttribute;
                oCollisionType     = MapPhysics.CollisionType.collide;
                break;
            }
            if (tCollisionType == MapPhysics.CollisionType.stop)
            {
                tCollidedAttribute = tAttribute;
                oCollisionType     = MapPhysics.CollisionType.stop;
            }
        }
        return(tCollidedAttribute);
    }
    /// <summary>
    /// 第一引数の属性が第二引数の属性と衝突するか
    /// </summary>
    /// <returns>衝突結果</returns>
    /// <param name="aAttribute1">属性1</param>
    /// <param name="aAttribute2">属性2</param>
    public static CollisionType canCollide(MapPhysicsAttribute aAttribute1, MapPhysicsAttribute aAttribute2)
    {
        if (aAttribute1 is EntityPhysicsAttribute)
        {
            return(canCollide((EntityPhysicsAttribute)aAttribute1, aAttribute2));
        }

        return(CollisionType.pass);
    }
 public static CollisionType canCollide(EntityPhysicsAttribute aAttribute1, MapPhysicsAttribute aAttribute2)
 {
     //相手の属性で分岐
     if (aAttribute2 is TileGroundPhysicsAttribute)
     {
         return(aAttribute1.canEnter((TileGroundPhysicsAttribute)aAttribute2) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is SlopeTilePhysicsAttribute)
     {
         return(((SlopeTilePhysicsAttribute)aAttribute2).canBeEntered(aAttribute1.mBehaviour.mMapPosition) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is EntityPhysicsAttribute)
     {
         return(aAttribute1.canEnter((EntityPhysicsAttribute)aAttribute2) ? CollisionType.pass : CollisionType.collide);
     }
     if (aAttribute2 is TriggerPhysicsAttribute)
     {
         return(((TriggerPhysicsAttribute)aAttribute2).canBeEntered(aAttribute1));
     }
     throw new System.Exception("MapPhysics : entityと未定義の属性との衝突判定「" + aAttribute2.GetType().ToString() + "」");
 }