using System.Collections; using System.Collections.Generic; //using System.Diagnostics; using UnityEngine; using UnityEngine.EventSystems; //这个脚本的名字是双击跳转,按照庄公的需求全部改成单击,名字的问题就先不考虑了,这里给他修改成单击,但是保留了双击的逻辑,以便以后方便切换回来 //把脚本复制一份上面是单击版本,下面是双击版本 //单击双击问题最终确定,图标单击,传感器和房子双击,这样唯一问题就是双击图标怎么办,算了,妥协吧,设置为blocking objects为3d,这样不能跨越穿越,妥协了 //public class DoubleClickToFocus : MonoBehaviour //{ // private Dictionary targetObjectAndPosition = new Dictionary();//使用字典数据类型来定义每一个物体自己对应的观察点位置 // [Tooltip("平滑过渡所用时间(秒)")] public float transitionDuration = 1.0f; // [Header("双击设置")] // [Tooltip("双击间隔时间阈值(秒)")] public float doubleClickInterval = 0.3f; // //private float lastClickTime = 0f; // //private bool waitingSecondClick = false; // bool flying = false;//双击不需要用这种方式来确定,单击的话还是要的。 // private Camera mainCamera; // public Vector3 core; // private void Awake() // { // core = new Vector3(-50f, 20f, -30f);//初始旋转中心 // } // void Start() // { // mainCamera = Camera.main;//主相机的那个Camera组件跳转到的观测点 // //targetObjectAndPosition.Add("tt_zhuta", new Vector3(53f, 16.3f, 27.62f)); // //targetObjectAndPosition.Add("sb_fengsufengxiang400", new Vector3(12.23f, 11.38f, 27.62f)); // //targetObjectAndPosition.Add("sb_gnss01", new Vector3(15.6f, 2f, 12f)); // //targetObjectAndPosition.Add("sb_gnss02", new Vector3(13.18f, 2f, 33.3f)); // //targetObjectAndPosition.Add("sb_gnss03", new Vector3(1.4f, 2f, 22.3f)); // //targetObjectAndPosition.Add("sb_jiasudu01", new Vector3(11.45f, 13.1f, 31.9f)); // //targetObjectAndPosition.Add("sb_jiasudu02", new Vector3(2.55f, 13.1f, 32)); // //targetObjectAndPosition.Add("sb_jiasudu03", new Vector3(2.55f, 13.1f, 24.6f)); // //targetObjectAndPosition.Add("sb_jiasudu04", new Vector3(11.1f, 13.1f, 24.6f)); // //targetObjectAndPosition.Add("sb_qingjiaoiji01", new Vector3(10.67f, 11.2f, 32.8f)); // //targetObjectAndPosition.Add("sb_qingjiaoiji02", new Vector3(2.9f, 11.2f, 32.5f)); // //targetObjectAndPosition.Add("sb_qingjiaoiji03", new Vector3(2.9f, 11.2f, 24f)); // //targetObjectAndPosition.Add("sb_qingjiaoiji04", new Vector3(10.7f, 11.2f, 24.1f)); // //targetObjectAndPosition.Add("sb_shexiangtou", new Vector3(11.27f, 17.37f, 31.78f)); // //targetObjectAndPosition.Add("sb_shujucaijiyi", new Vector3(10.3f, 14.2f, 33.8f)); // //targetObjectAndPosition.Add("sb_wenshiya", new Vector3(11.3f, 11f, 29f)); // //targetObjectAndPosition.Add("sb_yachashi01", new Vector3(13f, 0.36f, 12.1f)); // //targetObjectAndPosition.Add("sb_yachashi02", new Vector3(13f, 0.5f, 23f)); // //targetObjectAndPosition.Add("sb_yachashi03", new Vector3(13f, 0.5f, 33.5f)); // //targetObjectAndPosition.Add("sb_yachashi04", new Vector3(1.57f, 0.27f, 34.5f)); // //targetObjectAndPosition.Add("sb_yachashi05", new Vector3(1.56f, 0.3f, 22f)); // //targetObjectAndPosition.Add("sb_yingbianji01", new Vector3(10.46f, 13f, 32.5f)); // //targetObjectAndPosition.Add("sb_yingbianji02", new Vector3(3.1f, 13f, 32.5f)); // //targetObjectAndPosition.Add("sb_yingbianji03", new Vector3(3.1f, 13f, 24.1f)); // //targetObjectAndPosition.Add("sb_yingbianji04", new Vector3(10.4f, 13f, 23.8f)); // //targetObjectAndPosition.Add("tt_changjianzhub001", new Vector3(24f, 10f, -19f)); // //targetObjectAndPosition.Add("tt_changjianzhud", new Vector3(1f, 10f, -80f)); // //targetObjectAndPosition.Add("tt_changjianzhud001", new Vector3(24f, 10f, -60f)); // //targetObjectAndPosition.Add("tt_changjianzhuc", new Vector3(-71f, 10f, -65f)); // //targetObjectAndPosition.Add("tt_changjianzhub", new Vector3(-49f, 10f, -19f)); // //targetObjectAndPosition.Add("tt_changjianzhua", new Vector3(-34f, 10f, -19f)); // targetObjectAndPosition.Add("bx_talou", new Vector3(-82f, 37f, -100f)); // targetObjectAndPosition.Add("bx_langqiao", new Vector3(-35f, 30f, -59f)); // targetObjectAndPosition.Add("bx_qiaozha", new Vector3(-26f, 35f, -74f)); // targetObjectAndPosition.Add("bx_zhafang1", new Vector3(-64f, 21f, -102f)); // targetObjectAndPosition.Add("bx_zhafang2", new Vector3(-8f, 26f, -173f)); // targetObjectAndPosition.Add("bx_zhafang3", new Vector3(12f, 23f, -37f)); // targetObjectAndPosition.Add("bx_diaosu", new Vector3(-18f, 18f, 13f)); // targetObjectAndPosition.Add("sb_shujucaijiyi", new Vector3(-26f, 19f, 11f)); // targetObjectAndPosition.Add("sb_shujucaijiyi (1)", new Vector3(31f, 17f, -60f)); // targetObjectAndPosition.Add("bx_zhafang5", new Vector3(53f, 26f, -23f)); // targetObjectAndPosition.Add("pj_tingzi", new Vector3(67f, 20f, -97f)); // targetObjectAndPosition.Add("sb_qixiangzu001", new Vector3(14.2f, 24.8f, 11.5f)); // targetObjectAndPosition.Add("sb_wuxianqingjiaoji001", new Vector3(-118.4f, 18f, -82.9f)); // targetObjectAndPosition.Add("sb_wuxianqingjiaoji002", new Vector3(-110f, 18f, -78f)); // targetObjectAndPosition.Add("sb_wuxianqingjiaoji003", new Vector3(-114f, 18f, -70.3f)); // targetObjectAndPosition.Add("sb_wuxianqingjiaoji004", new Vector3(-121.8f, 18f, -74.3f)); // } // void Update() // { // if (Input.GetMouseButtonUp(0)) // { // if (!flying) // { // HandleClick(); // } // } // } // public void HandleClick() // { // Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); // if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity) && hit.collider.CompareTag("Target"))//应该给被打中的物体加一个标签,不然正常物体也会影响core,判断是否打中浮标或者是传感器本体,2者都要加上Target标签 // { // Transform finalObject = hit.transform;//用浮标嫁祸给真实物体,浮标用ICON结尾,去除这个后缀就得到了真实物体的名字,不然浮标得单独打点,打点跳转也不好 // if (finalObject.gameObject.name.EndsWith("ICON")) // { // string realObjName = finalObject.gameObject.name.Substring(0, finalObject.gameObject.name.Length - 4);//去尾法得到传感器名字,浮标名字只是在传感器名字后面加ICON,其他的不能动 // finalObject = GameObject.Find(realObjName).transform; // } // foreach (KeyValuePair pair in targetObjectAndPosition) // { // if (finalObject.gameObject.name == pair.Key) // { // Vector3 targetPos = pair.Value; // StartCoroutine(MoveCamera(mainCamera, targetPos, transitionDuration, finalObject)); // } // } // core = finalObject.position;//这里只要有 Target 被打中的话,你的旋转中心就会变,所以要确保被打中的物体一定是可以跳转的 // } // } // private IEnumerator MoveCamera(Camera cam, Vector3 targetPos, float duration, Transform focusTarget) // { // flying = true; // Vector3 startPos = cam.transform.position; // float elapsed = 0f; // while (elapsed < duration) // { // float t = Mathf.Lerp(0f, 1f, elapsed / duration); // cam.transform.position = Vector3.Lerp(startPos, targetPos, t); // if (focusTarget != null) // cam.transform.LookAt(focusTarget); // elapsed += Time.deltaTime; // yield return null; // } // cam.transform.position = targetPos; // cam.transform.LookAt(focusTarget); // flying = false; // if (cam.transform.position.y < 0.01f) //这个是为了防止部分设备太贴近地面,导致穿透地面里面出不来。让你的相机永远都在地面0.1米以上 // { // Vector3 newPos = cam.transform.position; // // 2. 修改y轴值(x、z保持不变) // newPos.y = 0.1f; // // 3. 重新赋值给position // cam.transform.position = newPos; // } // } //} //-------------------------------------------------------------------------------------------单击双击分界线 public class DoubleClickToFocus : MonoBehaviour { private Dictionary targetObjectAndPosition = new Dictionary();//使用字典数据类型来定义每一个物体自己对应的观察点位置 [Tooltip("平滑过渡所用时间(秒)")] public float transitionDuration = 1.5f; [Header("双击设置")] [Tooltip("双击间隔时间阈值(秒)")] public float doubleClickInterval = 0.3f; private float lastClickTime = 0f; private bool waitingSecondClick = false; private Camera mainCamera; public Vector3 core; bool flying = false; private void Awake() { core = new Vector3(6f, 17f, 30f);//初始旋转中心 } void Start() { mainCamera = Camera.main;//主相机的那个Camera组件跳转到的观测点 //targetObjectAndPosition.Add("tt_zhuta", new Vector3(53f, 16.3f, 27.62f)); //targetObjectAndPosition.Add("sb_fengsufengxiang400", new Vector3(12.23f, 11.38f, 27.62f)); //targetObjectAndPosition.Add("sb_gnss01", new Vector3(15.6f, 2f, 12f)); //targetObjectAndPosition.Add("sb_gnss02", new Vector3(13.18f, 2f, 33.3f)); //targetObjectAndPosition.Add("sb_gnss03", new Vector3(1.4f, 2f, 22.3f)); //targetObjectAndPosition.Add("sb_jiasudu01", new Vector3(11.45f, 13.1f, 31.9f)); //targetObjectAndPosition.Add("sb_jiasudu02", new Vector3(2.55f, 13.1f, 32)); //targetObjectAndPosition.Add("sb_jiasudu03", new Vector3(2.55f, 13.1f, 24.6f)); //targetObjectAndPosition.Add("sb_jiasudu04", new Vector3(11.1f, 13.1f, 24.6f)); //targetObjectAndPosition.Add("sb_qingjiaoiji01", new Vector3(10.67f, 11.2f, 32.8f)); //targetObjectAndPosition.Add("sb_qingjiaoiji02", new Vector3(2.9f, 11.2f, 32.5f)); //targetObjectAndPosition.Add("sb_qingjiaoiji03", new Vector3(2.9f, 11.2f, 24f)); //targetObjectAndPosition.Add("sb_qingjiaoiji04", new Vector3(10.7f, 11.2f, 24.1f)); //targetObjectAndPosition.Add("sb_shexiangtou", new Vector3(11.27f, 17.37f, 31.78f)); //targetObjectAndPosition.Add("sb_shujucaijiyi", new Vector3(10.3f, 14.2f, 33.8f)); //targetObjectAndPosition.Add("sb_wenshiya", new Vector3(11.3f, 11f, 29f)); //targetObjectAndPosition.Add("sb_yachashi01", new Vector3(13f, 0.36f, 12.1f)); //targetObjectAndPosition.Add("sb_yachashi02", new Vector3(13f, 0.5f, 23f)); //targetObjectAndPosition.Add("sb_yachashi03", new Vector3(13f, 0.5f, 33.5f)); //targetObjectAndPosition.Add("sb_yachashi04", new Vector3(1.57f, 0.27f, 34.5f)); //targetObjectAndPosition.Add("sb_yachashi05", new Vector3(1.56f, 0.3f, 22f)); //targetObjectAndPosition.Add("sb_yingbianji01", new Vector3(10.46f, 13f, 32.5f)); //targetObjectAndPosition.Add("sb_yingbianji02", new Vector3(3.1f, 13f, 32.5f)); //targetObjectAndPosition.Add("sb_yingbianji03", new Vector3(3.1f, 13f, 24.1f)); //targetObjectAndPosition.Add("sb_yingbianji04", new Vector3(10.4f, 13f, 23.8f)); //targetObjectAndPosition.Add("tt_changjianzhub001", new Vector3(24f, 10f, -19f)); //targetObjectAndPosition.Add("tt_changjianzhud", new Vector3(1f, 10f, -80f)); //targetObjectAndPosition.Add("tt_changjianzhud001", new Vector3(24f, 10f, -60f)); //targetObjectAndPosition.Add("tt_changjianzhuc", new Vector3(-71f, 10f, -65f)); //targetObjectAndPosition.Add("tt_changjianzhub", new Vector3(-49f, 10f, -19f)); //targetObjectAndPosition.Add("tt_changjianzhua", new Vector3(-34f, 10f, -19f)); //targetObjectAndPosition.Add("bx_talou", new Vector3(-82f, 37f, -100f)); //targetObjectAndPosition.Add("bx_langqiao", new Vector3(-35f, 30f, -59f)); //targetObjectAndPosition.Add("bx_qiaozha", new Vector3(-26f, 35f, -74f)); //targetObjectAndPosition.Add("bx_zhafang1", new Vector3(-64f, 21f, -102f)); //targetObjectAndPosition.Add("bx_zhafang2", new Vector3(-8f, 26f, -173f)); //targetObjectAndPosition.Add("bx_zhafang3", new Vector3(12f, 23f, -37f)); //targetObjectAndPosition.Add("bx_diaosu", new Vector3(-18f, 18f, 13f)); //targetObjectAndPosition.Add("sb_shujucaijiyi", new Vector3(-26f, 19f, 11f)); //targetObjectAndPosition.Add("sb_shujucaijiyi (1)", new Vector3(31f, 17f, -60f)); //targetObjectAndPosition.Add("bx_zhafang5", new Vector3(53f, 26f, -23f)); //targetObjectAndPosition.Add("pj_tingzi", new Vector3(67f, 20f, -97f)); //targetObjectAndPosition.Add("sb_qixiangzu001", new Vector3(14.2f, 24.8f, 11.5f)); //targetObjectAndPosition.Add("sb_wuxianqingjiaoji001", new Vector3(-118.4f, 18f, -82.9f)); //targetObjectAndPosition.Add("sb_wuxianqingjiaoji002", new Vector3(-110f, 18f, -78f)); //targetObjectAndPosition.Add("sb_wuxianqingjiaoji003", new Vector3(-114f, 18f, -70.3f)); //targetObjectAndPosition.Add("sb_wuxianqingjiaoji004", new Vector3(-121.8f, 18f, -74.3f)); //targetObjectAndPosition.Add("sb_gnss001", new Vector3(-59f, 18.4f, -70f)); //targetObjectAndPosition.Add("sb_gnss002", new Vector3(-68f, 20f, -59f)); //targetObjectAndPosition.Add("sb_gnss003", new Vector3(-19.3f, 19.2f, -34f)); //targetObjectAndPosition.Add("sb_gnss004", new Vector3(-28.8f, 20.4f, -23.5f)); //targetObjectAndPosition.Add("sb_liefengji001", new Vector3(-82.3f, 18f, -69.3f)); //targetObjectAndPosition.Add("sb_liefengji002", new Vector3(-70.2f, 18f, -58.4f)); //targetObjectAndPosition.Add("sb_liefengji003", new Vector3(-57.1f, 18f, -46.4f)); //targetObjectAndPosition.Add("sb_liefengji004", new Vector3(-43.7f, 18f, -34.4f)); //targetObjectAndPosition.Add("sb_liefengji005", new Vector3(-30.5f, 18f, -22.5f)); //targetObjectAndPosition.Add("sb_yachashi001", new Vector3(-73.3f, 16.8f, -79.7f)); //targetObjectAndPosition.Add("sb_yachashi002", new Vector3(-60.7f, 16.8f, -68.6f)); //targetObjectAndPosition.Add("sb_yachashi003", new Vector3(-47.3f, 16.8f, -56.6f)); //targetObjectAndPosition.Add("sb_yachashi004", new Vector3(-34f, 16.8f, -44.6f)); //targetObjectAndPosition.Add("sb_yachashi005", new Vector3(-20.7f, 16.8f, -32.8f)); //targetObjectAndPosition.Add("sb_yingbianji001", new Vector3(-69.9f, 15.4f, -70.6f)); //targetObjectAndPosition.Add("sb_yingbianji002", new Vector3(-56.6f, 15.4f, -59f)); //targetObjectAndPosition.Add("sb_yingbianji003", new Vector3(-42.9f, 15.4f, -46.3f)); //targetObjectAndPosition.Add("sb_yingbianji004", new Vector3(-30.3f, 15.4f, -35f)); //targetObjectAndPosition.Add("sb_yingbianji005", new Vector3(-17.6f, 15.4f, -23.5f)); //targetObjectAndPosition.Add("sb_zhendong001", new Vector3(-56.8f, 17.7f, -46.3f)); //targetObjectAndPosition.Add("sb_zhendong002", new Vector3(-43.4f, 17.7f, -34.2f)); targetObjectAndPosition.Add("tt_zhuta", new Vector3(53f, 16.3f, 27.62f)); targetObjectAndPosition.Add("sb_fengsufengxiang400", new Vector3(12.23f, 11.38f, 27.62f)); targetObjectAndPosition.Add("sb_gnss01", new Vector3(15.6f, 2f, 12f)); targetObjectAndPosition.Add("sb_gnss02", new Vector3(13.18f, 2f, 33.3f)); targetObjectAndPosition.Add("sb_gnss03", new Vector3(1.4f, 2f, 22.3f)); targetObjectAndPosition.Add("sb_jiasudu01", new Vector3(11.45f, 13.1f, 31.9f)); targetObjectAndPosition.Add("sb_jiasudu02", new Vector3(2.55f, 13.1f, 32)); targetObjectAndPosition.Add("sb_jiasudu03", new Vector3(2.55f, 13.1f, 24.6f)); targetObjectAndPosition.Add("sb_jiasudu04", new Vector3(11.1f, 13.1f, 24.6f)); targetObjectAndPosition.Add("sb_qingjiaoiji01", new Vector3(10.67f, 11.2f, 32.8f)); targetObjectAndPosition.Add("sb_qingjiaoiji02", new Vector3(2.9f, 11.2f, 32.5f)); targetObjectAndPosition.Add("sb_qingjiaoiji03", new Vector3(2.9f, 11.2f, 24f)); targetObjectAndPosition.Add("sb_qingjiaoiji04", new Vector3(10.7f, 11.2f, 24.1f)); targetObjectAndPosition.Add("sb_shexiangtou", new Vector3(11.27f, 17.37f, 31.78f)); targetObjectAndPosition.Add("sb_shujucaijiyi", new Vector3(10.3f, 14.2f, 33.8f)); targetObjectAndPosition.Add("sb_wenshiya", new Vector3(11.3f, 11f, 29f)); targetObjectAndPosition.Add("sb_yachashi01", new Vector3(13f, 0.36f, 12.1f)); targetObjectAndPosition.Add("sb_yachashi02", new Vector3(13f, 0.5f, 23f)); targetObjectAndPosition.Add("sb_yachashi03", new Vector3(13f, 0.5f, 33.5f)); targetObjectAndPosition.Add("sb_yachashi04", new Vector3(1.57f, 0.27f, 34.5f)); targetObjectAndPosition.Add("sb_yachashi05", new Vector3(1.56f, 0.3f, 22f)); targetObjectAndPosition.Add("sb_yingbianji01", new Vector3(10.46f, 13f, 32.5f)); targetObjectAndPosition.Add("sb_yingbianji02", new Vector3(3.1f, 13f, 32.5f)); targetObjectAndPosition.Add("sb_yingbianji03", new Vector3(3.1f, 13f, 24.1f)); targetObjectAndPosition.Add("sb_yingbianji04", new Vector3(10.4f, 13f, 23.8f)); targetObjectAndPosition.Add("tt_changjianzhub001", new Vector3(24f, 10f, -19f)); targetObjectAndPosition.Add("tt_changjianzhud", new Vector3(1f, 10f, -80f)); targetObjectAndPosition.Add("tt_changjianzhud001", new Vector3(24f, 10f, -60f)); targetObjectAndPosition.Add("tt_changjianzhuc", new Vector3(-71f, 10f, -65f)); targetObjectAndPosition.Add("tt_changjianzhub", new Vector3(-49f, 10f, -19f)); targetObjectAndPosition.Add("tt_changjianzhua", new Vector3(-34f, 10f, -19f)); targetObjectAndPosition.Add("全部ViewPort", new Vector3(40f, 16f, 31f)); targetObjectAndPosition.Add("沉降监测ViewPort", new Vector3(40f, 16f, 31f)); targetObjectAndPosition.Add("应变监测ViewPort", new Vector3(40f, 16f, 31f)); targetObjectAndPosition.Add("倾角监测ViewPort", new Vector3(40f, 16f, 31f)); targetObjectAndPosition.Add("气象监测ViewPort", new Vector3(40f, 16f, 31f)); targetObjectAndPosition.Add("振动加速度ViewPort", new Vector3(40f, 16f, 31f)); } void Update() { if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject()) { return; // 直接 return,你下面所有相机逻辑都不执行 } if (Input.GetMouseButtonDown(0)) { if (waitingSecondClick && Time.time - lastClickTime <= doubleClickInterval) { HandleClick(); // Debug.Log(123); waitingSecondClick = false; } else { waitingSecondClick = true; lastClickTime = Time.time; StartCoroutine(ResetClickState()); } } } private void HandleClick() { Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity) && hit.collider.CompareTag("Target"))//这里有点小问题,应该给被打中的物体加一个标签,不然正常物体也会影响core { Transform finalObject = hit.transform;//用浮标嫁祸给真实物体,浮标用ICON结尾,去除这个后缀就得到了真实物体的名字 if (finalObject.gameObject.name.EndsWith("ICON")) { string realObjName = hit.transform.gameObject.name.Substring(0, finalObject.gameObject.name.Length - 4); finalObject = GameObject.Find(realObjName).transform; } foreach (KeyValuePair pair in targetObjectAndPosition) { if (finalObject.gameObject.name == pair.Key) { Vector3 targetPos = pair.Value; transitionDuration = Mathf.Clamp(Vector3.Distance(mainCamera.transform.position, targetPos) / 50f, 0.5f, 1.5f); StartCoroutine(MoveCamera(mainCamera, targetPos, transitionDuration, finalObject)); } } core = finalObject.position; } } private IEnumerator ResetClickState() { yield return new WaitForSeconds(doubleClickInterval); waitingSecondClick = false; } private IEnumerator MoveCamera(Camera cam, Vector3 targetPos, float duration, Transform focusTarget) { Vector3 startPos = cam.transform.position; float elapsed = 0f; while (elapsed < duration) { float t = Mathf.Lerp(0f, 1f, elapsed / duration); cam.transform.position = Vector3.Lerp(startPos, targetPos, t); if (focusTarget != null) cam.transform.LookAt(focusTarget); elapsed += Time.deltaTime; waitingSecondClick = false;//这一步是你在每一帧我都让你不等下一次点击, //防止你再飞的过程中手速快双击的话还能飞到其他地方, //这样我一直给你设成 false,你怎么样都不能再飞第二次 //还有一个作用就是我单击跳转的时候也会持续触发,所以即使 UI 和实物重合, //我也是 UI 先出发,本身 UI 的优先级就比物理碰撞的优先级要高 flying = true; yield return null; } cam.transform.position = targetPos; if (focusTarget != null) cam.transform.LookAt(focusTarget); if (cam.transform.position.y < 0.01f) { Vector3 newPos = cam.transform.position; // 2. 修改y轴值(x、z保持不变) newPos.y = 0.1f; // 3. 重新赋值给position cam.transform.position = newPos; } flying = false; } public void FlyToIconAndConvertCore(string IconName) { if (flying) return; Transform finalObject = GameObject.Find(IconName.Substring(0, IconName.Length - 4)).transform; //Unity 的 button 按钮通过 Inspector 没有办法灵活指定参数, //我在里面把参数写死,然后来一一匹配,传的参数就是gameobject的名字 //这个函数给点击浮标的 button 来用。 foreach (KeyValuePair pair in targetObjectAndPosition) { if (IconName.Substring(0, IconName.Length - 4) == pair.Key) { Vector3 targetPos = pair.Value; transitionDuration = Mathf.Clamp(Vector3.Distance(mainCamera.transform.position, targetPos) / 50f, 0.5f, 1.5f); StartCoroutine(MoveCamera(mainCamera, targetPos, transitionDuration, finalObject)); } } core = finalObject.position; } //给仅显示部分图标使用,name是SortingIcons的名字,飞行的过程和上面差不多 public void FlyToOverlookAndConvertCore(string name) { if (flying) return; Transform finalObject = GameObject.Find(name + "ViewPort").transform; //在场景里加对应名的空物体作为伪终点。 foreach (KeyValuePair pair in targetObjectAndPosition) { if (finalObject.gameObject.name == pair.Key) { Vector3 targetPos = pair.Value; transitionDuration = Mathf.Clamp(Vector3.Distance(mainCamera.transform.position, targetPos) / 50f, 0.5f, 1.5f); StartCoroutine(MoveCamera(mainCamera, targetPos, transitionDuration, finalObject)); } } core = finalObject.position; } }