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); //减分 } } }
//这个函数以后不用了!!!!!!!!!!!!!!!!! //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"); } } } }