void Start() { canvas = main.root; prePos = main.anchoredPosition; canvasHeight = canvas.GetComponent <RectTransform>().rect.height;//这一步不能放在Awake 会造成数值不准确 因为Canvas的Awake调用顺序的原因 SetMaskRect(); #if UNITY_EDITOR //测试软键盘弹出 testKeyboard = GameTools.GetNewImage(canvas, "TestKeyboard", Vector3.zero, Vector2.zero, Vector2.zero, new Vector2(1, 0), new Vector2(0.5f, 0), Vector3.zero, Vector3.one).GetComponent <RectTransform>(); Button closeBtn = GameTools.GetNewButton(testKeyboard, "closeBtn", "关闭软键盘", Vector3.zero, new Vector2(100, 50), Vector2.one, Vector2.one, Vector2.one, Vector3.zero, Vector3.one); closeBtn.onClick.AddListener(() => MobileInput.OnShowKeyboard(false, 0)); Text text = GameTools.GetNewText(testKeyboard, "text", "我是测试移动端的虚拟键盘!", Vector3.zero, new Vector2(500, 50), new Vector2(0.5f, 1), new Vector2(0.5f, 1), new Vector2(0.5f, 1), Vector3.zero, Vector3.one); text.fontSize = 30; #endif }
private void LateUpdate() { //使用MouseButtonUp和LateUpdate 而不使用MouseButtonDown和Update会造成bug 困扰 //是为了防止点击main上的按钮 而MouseButtonDown先调用下移main再调用Button的响应事件 按钮下移造成点不到按钮 不会触发按钮的点击事件 if (Input.GetMouseButtonUp(0) && keyboardHeight != 0) { if (RectTransformUtility.RectangleContainsScreenPoint(testKeyboard, Input.mousePosition) == false) { if (EventSystem.current != null && EventSystem.current.currentSelectedGameObject != null && EventSystem.current.currentSelectedGameObject.GetComponent <MobileInputField>() != null) { return; } MobileInput.OnShowKeyboard(false, 0); } } }