Skip to content

Commit 882aa15

Browse files
committed
auto resolution adapting
1 parent 322f96d commit 882aa15

File tree

7 files changed

+511
-28
lines changed

7 files changed

+511
-28
lines changed

Assets/LS/DPIManager.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using UnityEngine;
2+
3+
public class DPIManager : MonoBehaviour
4+
{
5+
[Header("Riferimenti Base")]
6+
public float baseDPI = 96f; // DPI di riferimento (Windows standard)
7+
public Vector2 baseResolution = new Vector2(1920f, 1080f); // Risoluzione di riferimento
8+
9+
[Header("Debug Info")]
10+
public float currentDPI;
11+
public float dpiScale;
12+
public Vector2 currentResolution;
13+
14+
private static DPIManager instance;
15+
public static DPIManager Instance { get { return instance; } }
16+
17+
void Awake()
18+
{
19+
if (instance == null)
20+
{
21+
instance = this;
22+
DontDestroyOnLoad(gameObject);
23+
InitializeDPI();
24+
}
25+
else
26+
{
27+
Destroy(gameObject);
28+
}
29+
}
30+
31+
void InitializeDPI()
32+
{
33+
// Ottieni DPI corrente
34+
currentDPI = Screen.dpi;
35+
36+
// Se DPI non è disponibile, usa valore di default
37+
if (currentDPI <= 0)
38+
{
39+
currentDPI = baseDPI;
40+
}
41+
42+
// Calcola fattore di scala DPI
43+
dpiScale = currentDPI / baseDPI;
44+
45+
// Ottieni risoluzione corrente
46+
currentResolution = new Vector2(Screen.width, Screen.height);
47+
48+
Debug.Log($"DPI Manager Initialized:");
49+
Debug.Log($"- Current DPI: {currentDPI}");
50+
Debug.Log($"- DPI Scale: {dpiScale}");
51+
Debug.Log($"- Current Resolution: {currentResolution}");
52+
Debug.Log($"- Base Resolution: {baseResolution}");
53+
}
54+
55+
/// <summary>
56+
/// Restituisce il fattore di scala corretto per gli oggetti 3D
57+
/// basato su DPI e risoluzione
58+
/// </summary>
59+
public float GetScaleFactor()
60+
{
61+
// Calcola il fattore di scala basato sulla risoluzione
62+
float resolutionScale = Mathf.Min(
63+
currentResolution.x / baseResolution.x,
64+
currentResolution.y / baseResolution.y
65+
);
66+
67+
// Combina DPI e risoluzione per un fattore di scala finale
68+
float finalScale = (dpiScale + resolutionScale) / 2f;
69+
70+
// Limita il range per evitare scale estreme
71+
return Mathf.Clamp(finalScale, 0.5f, 2.0f);
72+
}
73+
74+
/// <summary>
75+
/// Restituisce il fattore di scala normalizzato (per debug)
76+
/// </summary>
77+
public float GetNormalizedScaleFactor()
78+
{
79+
return GetScaleFactor() / 1f; // Base scale factor = 1
80+
}
81+
}

Assets/LS/LightstreamerCubeAsset.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,37 @@ public class LightstreamerCubeAsset : LightstreamerAsset
99

1010
public Transform stockCube;
1111

12-
public float refscale = 0.3f; // quanto incide la % sull’altezza
12+
public float refscale = 0.3f; // quanto incide la % sull'altezza
13+
14+
[Header("Adattamento DPI/Risoluzione")]
15+
public bool useDPIScaling = true; // abilita scalatura automatica
16+
public float manualScaleFactor = 1f; // fattore di scala manuale (se DPI disabilitato)
1317

1418
public float baselineY = 0f; // la linea base comune (es. piano di riferimento)
1519

1620
private bool blocK_color = false;
1721

