/// <summary> /// Resets the position.将父对象和子对象的trasform复原 /// </summary> /// <param name="tra">Tra.</param> public void ResetParentAndChild() { parentSAR.isCollider = false; parentSAR.enabled = false; gameController.lastTrans = null; for (int i = 0; i < childTween.Length; i++) { if (childTween [i].GetComponent <ScaleAndRotate> () != null) { ScaleAndRotate tarSAR = childTween [i].GetComponent <ScaleAndRotate> (); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarSAR.isDragMove = false; //将子物体缩放旋转归为 tarSAR.transform.DOScale(new Vector3(1, 1, 1), 0.1f); tarSAR.transform.DOLocalRotate(new Vector3(0, 0, 0), 0.1f); } childTween [i].GetComponent <BoxCollider> ().enabled = false; childTween [i].DOPlayBackwards(); //这个很重要 } Transform tra = parentSAR.transform; //然后将父物体归为 tra.DOScale(new Vector3(0.15f, 0.15f, 0.1f), 0.1f).SetDelay(0.1f); tra.DOLocalRotate(new Vector3(0, 0, 0), 0.1f).SetDelay(0.1f); tra.DOLocalMove(new Vector3(0, 0.056f, 0), 0.1f).SetDelay(0.2f); }
public void OnButtonReleased(VirtualButtonAbstractBehaviour vb) { switch (vb.VirtualButtonName) { case "split": //.... vb.GetComponent <Renderer>().material.color = Color.white; // Debug.Log ("split...released"); ResetParentAndChild(); parentSAR.isCollider = true; parentSAR.enabled = false; parentSAR.GetComponent <CollierController> ().childTag.Clear(); for (int i = 0; i < childTween.Length; i++) { //这个很重要 if (childTween [i].GetComponent <ScaleAndRotate> () != null) { ScaleAndRotate tarSAR = childTween [i].GetComponent <ScaleAndRotate> (); //将子物体缩放旋转归为 tarSAR.transform.DOScale(new Vector3(1, 1, 1), 0.1f); tarSAR.transform.DOLocalRotate(new Vector3(0, 0, 0), 0.1f); } } Transform tra = parentSAR.transform; //然后将父物体归为 tra.DOScale(new Vector3(0.15f, 0.15f, 0.1f), 0.1f); tra.DOLocalRotate(new Vector3(0, 0, 0), 0.1f); tra.DOLocalMove(new Vector3(0, 0.056f, 0), 0.1f); for (int i = 0; i < childTween.Length; i++) { ScaleAndRotate tarSAR = childTween [i].GetComponent <ScaleAndRotate> (); tarSAR.enabled = true; tarSAR.isCollider = false; tarSAR.isDragMove = false; childTween [i].DOPlayForward(); } StartCoroutine(MoveLater()); //.... break; case "combin": //.. vb.GetComponent <Renderer>().material.color = Color.white; gameController.lastTrans = null; // Debug.Log ("combin...released"); ResetParentAndChild(); //... break; default: //.. break; } }
/// <summary> /// Inits the load object.初始化网络加载出来的模型 /// </summary> public void InitLoadObj(string name) { GameObject model; if (loadObj.TryGetValue(name, out model)) { GameObject parentImageTarget = GameObject.FindGameObjectWithTag(name); GameObject tarObj = Instantiate <GameObject>(model, new Vector3(0, -72, 0), Quaternion.identity, parentImageTarget.transform); tarObj.AddComponent <SetRenderQueue> (); tarObj.AddComponent <ResetModel> (); tarObj.transform.localScale *= 0.2f; Renderer[] renders = tarObj.GetComponentsInChildren <Renderer> (); for (int i = 0; i < renders.Length; i++) { renders [i].material = mat; } ScaleAndRotate rotateSpt = tarObj.AddComponent <ScaleAndRotate> (); rotateSpt.isDragMove = false; rotateSpt.isRoteteSelf = true; tarObj.transform.DOLocalMoveY(0.18f, 8).SetDelay(2); tarObj.layer = LayerMask.NameToLayer("target"); } }
/// <summary> /// Plaies the ani.根据tag创建对应的动画 /// </summary> /// <param name="tarCl">Tar cl.</param> void PlayAni(Collider tarCl) { if (GameObject.FindGameObjectWithTag(tarCl.tag) != null) { //将lastTrasn之为null gameController.lastTrans = null; if (RuntimePlatform.Android == Application.platform) { if (Input.GetTouch(0).phase == TouchPhase.Stationary) { if (tarCl.GetComponent <ScaleAndRotate> () != null) { ScaleAndRotate tarSAR = tarCl.GetComponent <ScaleAndRotate> (); if (tarCl.tag == "group1_zhijia_r") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0.3f, 0.08f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_zhijia_l") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(-0.3f, 0.08f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_zhuanlun") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0.015f, 0.82f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_dingzi") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0, 0, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } } } } if (RuntimePlatform.WindowsEditor == Application.platform) { if (Input.GetMouseButtonUp(0)) { if (tarCl.GetComponent <ScaleAndRotate> () != null) { ScaleAndRotate tarSAR = tarCl.GetComponent <ScaleAndRotate> (); if (tarCl.tag == "group1_zhijia_r") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0.3f, 0.08f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_zhijia_l") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(-0.3f, 0.08f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_zhuanlun") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0.015f, 0.82f, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } if (tarCl.tag == "group1_dingzi") { //恢复旋转和位置,因为相同,所以设置一个方法 ResetSR(tarCl.transform); tarCl.transform.DOLocalMove(new Vector3(0, 0, 0), 1); tarSAR.isCollider = true; tarSAR.isRoteteSelf = false; tarCl.enabled = false; if (!childTag.Contains(tarCl.tag)) { childTag.Add(tarCl.tag); } } } } } } }
void DrayTar() { //运行在pc if (RuntimePlatform.WindowsEditor == Application.platform) { float x = Input.GetAxis("Mouse X"); float y = Input.GetAxis("Mouse Y"); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButton(0)) { if (Physics.Raycast(ray, out hit, 1000f, myMask)) { if (lastTrans != null) { lastTrans.GetComponent <ScaleAndRotate> ().enabled = false; } tarTrans = hit.transform; ScaleAndRotate tarScale = tarTrans.GetComponent <ScaleAndRotate> (); if (tarScale == null) { tarScale = tarTrans.gameObject.AddComponent <ScaleAndRotate> (); } tarScale.isRoteteSelf = false; tarScale.isDragMove = true; tarTrans.rotation = Quaternion.Euler(new Vector3(0, 0, 0)); } if (tarTrans != null) { if (!tarTrans.GetComponent <ScaleAndRotate> ().isCollider) { // tarTrans.position += new Vector3 (x, 0f, y) * 15f; Vector3 v1 = Camera.main.ScreenToViewportPoint(Input.mousePosition); Vector3 v2 = Camera.main.WorldToViewportPoint(tarTrans.position); tarTrans.position = Camera.main.ViewportToWorldPoint(new Vector3(v1.x, v1.y, v2.z)); } } } if (Input.GetMouseButtonUp(0)) { if (tarTrans != null) { tarTrans.GetComponent <ScaleAndRotate> ().isDragMove = false; lastTrans = tarTrans; lastTrans.GetComponent <ScaleAndRotate> ().enabled = true; tarTrans = null; } } } //安卓手机上的移动操作,通过移动可以实现两个物体的合并 if (Application.platform == RuntimePlatform.Android) { if (Input.touchCount > 0) { Touch figer = Input.GetTouch(0); if (figer.phase == TouchPhase.Stationary) { Ray ray = Camera.main.ScreenPointToRay(figer.position); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1000f, myMask)) { nextTimer -= Time.deltaTime; if (nextTimer < 0 && tarTrans == null) { if (lastTrans != null) { lastTrans.GetComponent <ScaleAndRotate> ().enabled = false; } tarTrans = hit.transform; ScaleAndRotate tarScale = tarTrans.GetComponent <ScaleAndRotate> (); if (tarScale == null) { tarScale = tarTrans.gameObject.AddComponent <ScaleAndRotate> (); } tarScale.isRoteteSelf = false; tarScale.isDragMove = true; Handheld.Vibrate(); tarTrans.rotation = Quaternion.Euler(new Vector3(0, 0, 0)); } } } if (figer.phase == TouchPhase.Ended) { nextTimer = 1.5f; if (tarTrans != null) { tarTrans.GetComponent <ScaleAndRotate> ().isDragMove = false; lastTrans = tarTrans; lastTrans.GetComponent <ScaleAndRotate> ().enabled = true; tarTrans = null; } } if (figer.phase == TouchPhase.Moved && tarTrans != null) { if (!tarTrans.GetComponent <ScaleAndRotate> ().isCollider) { // Vector2 nextDir = figer.deltaPosition; // tarTrans.position += new Vector3 (nextDir.x, 0f, nextDir.y) * Time.deltaTime *40f; Vector3 v1 = Camera.main.ScreenToViewportPoint(figer.position); Vector3 v2 = Camera.main.WorldToViewportPoint(tarTrans.position); tarTrans.position = Camera.main.ViewportToWorldPoint(new Vector3(v1.x, v1.y, v2.z)); } } } } }