[RESOLVIDO] Ajuste de tela
2 participantes
Página 1 de 1
[RESOLVIDO] Ajuste de tela
Fiz um script que a função dele é manter o tamanho da proporções da tela em qualquer PC.
E isso deve ser com as configurações de câmera no "orthographic" e não "perspective".
Mas nada funcionou.
ja tentei aviar e desativar o Resizable Window.
já tentei vários métodos na internet.
E nada ele não muda o tamanho da tela não importa em que PC ele esteja.
então gostaria de saber se alguém sabe como resolver isso.
Lógica:
Em "Size of my pc" eu coloco o tamanho do meu pc.
Em "Desired Size" o tamanho que quero.
no "Current PC size" o tamanho do pc atual.
ai no "Difference" vai calcular qual é a diferença entre o tamanho do "Size of my pc" e do "Current PC size" e aplicar nas variáveis.
Ai na "If the Size is Bigger or Smaller than my pc" se a tela for maior do que a do "Size of my pc" a bool fica verdadeira. caso contrário fica como falso.
Ai vai fazer uma conta de mais ou menos com os valores do "Desired Size" e do "Difference". ai se bool for verdadeira a conta será uma conta de mais.
Se for falso será uma conta de menos.
Ai o resultado coloca no "Correct Size to Place".
E o que tiver no "Correct Size to Place" aplica o tamanho da tela do jogo.
E isso deve ser com as configurações de câmera no "orthographic" e não "perspective".
Mas nada funcionou.
ja tentei aviar e desativar o Resizable Window.
já tentei vários métodos na internet.
E nada ele não muda o tamanho da tela não importa em que PC ele esteja.
então gostaria de saber se alguém sabe como resolver isso.
- Código:
using UnityEngine;
public class ScreenAdjustment : MonoBehaviour
{
[Header("Size of my pc")]
[SerializeField] private float WidthOfMyPc = 1920;
[SerializeField] private float HeightOfMyPc = 1080f;
[Header("Desired Size")]
[SerializeField] private float WidthDesired = 1600;
[SerializeField] private float HeightDesired = 900;
[Header("Current PC size")]
[SerializeField] private float WidthCurrent;
[SerializeField] private float HeightCurrent;
[Header("Difference")]
[SerializeField] private float WidthDifference;
[SerializeField] private float HeightDifference;
[Header("Correct Size to Place")]
[SerializeField] private float WidthPlace;
[SerializeField] private float HeightPlace;
[Header("If the Size is Bigger or Smaller than my pc")]
[SerializeField] private bool IsBigger;
void Start()
{
InvokeRepeating("AdjustScreen", 0f, 0.5f);
}
private void AdjustScreen()
{
WidthCurrent = Screen.width;
HeightCurrent = Screen.height;
WidthDifference = WidthOfMyPc - WidthCurrent;
HeightDifference = HeightOfMyPc - HeightCurrent;
if (WidthCurrent > WidthOfMyPc || HeightCurrent > HeightOfMyPc)
{
IsBigger = true;
}
else
{
IsBigger = false;
}
if (IsBigger)
{
WidthPlace = WidthDesired + WidthDifference;
HeightPlace = HeightDesired + HeightDifference;
}
else
{
WidthPlace = WidthDesired - WidthDifference;
HeightPlace = HeightDesired - HeightDifference;
}
Camera.main.fieldOfView = Mathf.Atan(HeightPlace / WidthPlace) * Mathf.Rad2Deg * 0.5f;
}
}
Lógica:
Em "Size of my pc" eu coloco o tamanho do meu pc.
Em "Desired Size" o tamanho que quero.
no "Current PC size" o tamanho do pc atual.
ai no "Difference" vai calcular qual é a diferença entre o tamanho do "Size of my pc" e do "Current PC size" e aplicar nas variáveis.
Ai na "If the Size is Bigger or Smaller than my pc" se a tela for maior do que a do "Size of my pc" a bool fica verdadeira. caso contrário fica como falso.
Ai vai fazer uma conta de mais ou menos com os valores do "Desired Size" e do "Difference". ai se bool for verdadeira a conta será uma conta de mais.
Se for falso será uma conta de menos.
Ai o resultado coloca no "Correct Size to Place".
E o que tiver no "Correct Size to Place" aplica o tamanho da tela do jogo.
Re: [RESOLVIDO] Ajuste de tela
Otimizei o script e fiz algumas alterações, Vê se pode te ajudar:
- Removi as variáveis que não são mais necessárias, como "WidthOfMyPc" e "HeightOfMyPc", pois essas informações já são fornecidas pelo Screen.width e Screen.height.
- Usei uma variável Vector2 para armazenar o tamanho desejado da tela, ao invés de usar duas variáveis separadas.
- Removi as variáveis "WidthCurrent", "HeightCurrent", "WidthDifference" e "HeightDifference", pois elas não são mais necessárias.
- Usei uma variável booleana "adjustForBiggerScreens" para determinar se o script deve ajustar a tela quando ela for maior ou menor do que o tamanho desejado.
- Armazenei uma referência para a câmera principal no início do script, ao invés de buscá-la a cada chamada da função "AdjustScreen".
- Armazenei a proporção desejada no início do script, ao invés de calculá-la a cada chamada da função "AdjustScreen".
- Código:
using UnityEngine;
public class ScreenAdjustment : MonoBehaviour
{
[Header("Desired Size")]
[SerializeField] private Vector2 desiredSize = new Vector2(1600, 900);
[Header("If the Size is Bigger or Smaller than my pc")]
[SerializeField] private bool adjustForBiggerScreens = true;
private Camera mainCamera;
private float aspectRatio;
private void Start()
{
mainCamera = Camera.main;
aspectRatio = desiredSize.x / desiredSize.y;
InvokeRepeating("AdjustScreen", 0f, 0.5f);
}
private void AdjustScreen()
{
float currentAspectRatio = (float)Screen.width / Screen.height;
if ((adjustForBiggerScreens && currentAspectRatio > aspectRatio) || (!adjustForBiggerScreens && currentAspectRatio < aspectRatio))
{
mainCamera.fieldOfView = Mathf.Atan(currentAspectRatio / aspectRatio) * Mathf.Rad2Deg * 0.5f;
}
}
}
- Removi as variáveis que não são mais necessárias, como "WidthOfMyPc" e "HeightOfMyPc", pois essas informações já são fornecidas pelo Screen.width e Screen.height.
- Usei uma variável Vector2 para armazenar o tamanho desejado da tela, ao invés de usar duas variáveis separadas.
- Removi as variáveis "WidthCurrent", "HeightCurrent", "WidthDifference" e "HeightDifference", pois elas não são mais necessárias.
- Usei uma variável booleana "adjustForBiggerScreens" para determinar se o script deve ajustar a tela quando ela for maior ou menor do que o tamanho desejado.
- Armazenei uma referência para a câmera principal no início do script, ao invés de buscá-la a cada chamada da função "AdjustScreen".
- Armazenei a proporção desejada no início do script, ao invés de calculá-la a cada chamada da função "AdjustScreen".
Magnatah- Instrutor
- PONTOS : 3502
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: [RESOLVIDO] Ajuste de tela
Sinto muito cara.
Mas não deu muito certo.
A ideia do script é que ele mantenha o tamanho da janela do jogo proposicional em todos os pc e não so no meu pc.
Por isso tinha aquelas contas todas antes.
Mas não deu muito certo.
A ideia do script é que ele mantenha o tamanho da janela do jogo proposicional em todos os pc e não so no meu pc.
Por isso tinha aquelas contas todas antes.
Re: [RESOLVIDO] Ajuste de tela
Bem consigo arrumar para quando ele esta em um monitor com uma tela menor doque ado meu pc.
Mas quando esta maior ele não funsiona.
Mas quando esta maior ele não funsiona.
- Código:
using UnityEngine;
public class ScreenAdjustment : MonoBehaviour
{
[Header("Size of my pc")]
[SerializeField] private float WidthOfMyPc = 1920; // The width of my PC screen.
[SerializeField] private float HeightOfMyPc = 1080f; // The height of my PC screen.
[Header("Desired Size")]
[SerializeField] private float WidthDesired = 1600; // The desired width of the game screen.
[SerializeField] private float HeightDesired = 900; // The desired height of the game screen.
[Header("Current PC size")]
[SerializeField] private float WidthCurrent; // The current width of the game screen.
[SerializeField] private float HeightCurrent; // The current height of the game screen.
[Header("Difference")]
[SerializeField] private float WidthDifference; // The difference between the desired width and the current width.
[SerializeField] private float HeightDifference; // The difference between the desired height and the current height.
[Header("Correct Size to Place")]
[SerializeField] private float WidthPlace; // The correct width to place the game screen.
[SerializeField] private float HeightPlace; // The correct height to place the game screen.
[Header("If the Size is Bigger or Smaller than my pc")]
[SerializeField] private bool IsBigger; // A flag to check whether the game screen is bigger or smaller than my PC screen.
/*
void Start()
{
// Call the AdjustScreen method every 0.5 seconds.
InvokeRepeating("AdjustScreen", 0f, 0.5f);
}*/
void Start()
/*private void AdjustScreen()*/
{
// Get the current width of the game screen.
WidthCurrent = Screen.width;
// Get the current height of the game screen.
HeightCurrent = Screen.height;
// Calculate the difference between the desired width and the current width.
WidthDifference = WidthOfMyPc - WidthCurrent;
// Calculate the difference between the desired height and the current height.
HeightDifference = HeightOfMyPc - HeightCurrent;
if (WidthCurrent > WidthOfMyPc || HeightCurrent > HeightOfMyPc)
{
// If the game screen is bigger than my PC screen, set the flag to true.
IsBigger = true;
}
else
{
// If the game screen is smaller than my PC screen, set the flag to false.
IsBigger = false;
}
if (IsBigger)
{
// Calculate the correct width to place the game screen if it's bigger than my PC screen.
WidthPlace = WidthDesired + WidthDifference;
// Calculate the correct height to place the game screen if it's bigger than my PC screen.
HeightPlace = HeightDesired + HeightDifference;
}
else
{
// Calculate the correct width to place the game screen if it's smaller than my PC screen.
WidthPlace = WidthDesired - WidthDifference;
// Calculate the correct height to place the game screen if it's smaller than my PC screen.
HeightPlace = HeightDesired - HeightDifference;
}
if (IsBigger)
{
if (WidthCurrent > WidthDesired || HeightCurrent > HeightDesired)
{
// Set the game screen to the correct size if the current size is larger than the desired size.
Screen.SetResolution((int)WidthPlace, (int)HeightPlace, Screen.fullScreen);
}
}
else
{
if (WidthCurrent < WidthDesired || HeightCurrent < HeightDesired)
{
// Set the game screen to the correct size if the current size is smaller than the desired size.
Screen.SetResolution((int)WidthPlace, (int)HeightPlace, Screen.fullScreen);
}
}
}
}
Re: [RESOLVIDO] Ajuste de tela
Conseguir arrumar o script.
- Código:
using UnityEngine;
public class ScreenAdjustment : MonoBehaviour
{
[Header("Size of my pc")]
[SerializeField] private float WidthOfMyPc = 1920; // The width of my PC screen.
[SerializeField] private float HeightOfMyPc = 1080f; // The height of my PC screen.
[Header("Desired Size")]
[SerializeField] private float WidthDesired = 1600; // The desired width of the game screen.
[SerializeField] private float HeightDesired = 900; // The desired height of the game screen.
[Header("Current PC size")]
[SerializeField] private float WidthCurrent; // The current width of the game screen.
[SerializeField] private float HeightCurrent; // The current height of the game screen.
[Header("Difference")]
[SerializeField] private float WidthDifference; // The difference between the desired width and the current width.
[SerializeField] private float HeightDifference; // The difference between the desired height and the current height.
[Header("Correct Size to Place")]
[SerializeField] private float WidthPlace; // The correct width to place the game screen.
[SerializeField] private float HeightPlace; // The correct height to place the game screen.
[Header("If the Size is Bigger or Smaller than my pc")]
[SerializeField] private bool IsBigger; // A flag to check whether the game screen is bigger or smaller than my PC screen.
[Header("Has Already been Changed?")]
[SerializeField] private bool IsChanged; // A flag to check if the game screen has already been changed in the PC sky.
[SerializeField] private string SaveName = "SizeIsChanged"; // PlayerPrefs Save Name.
void Start()
{
// Load the value of SaveName from player prefs
IsChanged = PlayerPrefs.GetInt(SaveName, 0) == 1;
// Get the current width of the PC screen.
WidthCurrent = Screen.currentResolution.width;
// Get the current height of the PC screen.
HeightCurrent = Screen.currentResolution.height;
// Calculate the difference between the desired width and the current width.
WidthDifference = WidthOfMyPc - WidthCurrent;
// Calculate the difference between the desired height and the current height.
HeightDifference = HeightOfMyPc - HeightCurrent;
if (WidthCurrent > WidthOfMyPc || HeightCurrent > HeightOfMyPc)
{
// If the game screen is bigger than my PC screen, set the flag to true.
IsBigger = true;
}
else
{
// If the game screen is smaller than my PC screen, set the flag to false.
IsBigger = false;
}
if (IsBigger)
{
// Calculate the correct width to place the game screen if it's bigger than my PC screen.
WidthPlace = WidthDesired - WidthDifference;
// Calculate the correct height to place the game screen if it's bigger than my PC screen.
HeightPlace = HeightDesired - HeightDifference;
}
else
{
// Calculate the correct width to place the game screen if it's smaller than my PC screen.
WidthPlace = WidthDesired - WidthDifference;
// Calculate the correct height to place the game screen if it's smaller than my PC screen.
HeightPlace = HeightDesired - HeightDifference;
}
// Check if the SaveName flag has been saved before
if (PlayerPrefs.HasKey(SaveName))
{
// If saved, get the value of the flag
IsChanged = PlayerPrefs.GetInt(SaveName) == 1 ? true : false;
}
else
{
// If not saved, set the flag to false
IsChanged = false;
}
if (IsBigger)
{
if (IsChanged == false)
{
// Set the game screen to the correct size if the current size is larger than the desired size.
Screen.SetResolution((int)WidthPlace, (int)HeightPlace, Screen.fullScreen);
// Save the flag as true
PlayerPrefs.SetInt(SaveName, 1);
}
}
else
{
if (IsChanged == false)
{
// Set the game screen to the correct size if the current size is smaller than the desired size.
Screen.SetResolution((int)WidthPlace, (int)HeightPlace, Screen.fullScreen);
// Save the flag as true
PlayerPrefs.SetInt(SaveName, 1);
}
}
}
}
Tópicos semelhantes
» ajuste de tela automático de celular
» [RESOLVIDO] Ajuste em sistema de pontuação!
» [RESOLVIDO] Tela (Screen) Android e Joystick adaptável à tela !
» [RESOLVIDO] mensagem na tela
» [RESOLVIDO] Tela de "Carregando Jogo"
» [RESOLVIDO] Ajuste em sistema de pontuação!
» [RESOLVIDO] Tela (Screen) Android e Joystick adaptável à tela !
» [RESOLVIDO] mensagem na tela
» [RESOLVIDO] Tela de "Carregando Jogo"
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos