Dúvidas do tutorial de loading do Marcos
4 participantes
Página 1 de 1
Dúvidas do tutorial de loading do Marcos
Aqui está o código do seu Tutorial de Loading e o código do menu que estou usando.
O menu é desse asset aqui: Clique no nome Unity Samples: UI
Qualquer dúvida, me chame no inbox do Face, fica até melhor
Loading.cs
PanelManager.cs
O menu é desse asset aqui: Clique no nome Unity Samples: UI
Qualquer dúvida, me chame no inbox do Face, fica até melhor
Loading.cs
- Código:
using UnityEngine;
using System.Collections;
public class Loading : MonoBehaviour {
[Header("Nome da cena a ser carregada")]
public string cenaACarregar;
[Space(20)]
public Texture texturaFundos;
public Texture barraDeProgresso;
public string textoLoad = "Carregando:";
public Color corDoTexto = Color.red;
public Font Fonte;
[Space(20)]
[Range (0.5f,3.0f)]
public float tamanhoDoTexto = 1.5f;
[Range(1,10)]
public int larguraDaBarra = 8;
[Range(1,10)]
public int alturaDaBarra = 2;
[Range (-4.5f,4.5f)]
public float deslocarBarra = 4f;
[Range (-8f,4f)]
public float deslocarTextoX = 2;
[Range (-4.5f,4.5f)]
public float deslocarTextoY = 3;
private bool mostrarCarregamento = false;
private int progresso = 0;
void Update () {
//determina a forma de carregar
if (Input.GetKeyDown (KeyCode.Space)) {
StartCoroutine(CenaDeCarregamento(cenaACarregar));
}
}
IEnumerator CenaDeCarregamento (string cena){
mostrarCarregamento = true;
AsyncOperation carregamento = Application.LoadLevelAsync (cena);
while (!carregamento.isDone) {
progresso = (int)(carregamento.progress*100);
yield return null;
}
}
void OnGUI (){
if (mostrarCarregamento == true) {
GUI.contentColor = corDoTexto;
GUI.skin.font = Fonte;
GUI.skin.label.fontSize = (int)(Screen.height/50*tamanhoDoTexto);
//TEXTURA DE FUNDO
GUI.DrawTexture(new Rect(0,0, Screen.width, Screen.height), texturaFundos);
//TEXTURA DE CARREGAMENTO
float deslocXText = (Screen.height/10)*deslocarTextoX;
float deslocYText = (Screen.height/10)*deslocarTextoY;
GUI.Label (new Rect(Screen.width/2 + deslocXText, Screen.height/2 + deslocYText, Screen.width, Screen.height),textoLoad + " " + progresso + "%");
//BARRA DE PROGRESSO
float largura = Screen.width*(larguraDaBarra/10.0f);
float altura = Screen.height/50*alturaDaBarra;
float deslocYBar = (Screen.height/10)*deslocarBarra;
GUI.DrawTexture(new Rect(Screen.width/2 - largura/2, Screen.height/2 - (altura/2) + deslocYBar, largura*(progresso/100), altura), barraDeProgresso);
}
}
}
PanelManager.cs
- Código:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;
public class PanelManager : MonoBehaviour {
public Animator initiallyOpen;
private int m_OpenParameterId;
private Animator m_Open;
private GameObject m_PreviouslySelected;
const string k_OpenTransitionName = "Open";
const string k_ClosedStateName = "Closed";
public void OnEnable()
{
m_OpenParameterId = Animator.StringToHash (k_OpenTransitionName);
if (initiallyOpen == null)
return;
OpenPanel(initiallyOpen);
}
public void OpenPanel (Animator anim)
{
if (m_Open == anim)
return;
anim.gameObject.SetActive(true);
var newPreviouslySelected = EventSystem.current.currentSelectedGameObject;
anim.transform.SetAsLastSibling();
CloseCurrent();
m_PreviouslySelected = newPreviouslySelected;
m_Open = anim;
m_Open.SetBool(m_OpenParameterId, true);
GameObject go = FindFirstEnabledSelectable(anim.gameObject);
SetSelected(go);
}
static GameObject FindFirstEnabledSelectable (GameObject gameObject)
{
GameObject go = null;
var selectables = gameObject.GetComponentsInChildren<Selectable> (true);
foreach (var selectable in selectables) {
if (selectable.IsActive () && selectable.IsInteractable ()) {
go = selectable.gameObject;
break;
}
}
return go;
}
public void CloseCurrent()
{
if (m_Open == null)
return;
m_Open.SetBool(m_OpenParameterId, false);
SetSelected(m_PreviouslySelected);
StartCoroutine(DisablePanelDeleyed(m_Open));
m_Open = null;
}
IEnumerator DisablePanelDeleyed(Animator anim)
{
bool closedStateReached = false;
bool wantToClose = true;
while (!closedStateReached && wantToClose)
{
if (!anim.IsInTransition(0))
closedStateReached = anim.GetCurrentAnimatorStateInfo(0).IsName(k_ClosedStateName);
wantToClose = !anim.GetBool(m_OpenParameterId);
yield return new WaitForEndOfFrame();
}
if (wantToClose)
anim.gameObject.SetActive(false);
}
private void SetSelected(GameObject go)
{
EventSystem.current.SetSelectedGameObject(go);
var standaloneInputModule = EventSystem.current.currentInputModule as StandaloneInputModule;
if (standaloneInputModule != null && standaloneInputModule.inputMode == StandaloneInputModule.InputMode.Buttons)
return;
EventSystem.current.SetSelectedGameObject(null);
}
}
keivy349- Iniciante
- PONTOS : 3441
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
Utilize este script para o carregamento:
A textura de fundo você pode colocar manualmente utilizando UI system conforme é ensinado neste vídeo:
Quanto a chamar o load com o botão, basta jogar na variável do botão o objeto que tem este script de load e chamar a void "Carregar()"
Tudo demonstrado no vídeo sobre UI
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour {
[Header("Nome da cena a ser carregada")]
public string cenaACarregar;
[Space(20)]
public Texture barraDeProgresso;
public string textoLoad = "Carregando:";
public Color corDoTexto = Color.red;
public Font Fonte;
[Space(20)]
[Range (0.5f,3.0f)]
public float tamanhoDoTexto = 1.5f;
[Range(1,10)]
public int larguraDaBarra = 8;
[Range(1,10)]
public int alturaDaBarra = 2;
[Range (-4.5f,4.5f)]
public float deslocarBarra = 4f;
[Range (-8f,4f)]
public float deslocarTextoX = 2;
[Range (-4.5f,4.5f)]
public float deslocarTextoY = 3;
private bool mostrarCarregamento = false;
private int progresso = 0;
IEnumerator CenaDeCarregamento (string cena){
mostrarCarregamento = true;
AsyncOperation carregamento = SceneManager.LoadSceneAsync (cena);
while (!carregamento.isDone) {
progresso = (int)(carregamento.progress*100);
yield return null;
}
}
public void Carregar(){
StartCoroutine(CenaDeCarregamento(cenaACarregar));
}
void OnGUI (){
if (mostrarCarregamento == true) {
GUI.contentColor = corDoTexto;
GUI.skin.font = Fonte;
GUI.skin.label.fontSize = (int)(Screen.height/50*tamanhoDoTexto);
//TEXTURA DE CARREGAMENTO
float deslocXText = (Screen.height/10)*deslocarTextoX;
float deslocYText = (Screen.height/10)*deslocarTextoY;
GUI.Label (new Rect(Screen.width/2 + deslocXText, Screen.height/2 + deslocYText, Screen.width, Screen.height),textoLoad + " " + progresso + "%");
//BARRA DE PROGRESSO
float largura = Screen.width*(larguraDaBarra/10.0f);
float altura = Screen.height/50*alturaDaBarra;
float deslocYBar = (Screen.height/10)*deslocarBarra;
GUI.DrawTexture(new Rect(Screen.width/2 - largura/2, Screen.height/2 - (altura/2) + deslocYBar, largura*(progresso/100), altura), barraDeProgresso);
}
}
}
A textura de fundo você pode colocar manualmente utilizando UI system conforme é ensinado neste vídeo:
Quanto a chamar o load com o botão, basta jogar na variável do botão o objeto que tem este script de load e chamar a void "Carregar()"
Tudo demonstrado no vídeo sobre UI
Re: Dúvidas do tutorial de loading do Marcos
Esse esquema de carregamento pode melhorar o desempenho do jogo no caso de android?
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
Acho que sim, preciso testar ele.ismarspn escreveu:Esse esquema de carregamento pode melhorar o desempenho do jogo no caso de android?
keivy349- Iniciante
- PONTOS : 3441
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
Marcos meu projeto tá na Unity 4.6 e o código que vc me mandou deve ser para Unity 5
MarcosSchultz escreveu:Utilize este script para o carregamento:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour {
[Header("Nome da cena a ser carregada")]
public string cenaACarregar;
[Space(20)]
public Texture barraDeProgresso;
public string textoLoad = "Carregando:";
public Color corDoTexto = Color.red;
public Font Fonte;
[Space(20)]
[Range (0.5f,3.0f)]
public float tamanhoDoTexto = 1.5f;
[Range(1,10)]
public int larguraDaBarra = 8;
[Range(1,10)]
public int alturaDaBarra = 2;
[Range (-4.5f,4.5f)]
public float deslocarBarra = 4f;
[Range (-8f,4f)]
public float deslocarTextoX = 2;
[Range (-4.5f,4.5f)]
public float deslocarTextoY = 3;
private bool mostrarCarregamento = false;
private int progresso = 0;
IEnumerator CenaDeCarregamento (string cena){
mostrarCarregamento = true;
AsyncOperation carregamento = SceneManager.LoadSceneAsync (cena);
while (!carregamento.isDone) {
progresso = (int)(carregamento.progress*100);
yield return null;
}
}
public void Carregar(){
StartCoroutine(CenaDeCarregamento(cenaACarregar));
}
void OnGUI (){
if (mostrarCarregamento == true) {
GUI.contentColor = corDoTexto;
GUI.skin.font = Fonte;
GUI.skin.label.fontSize = (int)(Screen.height/50*tamanhoDoTexto);
//TEXTURA DE CARREGAMENTO
float deslocXText = (Screen.height/10)*deslocarTextoX;
float deslocYText = (Screen.height/10)*deslocarTextoY;
GUI.Label (new Rect(Screen.width/2 + deslocXText, Screen.height/2 + deslocYText, Screen.width, Screen.height),textoLoad + " " + progresso + "%");
//BARRA DE PROGRESSO
float largura = Screen.width*(larguraDaBarra/10.0f);
float altura = Screen.height/50*alturaDaBarra;
float deslocYBar = (Screen.height/10)*deslocarBarra;
GUI.DrawTexture(new Rect(Screen.width/2 - largura/2, Screen.height/2 - (altura/2) + deslocYBar, largura*(progresso/100), altura), barraDeProgresso);
}
}
}
A textura de fundo você pode colocar manualmente utilizando UI system conforme é ensinado neste vídeo:
Quanto a chamar o load com o botão, basta jogar na variável do botão o objeto que tem este script de load e chamar a void "Carregar()"
Tudo demonstrado no vídeo sobre UI
keivy349- Iniciante
- PONTOS : 3441
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
´keivy349 escreveu:Marcos meu projeto tá na Unity 4.6 e o código que vc me mandou deve ser para Unity 5
É para 5.3+. Mas pq não atualiza o seu?
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
RenanMSV escreveu:´keivy349 escreveu:Marcos meu projeto tá na Unity 4.6 e o código que vc me mandou deve ser para Unity 5
É para 5.3+. Mas pq não atualiza o seu?
Pq já tentei passar meu projeto para a nova Unity e não deu certo, nisso meu professor disse que já que eu comecei com essa Unity (4.6), seria melhor eu continuar com ela até termina o projeto. Daí quando for fazer outro projeto, eu usaria a nova Unity.
keivy349- Iniciante
- PONTOS : 3441
REPUTAÇÃO : 0
Respeito as regras :
Re: Dúvidas do tutorial de loading do Marcos
SCRIPT PARA UNITY 4:
====================================================
SCRIPT PARA UNITY 5:
===============================================
Ambos os scripts foram reformulados para utilizar a UI da unity
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Loading : MonoBehaviour {
[Header("Nome da cena a ser carregada")]
public string cenaACarregar;
[Space(20)]
public Image barraDeProgresso;
public Text textoProgresso;
private bool mostrarCarregamento = false;
private int progresso = 0;
private string textoOriginal;
void Start(){
textoOriginal = textoProgresso.text;
barraDeProgresso.type = Image.Type.Filled;
barraDeProgresso.fillMethod = Image.FillMethod.Horizontal;
barraDeProgresso.fillOrigin = (int)Image.OriginHorizontal.Left;
}
IEnumerator CenaDeCarregamento (string cena){
mostrarCarregamento = true;
AsyncOperation carregamento = Application.LoadLevelAsync (cena);
while (!carregamento.isDone) {
progresso = (int)(carregamento.progress*100);
yield return null;
}
}
public void Carregar(){
StartCoroutine(CenaDeCarregamento(cenaACarregar));
}
void Update(){
if (mostrarCarregamento == true) {
textoProgresso.text = textoOriginal + " " + progresso + "%";
barraDeProgresso.fillAmount = (progresso / 100.0f);
} else {
textoProgresso.text = " ";
barraDeProgresso.fillAmount = 0;
}
}
}
====================================================
SCRIPT PARA UNITY 5:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Loading : MonoBehaviour {
[Header("Nome da cena a ser carregada")]
public string cenaACarregar;
[Space(20)]
public Image barraDeProgresso;
public Text textoProgresso;
private bool mostrarCarregamento = false;
private int progresso = 0;
private string textoOriginal;
void Start(){
textoOriginal = textoProgresso.text;
barraDeProgresso.type = Image.Type.Filled;
barraDeProgresso.fillMethod = Image.FillMethod.Horizontal;
barraDeProgresso.fillOrigin = (int)Image.OriginHorizontal.Left;
}
IEnumerator CenaDeCarregamento (string cena){
mostrarCarregamento = true;
AsyncOperation carregamento = SceneManager.LoadSceneAsync (cena);
while (!carregamento.isDone) {
progresso = (int)(carregamento.progress*100);
yield return null;
}
}
public void Carregar(){
StartCoroutine(CenaDeCarregamento(cenaACarregar));
}
void Update(){
if (mostrarCarregamento == true) {
textoProgresso.text = textoOriginal + " " + progresso + "%";
barraDeProgresso.fillAmount = (progresso / 100.0f);
} else {
textoProgresso.text = " ";
barraDeProgresso.fillAmount = 0;
}
}
}
===============================================
Ambos os scripts foram reformulados para utilizar a UI da unity
Tópicos semelhantes
» Marcos, faz um tutorial de como ganhar dinheiro em um Jogo Unity para PC
» [TUTORIAL] Unity3d (Loading)
» [TUTORIAL] Como fazer uma Barra de Loading na Unity 5
» FÍSICA+ESTABILIDADE DO TUTORIAL DO MARCOS
» Problema com uma barra de loading
» [TUTORIAL] Unity3d (Loading)
» [TUTORIAL] Como fazer uma Barra de Loading na Unity 5
» FÍSICA+ESTABILIDADE DO TUTORIAL DO MARCOS
» Problema com uma barra de loading
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos