unity script prefab posicion pivote obtener objeto movimiento instanciar cambiar botones automatico c# android unity3d keyboard touchscreen

c# - script - obtener la posicion de un objeto unity



¿Cómo cambiar el tamaño de la vista cuando el teclado de la pantalla táctil está visible en Android con Unity? (2)

En Unity no puedo controlar el teclado de la pantalla táctil. La clase TouchScreenKeyboard tiene solo un parámetro para Android.

if(TouchScreenKeyboard.visible) { float keyboardHeight = TouchScreenKeyboard.area.height; // will resize the view here! But this return zero! }

¿Hay alguna otra forma de saber la altura del teclado en Android?


Esto debería hacer el truco (se encuentra aquí ):

public int GetKeyboardSize() { using(AndroidJavaClass UnityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject View = UnityClass.GetStatic<AndroidJavaObject>("currentActivity").Get<AndroidJavaObject>("mUnityPlayer").Call<AndroidJavaObject>("getView"); using(AndroidJavaObject Rct = new AndroidJavaObject("android.graphics.Rect")) { View.Call("getWindowVisibleDisplayFrame", Rct); return Screen.height - Rct.Call<int>("height"); } } }


Fue hace mucho tiempo, pero por si acaso alguien está luchando con él de nuevo, logré encontrar una solución para un panel con un InputField usando esta clase MonoBehaviour. Lo adjunté al InputField y vinculé el panel que debería cambiar de tamaño.

public class InputFieldForScreenKeyboardPanelAdjuster : MonoBehaviour { // Assign panel here in order to adjust its height when TouchScreenKeyboard is shown public GameObject panel; private InputField inputField; private RectTransform panelRectTrans; private Vector2 panelOffsetMinOriginal; private float panelHeightOriginal; private float currentKeyboardHeightRatio; public void Start() { inputField = transform.GetComponent<InputField>(); panelRectTrans = panel.GetComponent<RectTransform>(); panelOffsetMinOriginal = panelRectTrans.offsetMin; panelHeightOriginal = panelRectTrans.rect.height; } public void LateUpdate () { if (inputField.isFocused) { float newKeyboardHeightRatio = GetKeyboardHeightRatio(); if (currentKeyboardHeightRatio != newKeyboardHeightRatio) { Debug.Log("InputFieldForScreenKeyboardPanelAdjuster: Adjust to keyboard height ratio: " + newKeyboardHeightRatio); currentKeyboardHeightRatio = newKeyboardHeightRatio; panelRectTrans.offsetMin = new Vector2(panelOffsetMinOriginal.x, panelHeightOriginal * currentKeyboardHeightRatio); } } else if (currentKeyboardHeightRatio != 0f) { if (panelRectTrans.offsetMin != panelOffsetMinOriginal) { SmartCoroutine.DelayedExecute(this, () => { Debug.Log("InputFieldForScreenKeyboardPanelAdjuster: Revert to original"); panelRectTrans.offsetMin = panelOffsetMinOriginal; }, 0.5f); } currentKeyboardHeightRatio = 0f; } } private float GetKeyboardHeightRatio() { if (Application.isEditor) { return 0.4f; // fake TouchScreenKeyboard height ratio for debug in editor } #if UNITY_ANDROID using (AndroidJavaClass UnityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject View = UnityClass.GetStatic<AndroidJavaObject>("currentActivity").Get<AndroidJavaObject>("mUnityPlayer").Call<AndroidJavaObject>("getView"); using (AndroidJavaObject rect = new AndroidJavaObject("android.graphics.Rect")) { View.Call("getWindowVisibleDisplayFrame", rect); return (float)(Screen.height - rect.Call<int>("height")) / Screen.height; } } #else return (float)TouchScreenKeyboard.area.height / Screen.height; #endif } }