void OnTriggerEnter(Collider collider)
    {
        if (collider.gameObject.tag == "Enemy")
        {
            /*物体の検知時、物体の範囲測定、各disListの作成*/
            float[,] enemyArea = EnemyArea(collider.gameObject.transform.position.x, collider.gameObject.transform.position.y, 2f, 0.3f);
            float[] JUMPdisList = new float[JUMP.Count];
            int     i           = 0;
            foreach (ActPosition3 a in JUMP)
            {
                JUMPdisList[i] = a.AreaChecker(enemyArea);
                i++;
            }

            float[] SLIDEdisList = new float[SLIDE.Count];
            i = 0;
            foreach (ActPosition3 a in SLIDE)
            {
                SLIDEdisList[i] = a.AreaChecker(enemyArea);
                i++;
            }
            /*物体のスピードを参照し、disList、物体が来るまでのフレーム、検知した時のフレームをobjectListへ*/
            Demo2enemy enemy      = collider.gameObject.GetComponent <Demo2enemy>();
            int        enemyFrame = (int)((collider.gameObject.transform.position.z - 0.15f - this.gameObject.transform.position.z) / enemy.speed);

            ComeObject3 obj = new ComeObject3(JUMPdisList, SLIDEdisList, enemyFrame, frameCount);
            objectList.Add(obj);
            /*TimeLineを参照しSchedule3があるかないかによりわける*/
            if (TimeLine.Count == 0)
            {
                Scheduling(objectList[objectList.Count - 1]);
            }
            else
            {
                ReScheduling(objectList[objectList.Count - 1], collider);
            }
        }
    }
    /*Schedule3があるとき、すでに入っているSchedule3と比較して処理*/
    void ReScheduling(ComeObject3 obj, Collider collider)
    {
        Schedule3 start = obj.ActTiming(JUMP, SLIDE, frameCount);

        if (start.GetStart() > TimeLine[TimeLine.Count - 1].GetEnd())
        {
            /*すでに入っているSchedule3と干渉しないとき、そのままSchedule3を送る*/
            TimeLine.Add(start);
        }
        else
        {
            /*すでに入っているSchedule3と干渉するとき*/
            Debug.Log("matchng");
            int timingDis = obj.GetFrame() - objectList[objectList.Count - 2].GetFrame();
            /*一気に跳べるかの判断、とべると判断したときはdisListをチェックしながらタイミング検索、ここで出なかったら次へ*/
            if (obj.JUMPTime() >= timingDis && objectList[objectList.Count - 2].JUMPTime() >= timingDis)
            {
                Debug.Log("ALLJUMP");
                int AllJUMPframe = 0;
                for (int i = 0; i < JUMP.Count - timingDis / 2; i++)
                {
                    if (objectList[objectList.Count - 2].GetDis("JUMP", i) > 0 && obj.GetDis("JUMP", i + timingDis / 2) > 0)
                    {
                        AllJUMPframe = i * 2;
                        break;
                    }
                }
                if (AllJUMPframe != 0)
                {
                    TimeLine[TimeLine.Count - 1].ReSet("JUMP", objectList[objectList.Count - 2].GetFrame() - AllJUMPframe);
                    return;
                }
            }
            /*一気にスライディングできるかの判断、できると判断したときはdisListをチェックしながらタイミング検索、ここで出なかったら次へ*/
            if (obj.SLIDETime() >= timingDis && objectList[objectList.Count - 2].SLIDETime() >= timingDis)
            {
                Debug.Log("AllSlide");
                int AllSLIDEframe = 0;
                for (int i = 0; i < SLIDE.Count - timingDis / 2; i++)
                {
                    if (objectList[objectList.Count - 2].GetDis("SLIDE", i) > 0 && obj.GetDis("SLIDE", i + timingDis / 2) > 0)
                    {
                        AllSLIDEframe = i * 2;
                        break;
                    }
                }
                if (AllSLIDEframe != 0)
                {
                    TimeLine[TimeLine.Count - 1].ReSet("SLIDE", objectList[objectList.Count - 2].GetFrame() - AllSLIDEframe);
                    return;
                }
            }
            /*タイミング調整、二個目のオブジェクトの到着フレームと回避開始フレーム、一個目のオブジェクトの到着フレームと回避終了フレームの比較*/
            int t = -1;
            for (int i = 0; i < TimeLine[TimeLine.Count - 1].GetStart() - frameCount; i++)
            {
                if (obj.GetFrame() > TimeLine[TimeLine.Count - 1].GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= TimeLine[TimeLine.Count - 1].GetStart() + objectList[objectList.Count - 2].GetDisEnd(TimeLine[TimeLine.Count - 1].GetAction()) - i)
                {
                    Debug.Log("成功");
                    t = i;
                    break;
                }
            }
            if (t >= 0)
            {
                Debug.Log("TimingTune:" + t);
                TimeLine[TimeLine.Count - 1].ReSetTiming(TimeLine[TimeLine.Count - 1].GetStart() - t);
                start.ReSetTiming(TimeLine[TimeLine.Count - 1].GetEnd() - t);
                TimeLine.Add(start);
                return;
            }

            /*前に行う動作を変更してタイミング調整を行う*/
            if (TimeLine[TimeLine.Count - 1].GetAction() == "JUMP" && objectList[objectList.Count - 2].SLIDETime() > 0)
            {
                Debug.Log("BeforeReTune");
                Schedule3 reTime = new Schedule3(start.GetStart() - 40, 40, "SLIDE");
                for (int i = 0; i < reTime.GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > reTime.GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= reTime.GetStart() + objectList[objectList.Count - 2].GetDisEnd(reTime.GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingBeforeReTune:" + t);
                    reTime.ReSetTiming(reTime.GetStart() - t);
                    start.ReSetTiming(reTime.GetEnd() - t);
                    TimeLine.RemoveAt(TimeLine.Count - 1);
                    TimeLine.Add(reTime);
                    TimeLine.Add(start);
                    return;
                }
            }
            else if (start.GetAction() == "SLIDE" && obj.JUMPTime() > 0)
            {
                Debug.Log("BeforeReTune");
                Schedule3 reTime = new Schedule3(start.GetStart() - 56, 56, "JUMP");
                for (int i = 0; i < reTime.GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > reTime.GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= reTime.GetStart() + objectList[objectList.Count - 2].GetDisEnd(reTime.GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingBeforeReTune:" + t);
                    reTime.ReSetTiming(reTime.GetStart() - t);
                    start.ReSetTiming(reTime.GetEnd() - t);
                    TimeLine.RemoveAt(TimeLine.Count - 1);
                    TimeLine.Add(reTime);
                    TimeLine.Add(start);
                    return;
                }
            }

            /*後に行う動作を変更してタイミング調整を行う*/
            if (start.GetAction() == "JUMP" && obj.SLIDETime() > 0)
            {
                Debug.Log("AfterReTune:");
                start.ReSet("SLIDE", TimeLine[TimeLine.Count - 1].GetEnd());
                for (int i = 0; i < TimeLine[TimeLine.Count - 1].GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > TimeLine[TimeLine.Count - 1].GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= TimeLine[TimeLine.Count - 1].GetStart() + objectList[objectList.Count - 2].GetDisEnd(TimeLine[TimeLine.Count - 1].GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingAfterReTune:" + t);
                    TimeLine[TimeLine.Count - 1].ReSetTiming(TimeLine[TimeLine.Count - 1].GetStart() - t);
                    start.ReSetTiming(TimeLine[TimeLine.Count - 1].GetEnd() - t);
                    TimeLine.Add(start);
                    return;
                }
            }
            else if (start.GetAction() == "SLIDE" && obj.JUMPTime() > 0)
            {
                Debug.Log("AfterReTune:");
                start.ReSet("JUMP", TimeLine[TimeLine.Count - 1].GetEnd());
                for (int i = 0; i < TimeLine[TimeLine.Count - 1].GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > TimeLine[TimeLine.Count - 1].GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= TimeLine[TimeLine.Count - 1].GetStart() + objectList[objectList.Count - 2].GetDisEnd(TimeLine[TimeLine.Count - 1].GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingAfterReTune:" + t);
                    TimeLine[TimeLine.Count - 1].ReSetTiming(TimeLine[TimeLine.Count - 1].GetStart() - t);
                    start.ReSetTiming(TimeLine[TimeLine.Count - 1].GetEnd() - t);
                    TimeLine.Add(start);
                    return;
                }
            }
            /*前と後に行う動作を変更してタイミング調整を行う*/
            if (TimeLine[TimeLine.Count - 1].GetAction() == "JUMP" && objectList[objectList.Count - 2].SLIDETime() > 0)
            {
                Debug.Log("BeforeAfterReTune");
                Schedule3 reTime = new Schedule3(start.GetStart() - 40, 40, "SLIDE");
                for (int i = 0; i < reTime.GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > reTime.GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= reTime.GetStart() + objectList[objectList.Count - 2].GetDisEnd(reTime.GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingBeforeAfterReTune:" + t);
                    reTime.ReSetTiming(reTime.GetStart() - t);
                    start.ReSetTiming(reTime.GetEnd() - t);
                    TimeLine.RemoveAt(TimeLine.Count - 1);
                    TimeLine.Add(reTime);
                    TimeLine.Add(start);
                    return;
                }
            }
            else if (start.GetAction() == "SLIDE" && obj.JUMPTime() > 0)
            {
                Debug.Log("BeforeAfterReTune");
                Schedule3 reTime = new Schedule3(start.GetStart() - 56, 56, "JUMP");
                for (int i = 0; i < reTime.GetStart() - frameCount; i++)
                {
                    if (obj.GetFrame() > reTime.GetEnd() + obj.GetDisStart(start.GetAction()) - i && objectList[objectList.Count - 2].GetFrame() <= reTime.GetStart() + objectList[objectList.Count - 2].GetDisEnd(reTime.GetAction()) - i)
                    {
                        Debug.Log("成功");
                        t = i;
                        break;
                    }
                }
                if (t >= 0)
                {
                    Debug.Log("TimingBeforeAfterReTune:" + t);
                    reTime.ReSetTiming(reTime.GetStart() - t);
                    start.ReSetTiming(reTime.GetEnd() - t);
                    TimeLine.RemoveAt(TimeLine.Count - 1);
                    TimeLine.Add(reTime);
                    TimeLine.Add(start);
                    return;
                }
            }
            Debug.Log("無理" + obj.GetFrame());
            collider.gameObject.GetComponent <Renderer>().material = hantoumei;
        }
    }
    /*Schedule3がないとき、そのままSchedule3をTimeLineへ送る*/
    void Scheduling(ComeObject3 obj)
    {
        Schedule3 start = obj.ActTiming(JUMP, SLIDE, frameCount);

        TimeLine.Add(start);
    }