1822
void SetHeight(Transform cube, float percentChange)
1923
{
20-
float newHeight = Mathf.Max(0.1f, Mathf.Abs(percentChange) * refscale);
24+
// Calcola il fattore di scala effettivo
25+
float effectiveScale = refscale;
26+
27+
if (useDPIScaling && DPIManager.Instance != null)
28+
{
29+
float dpiScale = DPIManager.Instance.GetScaleFactor();
30+
effectiveScale = refscale * dpiScale;
31+
32+
Debug.Log($"DPI Scaling - Original: {refscale}, DPI Factor: {dpiScale}, Effective: {effectiveScale}");
33+
}
34+
else if (!useDPIScaling)
35+
{
36+
effectiveScale = refscale * manualScaleFactor;
37+
Debug.Log($"Manual Scaling - Original: {refscale}, Manual Factor: {manualScaleFactor}, Effective: {effectiveScale}");
38+
}
39+
40+
float newHeight = Mathf.Max(0.1f, Mathf.Abs(percentChange) * effectiveScale);
2141

22-
Debug.Log("Setting height to: " + newHeight + " (change: " + percentChange + ", scaleFactor: " + refscale + ")");
42+
Debug.Log("Setting height to: " + newHeight + " (change: " + percentChange + ", scaleFactor: " + effectiveScale + ")");
2343

2444
// Aggiorna scala
2545
Vector3 scale = cube.localScale;

Assets/LS/ResolutionDebugUI.cs

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
using UnityEngine;
2+
using UnityEngine.UI;
3+
4+
/// <summary>
5+
/// Script di debug per visualizzare informazioni sulla risoluzione e DPI
6+
/// Utile per diagnosticare problemi di scalatura su diversi PC
7+
/// </summary>
8+
public class ResolutionDebugUI : MonoBehaviour
9+
{
10+
[Header("UI Elements")]
11+
public Text debugText;
12+
public Canvas debugCanvas;
13+
14+
[Header("Settings")]
15+
public bool showDebugInfo = true;
16+
public KeyCode toggleKey = KeyCode.F1;
17+
18+
private string debugInfo = "";
19+
20+
void Start()
21+
{
22+
if (debugCanvas == null)
23+
{
24+
CreateDebugUI();
25+
}
26+
27+
if (showDebugInfo)
28+
{
29+
debugCanvas.enabled = true;
30+
}
31+
}
32+
33+
void CreateDebugUI()
34+
{
35+
// Crea Canvas per debug
36+
GameObject canvasGO = new GameObject("Debug Canvas");
37+
debugCanvas = canvasGO.AddComponent<Canvas>();
38+
debugCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
39+
debugCanvas.sortingOrder = 999;
40+
41+
CanvasScaler scaler = canvasGO.AddComponent<CanvasScaler>();
42+
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
43+
scaler.referenceResolution = new Vector2(1920, 1080);
44+
45+
canvasGO.AddComponent<GraphicRaycaster>();
46+
47+
// Crea testo debug
48+
GameObject textGO = new GameObject("Debug Text");
49+
textGO.transform.SetParent(debugCanvas.transform, false);
50+
51+
debugText = textGO.AddComponent<Text>();
52+
debugText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
53+
debugText.fontSize = 14;
54+
debugText.color = Color.white;
55+
56+
// Posiziona il testo in alto a sinistra
57+
RectTransform rectTransform = debugText.GetComponent<RectTransform>();
58+
rectTransform.anchorMin = new Vector2(0, 1);
59+
rectTransform.anchorMax = new Vector2(0, 1);
60+
rectTransform.pivot = new Vector2(0, 1);
61+
rectTransform.anchoredPosition = new Vector2(10, -10);
62+
rectTransform.sizeDelta = new Vector2(400, 300);
63+
64+
// Aggiungi background
65+
GameObject bgGO = new GameObject("Background");
66+
bgGO.transform.SetParent(debugText.transform, false);
67+
bgGO.transform.SetAsFirstSibling();
68+
69+
Image bg = bgGO.AddComponent<Image>();
70+
bg.color = new Color(0, 0, 0, 0.7f);
71+
72+
RectTransform bgRect = bg.GetComponent<RectTransform>();
73+
bgRect.anchorMin = Vector2.zero;
74+
bgRect.anchorMax = Vector2.one;
75+
bgRect.offsetMin = new Vector2(-5, -5);
76+
bgRect.offsetMax = new Vector2(5, 5);
77+
78+
DontDestroyOnLoad(canvasGO);
79+
}
80+
81+
void Update()
82+
{
83+
if (Input.GetKeyDown(toggleKey))
84+
{
85+
showDebugInfo = !showDebugInfo;
86+
debugCanvas.enabled = showDebugInfo;
87+
}
88+
89+
if (showDebugInfo && debugText != null)
90+
{
91+
UpdateDebugInfo();
92+
debugText.text = debugInfo;
93+
}
94+
}
95+
96+
void UpdateDebugInfo()
97+
{
98+
debugInfo = "=== RESOLUTION DEBUG INFO ===\n";
99+
debugInfo += $"Screen Resolution: {Screen.width}x{Screen.height}\n";
100+
debugInfo += $"DPI: {Screen.dpi}\n";
101+
debugInfo += $"Fullscreen Mode: {Screen.fullScreenMode}\n";
102+
debugInfo += $"Native Resolution: {Display.main.systemWidth}x{Display.main.systemHeight}\n";
103+
debugInfo += $"Refresh Rate: {Screen.currentResolution.refreshRate}Hz\n";
104+
105+
// Info DPI Manager se disponibile
106+
if (DPIManager.Instance != null)
107+
{
108+
debugInfo += "\n=== DPI MANAGER ===\n";
109+
debugInfo += $"Current DPI: {DPIManager.Instance.currentDPI}\n";
110+
debugInfo += $"DPI Scale: {DPIManager.Instance.dpiScale:F2}\n";
111+
debugInfo += $"Scale Factor: {DPIManager.Instance.GetScaleFactor():F2}\n";
112+
}
113+
114+
// Info Resolution Manager se disponibile
115+
ResolutionManager resManager = FindObjectOfType<ResolutionManager>();
116+
if (resManager != null)
117+
{
118+
debugInfo += "\n=== RESOLUTION MANAGER ===\n";
119+
debugInfo += $"Current: {resManager.currentResolution}\n";
120+
debugInfo += $"Native: {resManager.nativeResolution}\n";
121+
debugInfo += $"Aspect Ratio: {resManager.aspectRatio:F2}\n";
122+
}
123+
124+
// Info Canvas se disponibile
125+
Canvas[] canvases = FindObjectsOfType<Canvas>();
126+
if (canvases.Length > 0)
127+
{
128+
debugInfo += "\n=== CANVAS INFO ===\n";
129+
debugInfo += $"Number of Canvases: {canvases.Length}\n";
130+
131+
foreach (Canvas canvas in canvases)
132+
{
133+
if (canvas.name != "Debug Canvas")
134+
{
135+
CanvasScaler scaler = canvas.GetComponent<CanvasScaler>();
136+
if (scaler != null)
137+
{
138+
debugInfo += $"{canvas.name}: {scaler.uiScaleMode}, Ref: {scaler.referenceResolution}\n";
139+
}
140+
}
141+
}
142+
}
143+
144+
debugInfo += $"\n=== SYSTEM INFO ===\n";
145+
debugInfo += $"OS: {SystemInfo.operatingSystem}\n";
146+
debugInfo += $"GPU: {SystemInfo.graphicsDeviceName}\n";
147+
debugInfo += $"GPU Memory: {SystemInfo.graphicsMemorySize}MB\n";
148+
149+
debugInfo += $"\n=== CONTROLS ===\n";
150+
debugInfo += $"Press {toggleKey} to toggle this debug info\n";
151+
debugInfo += $"Press Alt+Enter to toggle fullscreen\n";
152+
}
153+
}

0 commit comments

Comments
 (0)