using UnityEngine; namespace WZ { public class PX2DP { #if UNITY_ANDROID && !UNITY_EDITOR private static AndroidJavaClass _unityPlayerClass; private static AndroidJavaObject _currentActivity; private static AndroidJavaObject _resources; private static AndroidJavaObject _displayMetrics; // 初始化Android相关类引用 private static void Init() { if (_unityPlayerClass == null) { _unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); _currentActivity = _unityPlayerClass.GetStatic("currentActivity"); _resources = _currentActivity.Call("getResources"); _displayMetrics = _resources.Call("getDisplayMetrics"); } } #endif /// /// Android平台dp转px /// /// 需要转换的dp值 /// 转换后的px值 public static int DpToPx(float dp) { #if UNITY_ANDROID && !UNITY_EDITOR Init(); float scale = _displayMetrics.Get("density"); return (int)(dp * scale + 0.5f); #else // 非Android平台返回近似值 return Mathf.RoundToInt(dp * Screen.dpi / 160f); #endif } /// /// Android平台px转dp /// /// 需要转换的px值 /// 转换后的dp值 public static int PxToDp(float px) { #if UNITY_ANDROID && !UNITY_EDITOR Init(); float scale = _displayMetrics.Get("density"); return (int)(px / scale + 0.5f); #else // 非Android平台返回近似值 return Mathf.RoundToInt(px * 160f / Screen.dpi); #endif } } }