using UnityEngine; using System.Collections; using AX.TrackRecord; using AX.MessageSystem; using UnityEngine.EventSystems; using System; [RequireComponent(typeof(LineamentEvent))] [RequireComponent(typeof(BoxCollider))] public class DragMove : MonoBehaviour { private OtherArrribute_Fire fireAttri; public GameObject messageBox; float TIMESTAMP = 1.0f; float timer = 0f; float THRESHOLD = 1.0f; Vector3 lastFrame; Vector3 currentFrame; LineamentEvent lineamentEvent; void Start() { messageBox = GameObject.Find("Canvas").transform.Find("MessageBox").gameObject; timer = TIMESTAMP; lastFrame = this.gameObject.transform.position; lineamentEvent = GetComponent(); } //IEnumerator OnMouseDown() //{ // Debug.Log("drag!!!!!!!!!!!!!!!"); // var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 // //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 // var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); // while (Input.GetMouseButton(0)) // { // var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); // var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; // //transform.position = curPosition; // //transform.position.x = curPosition.x; // //transform.position.z = curPosition.z; // transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); // //world.y=transform.position.y; // if (RecordManager.Instance.IsRecording) // { // GetComponent().ResetData(); // } // yield return 1;//这个很重要,循环执行 // } //} void Update() { ProcessRecordFineTuning(); if (timer > 0) { timer -= Time.deltaTime; } else { currentFrame = this.gameObject.transform.position; if (Vector3.Distance(currentFrame, lastFrame) > THRESHOLD) { if (RecordManager.Instance.IsRecording) { //if (ExamInfoHelpClass.applicationMode == ExamInfoHelpClass.ApplicationMode.PATHFINDING && // GetComponent().velocity.magnitude > 0)//寻路过程中不记录旋转 //{ // lastFrame = currentFrame; // timer = TIMESTAMP; // return; //} MessageDispatcher.SendMessage("RecordFineTuningEvent", (object)this.name); Debug.Log("position move: -------" + Vector3.Distance(currentFrame, lastFrame)); } } lastFrame = currentFrame; timer = TIMESTAMP; } } private void ProcessRecordFineTuning() { if (RecordManager.Instance.IsRecording) { if (ExamInfoHelpClass.applicationMode == ExamInfoHelpClass.ApplicationMode.PATHFINDING) { if (GetComponent()) { if (GetComponent().velocity.magnitude > 0) { lastFrame = this.gameObject.transform.position; return; } } } } } IEnumerator OnMouseDown() { if (this.GetComponent()) {//拖动时,NavmeshObstacle不能激活,否则会使其它消防车产生位移 GetComponent().enabled = false; } yield return new WaitForEndOfFrame(); // Debug.Log("drag!!!!!!!!!!!!!!!" + "isConnectCar=" + GetComponent().isConnectCar); if (TrackRecordHelpClass.CheckIfCanControl()) { #region 火 if (this.name.Contains("fire")) { fireAttri = this.GetComponent().fireAttri; //创建考题,备课中新建课件,自学 if (ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CreatQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.EditQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CopyQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.PrepareMode || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.EditCourceware || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.SelfStudyMode) { //新建节点,既没有新建节点也没有加载节点两种情况下允许拖动(加载节点不允许拖动) if (RecordManager.Instance.IsRecording || (!RecordManager.Instance.IsRecording && !LoadManager.Instance.IsPlayBacking)) { if (fireAttri.PathPointList.Count == 0) { var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; //transform.position = curPosition; //transform.position.x = curPosition.x; //transform.position.z = curPosition.z; if (Vector3.Distance(new Vector3(curPosition.x,transform.position.y,curPosition.z),transform.position)>0.3f) {//防止发生小范围位移 transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); } //world.y=transform.position.y; yield return 1;//这个很重要,循环执行 } } //else //{ // messageBox.GetComponent().showMessage(ShowMessageType.prompt, "提示信息", "设置蔓延路径后不能拖动"); //} } } } #endregion else { if (ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.TeachMode && DrawLinePlate.instance.CanDrawing) { //授课画板打开不可拖动 } #region 消防车和消防员 else if (name.Contains("xiaofang")) { //if (this.name.Contains("gpc") || this.name.Contains("dgc") || // this.name.Contains("ytc") || name.Contains("sgc") || name.Contains("pmc")) //{ // if (lineamentEvent.isConnectCar || lineamentEvent.ControlJuBi) // {//不管是管线连接还是举臂控制,只要有一个为真就不能移动 // } // else // { // var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 // //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 // var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); // while (Input.GetMouseButton(0)) // { // var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); // var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; // if (Vector3.Distance(new Vector3(curPosition.x, transform.position.y, curPosition.z), transform.position) > 2f) // {//防止发生小范围位移 // transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); // if (GetComponent()) // { // GetComponent().enabled = false; // } // } // //world.y=transform.position.y; // yield return 1;//这个很重要,循环执行 // } // } //} //else //{ // if (lineamentEvent.isConnectCar) // {//不管是管线连接还是举臂控制,只要有一个为真就不能移动 // } // else // { // var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 // //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 // var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); // while (Input.GetMouseButton(0)) // { // var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); // var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; // if (Vector3.Distance(new Vector3(curPosition.x, transform.position.y, curPosition.z), transform.position) > 0.3f) // {//防止发生小范围位移 // transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); // if (GetComponent()) // { // GetComponent().enabled = false; // } // } // //world.y=transform.position.y; // yield return 1;//这个很重要,循环执行 // } // } //} if (lineamentEvent.isConnectCar || lineamentEvent.ControlJuBi) {//不管是管线连接还是举臂控制,只要有一个为真就不能移动 } else { var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; if (Vector3.Distance(new Vector3(curPosition.x, transform.position.y, curPosition.z), transform.position) > 2f) {//防止发生小范围位移 transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); if (GetComponent()) { GetComponent().enabled = false; } } //world.y=transform.position.y; yield return 1;//这个很重要,循环执行 } } if (GetComponent()) { GetComponent().enabled = true; } } #endregion else if (this.name.Contains("shangyuan") || this.name.Contains("zhiqingren") || this.name.Contains("weixianpin") || this.name.Contains("zwd")) { if (ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CreatQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.EditQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.CopyQuestion || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.PrepareMode || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.EditCourceware || ExamInfoHelpClass.loadSceneMode == ExamInfoHelpClass.LoadSceneMode.SelfStudyMode) { //新建节点,既没有新建节点也没有加载节点两种情况下允许拖动(加载节点不允许拖动) if (RecordManager.Instance.IsRecording || (!RecordManager.Instance.IsRecording && !LoadManager.Instance.IsPlayBacking)) { var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; if (Vector3.Distance(new Vector3(curPosition.x, transform.position.y, curPosition.z), transform.position) > 0.3f) {//防止发生小范围位移 transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); if(GetComponent()) GetComponent().timer = RecordManager.Instance.RecordTimer; } //world.y=transform.position.y; yield return 1;//这个很重要,循环执行 } } } } else { var screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标 //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离 var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { var curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; //transform.position = curPosition; //transform.position.x = curPosition.x; //transform.position.z = curPosition.z; if (Vector3.Distance(new Vector3(curPosition.x, transform.position.y, curPosition.z), transform.position) > 0.3f) {//防止发生小范围位移 transform.position = new Vector3(curPosition.x, transform.position.y, curPosition.z); } //world.y=transform.position.y; yield return 1;//这个很重要,循环执行 } } } } } void OnMouseUp() { if (ExamInfoHelpClass.applicationMode == ExamInfoHelpClass.ApplicationMode.PATHFINDING) { if (GetComponent()) { if (GetComponent().enabled) { return; } if (GetComponent() && !GetComponent().enabled) { GetComponent().enabled = true; } } } } }