Пример #1
0
 public void OnTriggerEnter(Collider other)
 {
     if ("MeDisplay(Clone)" == other.collider.gameObject.name)
     {
         State.KEEP_IDLE = true;
         if (true == State.ON_JUMP)  //在跳的过程中
         {
             Vector3 v = (ToolsFunction.EqualFloat(other.transform.eulerAngles.y, 90) == true ? new Vector3(73, 2.3f, 57) : new Vector3(25, 2.3f, 11));
             MeController.MoveTo(other.gameObject, v, 2f);
             other.gameObject.GetComponent <Animation>().Play(State.ANIM_HANDS_UP);
             ToolsFunction.AddScore(DataConst.SCORE_LINE);//加分
         }
         else
         {
             other.transform.position -= 0.1f * ToolsFunction.Toward(other.gameObject); //现在人就是往后退了,然后应该会重新检测吧!!!!
             ToolsFunction.AddScore(-DataConst.SCORE_LINE / 2);                         //减分
         }
     }
 }
Пример #2
0
    //这个函数以后不用了!!!!!!!!!!!!!!!!!
    //public void TrapDetection()
    //{
    //    //以下检测是否在规定区域起跳了
    //    //int n = (int)MeDisplay.transform.eulerAngles.y;
    //    Vector3 v1 = new Vector3(0, 1, 6f);
    //    Vector3 v2 = new Vector3(0, 1, 4f);
    //    Vector3 trapS1 = MeDisplay.transform.position + v1;// new Vector3(0, 1, 6f);
    //    Vector3 trapS2 = MeDisplay.transform.position + v2;//new Vector3(0, 1, 4f);
    //    Vector3 trapE = new Vector3(0, 20, 0);     //向下画的射线的长度
    //    if ((Physics.Linecast(trapS1, trapS1 - trapE, out hitStart, 1)) && (Physics.Linecast(trapS2, trapS2 - trapE, out hitEnd, 1)))
    //    {
    //        Debug.DrawLine(trapS1, trapS1 - trapE, Color.green);
    //        Debug.DrawLine(trapS2, trapS2 - trapE, Color.white);
    //    }
    //    //如果在jump的检测区域:条件,hitEnd在地面,hitStart不等于当前走的路且不等于地面
    //    if(hitStart.collider && hitEnd.collider)
    //    if (false == isLock && hitStart.collider.gameObject && MeDisplay.transform.eulerAngles.y == 0)  //人物的旋转角度为0
    //        JumpKeepIdle(hitStart.collider.gameObject.name, hitEnd.collider.gameObject.name, hitStart.collider.gameObject);
    //}

    //这个函数已经无用。。

    /*
     * 用于判断role没有在该跳的区域起跳,就保持静止
     * */
    //private int JumpKeepIdle(string targetS, string targetE, GameObject go)
    //{
    //    Vector3 roleMid = MeDisplay.transform.position + new Vector3(0f, 1, 0.8f);
    //    Vector3 roleEnd = MeDisplay.transform.position + new Vector3(0f, -20, 0.8f);  //足够长的线,如果快到路面也能检测出来
    //    Physics.Linecast(roleMid, roleEnd, out hit, 1);   //这个是必然会执行的,用于检测当前角色碰到了什么东西
    //    if(hit.collider)
    //    if(((road.name == hit.collider.gameObject.name)&&(NextRoad(road.name)==targetE))||((hit.collider.gameObject.name==targetE)&&(road.name == targetE)))
    //    {
    //        //ShowInfo("不做任何事");
    //    }
    //    //else if(((IsaRoad(targetE)) && (!IsaRoad(targetS)) && (road.name != targetS))&&hit.collider.gameObject)
    //    else if ((("Terrain" == targetE) && ("Terrain" != targetS) && (road.name != targetS)) && hit.collider.gameObject)
    //    {
    //        ShowInfo("需要检测跑步的区域");
    //        if (false == JumpDetection)
    //            State.IS_JUMP = false;

    //        JumpDetection = true;
    //        //在此范围内如果起跳的话,
    //        Vector3 v2 = new Vector3(0, 0, -6f);
    //        //if (MeDisplay.transform.eulerAngles.y == 270)
    //        //    v2 = new Vector3(8f, 0, 0);
    //        v = go.transform.position + v2;
    //        v.y = 2.13f;  //暂时写死
    //        ShowInfo("JumpDetection = "+JumpDetection+",    isJump = "+State.IS_JUMP);
    //        if ((true == JumpDetection) && (true == State.IS_JUMP))
    //        {
    //                ShowInfo("应该起跳了");
    //                MeDisplay.transform.position = v;// go.transform.position;
    //                JumpDetection = false;   //执行了跳的动作之后就应该复位
    //                State.IS_JUMP = false;
    //        }



    /// <summary>
    /// 更新MeDisplay在路面的位置,主要是在爬坡的时候才会调用
    /// </summary>
    private void UpdatePosOnRoad()
    {
        //首先判断当前路的状态
        //注意:统一:上升的角度-20, 下降的角度, 20
        if ((road.transform.eulerAngles.x >= 18) && (road.transform.eulerAngles.x <= 21))  //角度为20,表示上坡路
        {
            //上升的射线位置
            lineStart = (DataConst.MeDisplay.transform.position + new Vector3(0.3f, 1, 0.8f));
            lineEnd   = DataConst.MeDisplay.transform.position + new Vector3(0.3f, -0.5f, 0.5f);
        }
        else if ((road.transform.eulerAngles.x >= 338) && (road.transform.eulerAngles.x <= 341))   //角度为-20,表示下坡路
        {
            //下降的射线角度
            lineStart = (DataConst.MeDisplay.transform.position + new Vector3(0.6f, 1, -0.8f));
            lineEnd   = DataConst.MeDisplay.transform.position + new Vector3(0.6f, -1f, -0.5f);
        }
        else if (ToolsFunction.EqualFloat(road.transform.eulerAngles.x, 0)) //((road.transform.eulerAngles.x >= -1) && (road.transform.eulerAngles.x <= 1))   //角度为0, 平坦的路
        {
            MeDisBoxcollider.enabled = true;
        }
        if (Physics.Linecast(lineStart, lineEnd, out hit, 1))
        {
            if (road.name != "Road9" && road.name != "Road17")
            {
                if (road.name == hit.collider.gameObject.name && State.KEEP_IDLE == false) //这个时候暂时加上标记量,避免   //碰到了某一条路
                {
                    //Debug.Log(Time.time + "执行到!"+road.name);
                    Debug.DrawLine(lineStart, lineEnd, Color.yellow);
                    Vector3 tempV = transform.position;
                    tempV.y            = hit.point.y;
                    transform.position = tempV;
                }
                else if ("MeDisplay(Clone)" == hit.collider.gameObject.name) //碰到的是自己,就忽略掉
                {
                }
                else if ("test" == hit.collider.gameObject.name) //此时碰到的是除了路之外的物体,但是包括绳子
                {
                    Debug.Log(Time.time + "已经脱离了road");
                }
            }
        }
    }