您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

196 行
6.2 KiB

using System;
using System.Runtime.InteropServices;
using Unity.UIWidgets.ui;
using UnityEngine;
namespace Unity.UIWidgets.engine {
[StructLayout(LayoutKind.Sequential)]
public struct viewMetrics {
public float insets_top;
public float insets_bottom;
public float insets_left;
public float insets_right;
public float padding_top;
public float padding_bottom;
public float padding_left;
public float padding_right;
}
public static class DisplayMetricsProvider {
public static Func<DisplayMetrics> provider = () => new PlayerDisplayMetrics();
}
public interface DisplayMetrics {
void OnEnable();
void OnGUI();
void Update();
void onViewMetricsChanged();
float devicePixelRatio { get; }
viewMetrics viewMetrics { get; }
WindowPadding viewPadding { get; }
WindowPadding viewInsets { get; }
}
public class PlayerDisplayMetrics : DisplayMetrics {
float _devicePixelRatio = 0;
viewMetrics? _viewMetrics = null;
public void OnEnable() {
}
public void OnGUI() {
}
public void Update() {
}
public void onViewMetricsChanged() {
//view metrics marks dirty
_viewMetrics = null;
}
public float devicePixelRatio {
get {
if (_devicePixelRatio > 0) {
return _devicePixelRatio;
}
#if UNITY_ANDROID
this._devicePixelRatio = AndroidDevicePixelRatio();
#endif
#if UNITY_WEBGL
this._devicePixelRatio = UIWidgetsWebGLDevicePixelRatio();
#endif
#if UNITY_IOS
this._devicePixelRatio = IOSDeviceScaleFactor();
#endif
if (_devicePixelRatio <= 0) {
_devicePixelRatio = 1;
}
return _devicePixelRatio;
}
}
public WindowPadding viewPadding {
get {
return new WindowPadding(viewMetrics.padding_left,
viewMetrics.padding_top,
viewMetrics.padding_right,
viewMetrics.padding_bottom);
}
}
public WindowPadding viewInsets {
get {
return new WindowPadding(viewMetrics.insets_left,
viewMetrics.insets_top,
viewMetrics.insets_right,
viewMetrics.insets_bottom);
}
}
public viewMetrics viewMetrics {
get {
if (_viewMetrics != null) {
return _viewMetrics.Value;
}
#if UNITY_ANDROID
using (
AndroidJavaClass viewController =
new AndroidJavaClass("com.unity.uiwidgets.plugin.UIWidgetsViewController")
) {
AndroidJavaObject metrics = viewController.CallStatic<AndroidJavaObject>("getMetrics");
float insets_bottom = metrics.Get<float>("insets_bottom");
float insets_top = metrics.Get<float>("insets_top");
float insets_left = metrics.Get<float>("insets_left");
float insets_right = metrics.Get<float>("insets_right");
float padding_bottom = metrics.Get<float>("padding_bottom");
float padding_top = metrics.Get<float>("padding_top");
float padding_left = metrics.Get<float>("padding_left");
float padding_right = metrics.Get<float>("padding_right");
this._viewMetrics = new viewMetrics {
insets_bottom = insets_bottom,
insets_left = insets_left,
insets_right = insets_right,
insets_top = insets_top,
padding_left = padding_left,
padding_top = padding_top,
padding_right = padding_right,
padding_bottom = padding_bottom
};
}
#elif UNITY_WEBGL
this._viewMetrics = new viewMetrics {
insets_bottom = 0,
insets_left = 0,
insets_right = 0,
insets_top = 0,
padding_left = 0,
padding_top = 0,
padding_right = 0,
padding_bottom = 0
};
#elif UNITY_IOS
viewMetrics metrics = IOSGetViewportPadding();
this._viewMetrics = metrics;
#else
_viewMetrics = new viewMetrics {
insets_bottom = 0,
insets_left = 0,
insets_right = 0,
insets_top = 0,
padding_left = 0,
padding_top = 0,
padding_right = 0,
padding_bottom = 0
};
#endif
return _viewMetrics.Value;
}
}
#if UNITY_ANDROID
static float AndroidDevicePixelRatio() {
using (
AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
) {
using (
AndroidJavaObject metricsInstance = new AndroidJavaObject("android.util.DisplayMetrics"),
activityInstance = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"),
windowManagerInstance = activityInstance.Call<AndroidJavaObject>("getWindowManager"),
displayInstance = windowManagerInstance.Call<AndroidJavaObject>("getDefaultDisplay")
) {
displayInstance.Call("getMetrics", metricsInstance);
return metricsInstance.Get<float>("density");
}
}
}
#endif
#if UNITY_WEBGL
[DllImport("__Internal")]
static extern float UIWidgetsWebGLDevicePixelRatio();
#endif
#if UNITY_IOS
[DllImport("__Internal")]
static extern float IOSDeviceScaleFactor();
[DllImport("__Internal")]
static extern viewMetrics IOSGetViewportPadding();
#endif
}
}