Duvida Tamanho do Mapa unity
4 participantes
Página 1 de 1
Duvida Tamanho do Mapa unity
Boas Galera. So inciante na area de programação de gamer, vo mi foca em 2D e 2.5D
Minha Duvida e Seguinte. Quero monta mapa Gigante de construção, mais li um poco falarão que não e muito bom por causa do renderização algo a sim.
Queria saber se for isso, Quero saber tamanho possível e se posso fazer em vários maps. saindo de 1 entrando em otro como base da ideia albion online + em 2D estilho tibia
Minha Duvida e Seguinte. Quero monta mapa Gigante de construção, mais li um poco falarão que não e muito bom por causa do renderização algo a sim.
Queria saber se for isso, Quero saber tamanho possível e se posso fazer em vários maps. saindo de 1 entrando em otro como base da ideia albion online + em 2D estilho tibia
billybmx- Membro
- PONTOS : 1989
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Duvida Tamanho do Mapa unity
Exatamente, nada lhe impede de fazer um cenário grande, mas a performance do seu game será afetada, devido à renderização e uma Quantidade significativa de objetos na cena funcionando ao mesmo tempo.
Na verdade não existe um tamanho padrão para cenários, o que existe é o bom senso, e isso vai depender da quantidade de objetos que você deseja renderizar e a quantidade de "coisas" ativas e funcionando na cena.
Você pode criar a sua cena pequena e dividi-la em várias partes, fazendo com que você vá de uma cena para outra, como você mesmo disse, ou pode sim criar uma cena relativamente grande, mas usar técnicas para seu game não ficar pesado.
Algumas técnicas são:
1. Occlusion Culling: Essa funcionalidade da Unity permite que apenas objetos perto da câmera sejam renderizados, os que estiverem longe da mesma, não são.
Mais informações: https://docs.unity3d.com/Manual/OcclusionCulling.html
2. Se tiver uma grande quantidade de objetos ativos no mapa e eles só forem necessário quando a câmera os mostrar, você pode deixa-los desativados e só os ativar quando a câmera os renderizar:
https://answers.unity.com/questions/27558/activate-object-only-if-camera-views-it.html
3. Na hora de escrever os códigos:
* Tente não colocar tudo no Update, evite o máximo essa medida, crie variáveis booleanas para controlar o que deve ser ativado no Update ou não. Isso porque o Update é chamado muitas vezes na cena, se você tiver vários objetos num mapa grande que usam o Update e dentro dele houver comandos complexos, a performance do seu jogo pode ser afetada.
* Sempre use o FixedUpdate para cálculos muito complexos ou se precisar manipular a física do jogo.
* Tente evitar usar o GetComponent e derivados dentro do Update ou FixedUpdate, prefira usá-lo uma única vez no Start ou Awake e guardar a referência dentro de uma variável, por exemplo:
* Evite usar o Find e derivados no Update e FixedUpdate, assim como o GetComponent, opte por armazenar as informações necessárias desses métodos dentro do Start ou Awake.
Caso os objetos só possam ser referenciados em tempo de execução e terão de ir no Update para fazerem determinada ação, opte pelo uso de eventos:
https://unity3d.com/pt/learn/tutorials/topics/scripting/events
* Evite ao máximo usar Raycast e afins para colisão, isso é responsabilidade dos Colliders e Triggers.
* Nunca use o instantiate sem um número concreto de chamadas, o ato de instâncias diversos objetos em cena de uma vez pode pesar na performance do jogo.
* Ainda falando em instância dinâmica, quando o objeto não for mais utilizado na cena, destrua-o imediatamente.
Outra boa prática relacionada a isso é reaproveitando objetos já instanciados ao invés de instanciar um novo.
4. Evite ao máximo usar as gramas do terreno da Unity, isso pesa mais que 10 mamutes juntos para a performance do game.
Bem, essas são algumas dicas para não causar lag num cenário grande (ou até mesmo em cenários menores) basta usá-las com sabedoria.
Não listei todas as dicas aqui oq são muitas, então de acordo com a sua necessidade você vai descobrindo mais.
Na verdade não existe um tamanho padrão para cenários, o que existe é o bom senso, e isso vai depender da quantidade de objetos que você deseja renderizar e a quantidade de "coisas" ativas e funcionando na cena.
Você pode criar a sua cena pequena e dividi-la em várias partes, fazendo com que você vá de uma cena para outra, como você mesmo disse, ou pode sim criar uma cena relativamente grande, mas usar técnicas para seu game não ficar pesado.
Algumas técnicas são:
1. Occlusion Culling: Essa funcionalidade da Unity permite que apenas objetos perto da câmera sejam renderizados, os que estiverem longe da mesma, não são.
Mais informações: https://docs.unity3d.com/Manual/OcclusionCulling.html
2. Se tiver uma grande quantidade de objetos ativos no mapa e eles só forem necessário quando a câmera os mostrar, você pode deixa-los desativados e só os ativar quando a câmera os renderizar:
https://answers.unity.com/questions/27558/activate-object-only-if-camera-views-it.html
3. Na hora de escrever os códigos:
* Tente não colocar tudo no Update, evite o máximo essa medida, crie variáveis booleanas para controlar o que deve ser ativado no Update ou não. Isso porque o Update é chamado muitas vezes na cena, se você tiver vários objetos num mapa grande que usam o Update e dentro dele houver comandos complexos, a performance do seu jogo pode ser afetada.
* Sempre use o FixedUpdate para cálculos muito complexos ou se precisar manipular a física do jogo.
* Tente evitar usar o GetComponent e derivados dentro do Update ou FixedUpdate, prefira usá-lo uma única vez no Start ou Awake e guardar a referência dentro de uma variável, por exemplo:
- Código:
public class SomeExample : Monobehaviour {
private Collider2D _collider;
void Start(){
_collider = GetComponent<Collider2D>();
}
}
* Evite usar o Find e derivados no Update e FixedUpdate, assim como o GetComponent, opte por armazenar as informações necessárias desses métodos dentro do Start ou Awake.
Caso os objetos só possam ser referenciados em tempo de execução e terão de ir no Update para fazerem determinada ação, opte pelo uso de eventos:
https://unity3d.com/pt/learn/tutorials/topics/scripting/events
* Evite ao máximo usar Raycast e afins para colisão, isso é responsabilidade dos Colliders e Triggers.
* Nunca use o instantiate sem um número concreto de chamadas, o ato de instâncias diversos objetos em cena de uma vez pode pesar na performance do jogo.
* Ainda falando em instância dinâmica, quando o objeto não for mais utilizado na cena, destrua-o imediatamente.
Outra boa prática relacionada a isso é reaproveitando objetos já instanciados ao invés de instanciar um novo.
4. Evite ao máximo usar as gramas do terreno da Unity, isso pesa mais que 10 mamutes juntos para a performance do game.
Bem, essas são algumas dicas para não causar lag num cenário grande (ou até mesmo em cenários menores) basta usá-las com sabedoria.
Não listei todas as dicas aqui oq são muitas, então de acordo com a sua necessidade você vai descobrindo mais.
Re: Duvida Tamanho do Mapa unity
MayLeone escreveu:Exatamente, nada lhe impede de fazer um cenário grande, mas a performance do seu game será afetada, devido à renderização e uma Quantidade significativa de objetos na cena funcionando ao mesmo tempo.
Na verdade não existe um tamanho padrão para cenários, o que existe é o bom senso, e isso vai depender da quantidade de objetos que você deseja renderizar e a quantidade de "coisas" ativas e funcionando na cena.
Você pode criar a sua cena pequena e dividi-la em várias partes, fazendo com que você vá de uma cena para outra, como você mesmo disse, ou pode sim criar uma cena relativamente grande, mas usar técnicas para seu game não ficar pesado.
Algumas técnicas são:
1. Occlusion Culling: Essa funcionalidade da Unity permite que apenas objetos perto da câmera sejam renderizados, os que estiverem longe da mesma, não são.
Mais informações: https://docs.unity3d.com/Manual/OcclusionCulling.html
2. Se tiver uma grande quantidade de objetos ativos no mapa e eles só forem necessário quando a câmera os mostrar, você pode deixa-los desativados e só os ativar quando a câmera os renderizar:
https://answers.unity.com/questions/27558/activate-object-only-if-camera-views-it.html
3. Na hora de escrever os códigos:
* Tente não colocar tudo no Update, evite o máximo essa medida, crie variáveis booleanas para controlar o que deve ser ativado no Update ou não. Isso porque o Update é chamado muitas vezes na cena, se você tiver vários objetos num mapa grande que usam o Update e dentro dele houver comandos complexos, a performance do seu jogo pode ser afetada.
* Sempre use o FixedUpdate para cálculos muito complexos ou se precisar manipular a física do jogo.
* Tente evitar usar o GetComponent e derivados dentro do Update ou FixedUpdate, prefira usá-lo uma única vez no Start ou Awake e guardar a referência dentro de uma variável, por exemplo:
- Código:
public class SomeExample : Monobehaviour {
private Collider2D _collider;
void Start(){
_collider = GetComponent<Collider2D>();
}
}
* Evite usar o Find e derivados no Update e FixedUpdate, assim como o GetComponent, opte por armazenar as informações necessárias desses métodos dentro do Start ou Awake.
Caso os objetos só possam ser referenciados em tempo de execução e terão de ir no Update para fazerem determinada ação, opte pelo uso de eventos:
https://unity3d.com/pt/learn/tutorials/topics/scripting/events
* Evite ao máximo usar Raycast e afins para colisão, isso é responsabilidade dos Colliders e Triggers.
* Nunca use o instantiate sem um número concreto de chamadas, o ato de instâncias diversos objetos em cena de uma vez pode pesar na performance do jogo.
* Ainda falando em instância dinâmica, quando o objeto não for mais utilizado na cena, destrua-o imediatamente.
Outra boa prática relacionada a isso é reaproveitando objetos já instanciados ao invés de instanciar um novo.
4. Evite ao máximo usar as gramas do terreno da Unity, isso pesa mais que 10 mamutes juntos para a performance do game.
Bem, essas são algumas dicas para não causar lag num cenário grande (ou até mesmo em cenários menores) basta usá-las com sabedoria.
Não listei todas as dicas aqui oq são muitas, então de acordo com a sua necessidade você vai descobrindo mais.
Isso mesmo queria saber. Então vou optar por fazer varias áreas com tamanho de acordo, e fazer portal de 1 pra outra pra reduzir renderização.
como meu game vai ser estilo tibia, uns ligamento 1 pro outro pode reduze renderização.
Como vó roda Pc e androide fiquei poco receoso sobre androide fica pesado.
to tentando fazer um que não consuma muita batera dele. e rode em qualquer celular, ja no pc nem preciso + conseguindo fazer pra um o outro acompanha kkk.
billybmx- Membro
- PONTOS : 1989
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Duvida Tamanho do Mapa unity
Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
Re: Duvida Tamanho do Mapa unity
MarcosSchultz escreveu:Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
A Unreal ja resolveu esse problema marcos? do floating point?
e tipo em um mapa grande mesmo pra um mmorpg3d mundo aberto pra tentar não ocorrer esse floating point não tem como fazer a transição de cenas continuas? tipo pro player nao saber que foi teleportado pra outra cena, atravessando um portal "que ele tambem nao vai saber que é um" ou sla alguma ideia?
nibirou- MembroAvançado
- PONTOS : 2074
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: Duvida Tamanho do Mapa unity
Até onde eu sei, a Unreal sofre do mesmo problema.nibirou escreveu:MarcosSchultz escreveu:Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
A Unreal ja resolveu esse problema marcos? do floating point?
e tipo em um mapa grande mesmo pra um mmorpg3d mundo aberto pra tentar não ocorrer esse floating point não tem como fazer a transição de cenas continuas? tipo pro player nao saber que foi teleportado pra outra cena, atravessando um portal "que ele tambem nao vai saber que é um" ou sla alguma ideia?
Para você conseguir trabalhar longe da origem, basta deslocar a origem, e isto é possível usando este recurso: https://wiki.unity3d.com/index.php/Floating_Origin
O problema é que para deslocar a origem do seu mapa para a sua posição atual, é necessário atualizar o Transform de TODOS os objetos da cena, e isto é extremamente pesado, além de que no momento do deslocamento, pode haver instabilidade na simulação da física, então é necessário "pausar" os rigidbody, deslocar a origem, e depois reinserir os parâmetros de velocidade nele.
Todo esse processo permite trabalhar longe da origem, mas, toda vez que a origem é deslocada, haverá uma "travada" no jogo, tipo um gargalo.
Re: Duvida Tamanho do Mapa unity
MarcosSchultz escreveu:Até onde eu sei, a Unreal sofre do mesmo problema.nibirou escreveu:MarcosSchultz escreveu:Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
A Unreal ja resolveu esse problema marcos? do floating point?
e tipo em um mapa grande mesmo pra um mmorpg3d mundo aberto pra tentar não ocorrer esse floating point não tem como fazer a transição de cenas continuas? tipo pro player nao saber que foi teleportado pra outra cena, atravessando um portal "que ele tambem nao vai saber que é um" ou sla alguma ideia?
Para você conseguir trabalhar longe da origem, basta deslocar a origem, e isto é possível usando este recurso: https://wiki.unity3d.com/index.php/Floating_Origin
O problema é que para deslocar a origem do seu mapa para a sua posição atual, é necessário atualizar o Transform de TODOS os objetos da cena, e isto é extremamente pesado, além de que no momento do deslocamento, pode haver instabilidade na simulação da física, então é necessário "pausar" os rigidbody, deslocar a origem, e depois reinserir os parâmetros de velocidade nele.
Todo esse processo permite trabalhar longe da origem, mas, toda vez que a origem é deslocada, haverá uma "travada" no jogo, tipo um gargalo.
Quanto problema mds, não existe alguma engine que ja resolveu esse problema do floating point? espero que a unity resolva isso nas próximas versões
nibirou- MembroAvançado
- PONTOS : 2074
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: Duvida Tamanho do Mapa unity
nibirou escreveu:MarcosSchultz escreveu:Até onde eu sei, a Unreal sofre do mesmo problema.nibirou escreveu:MarcosSchultz escreveu:Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
A Unreal ja resolveu esse problema marcos? do floating point?
e tipo em um mapa grande mesmo pra um mmorpg3d mundo aberto pra tentar não ocorrer esse floating point não tem como fazer a transição de cenas continuas? tipo pro player nao saber que foi teleportado pra outra cena, atravessando um portal "que ele tambem nao vai saber que é um" ou sla alguma ideia?
Para você conseguir trabalhar longe da origem, basta deslocar a origem, e isto é possível usando este recurso: https://wiki.unity3d.com/index.php/Floating_Origin
O problema é que para deslocar a origem do seu mapa para a sua posição atual, é necessário atualizar o Transform de TODOS os objetos da cena, e isto é extremamente pesado, além de que no momento do deslocamento, pode haver instabilidade na simulação da física, então é necessário "pausar" os rigidbody, deslocar a origem, e depois reinserir os parâmetros de velocidade nele.
Todo esse processo permite trabalhar longe da origem, mas, toda vez que a origem é deslocada, haverá uma "travada" no jogo, tipo um gargalo.
Quanto problema mds, não existe alguma engine que ja resolveu esse problema do floating point? espero que a unity resolva isso nas próximas versões
Este é um recurso que JÁ EXISTE no PhysX 3.3 em diante, e a unity não implementa nuncaaaa, não sei por quê. Nos fóruns da Unity, o pessoal pede esse recurso desde a Unit 5, e eles nunca fizeram.
Recentemente alguém pediu em um tópico sobre isso, e um dos desenvolvedores da Unity respondeu algo como: "Não há planos para implementar isto em um futuro conhecido".
É realmente algo complicadinho... Para resolver sem deslocar a origem, da pra usar o SceneManager.LoadSceneAsync, para carregar várias cenas ao mesmo tempo e ir intercalando entre elas, mas é meio complexo.
Re: Duvida Tamanho do Mapa unity
MarcosSchultz escreveu:Naaaa verdade, o grande problema que você terá com mapas gigantes nem tem muito a ver com o "peso do jogo".
Você pode usar Occlusion para diminuir o peso na renderização, você pode separar o cenário em blocos e usar SetActive para deixar apenas o necessário ativo, da pra usar LOD para diminuir o peso de objetos distantes e por ai vai...
Mas o que vai realmente te ferrar em mapas grandes é o Floating Point, pois quanto mais você se distancia do ponto (0, 0, 0) do mapa, a precisão de tudo na unity vai diminuindo, a ponto de sombras ficarem piscando, a física bugar, colliders ficarem com colisão inexata, paredes se sobreporem e por ai vai.
Floating Point é o grande vilão de mapas grandes na unity, e meio que não tem uma solução ainda... O negócio é separar em várias cenas mesmo.
No meu caso não vó usa sombra, como vai ser rpg 2d fica mais bonito com sombra vo tenta maneira em algumas coisas kkk e ainda so iniciante,tenho que aprende a fazer algumas coisas.
billybmx- Membro
- PONTOS : 1989
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Tópicos semelhantes
» Limite Máximo de tamanho de mapa na Unity?
» Dúvida sobre implementação de sistema de criar/editar mapa unity/unreal
» [DUVIDA] tamanho de um quarteirão
» Duvida(tamanho de objetos)
» Mapa In Unity :2
» Dúvida sobre implementação de sistema de criar/editar mapa unity/unreal
» [DUVIDA] tamanho de um quarteirão
» Duvida(tamanho de objetos)
» Mapa In Unity :2
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos