Tag: Unity
Formação gratuita: Gaming: UNITY
Tomei conhecimento acerca de uma ação de formação financiada acerca do motor de videojogo Unity. São 25horas em horário pós-laboral, duas vezes por semana a começar no dia 9 fevereiro e até dia 7 de março. O formador vai ser o José Luís Campo Silva.
O conteúdo Programático:
Editor de jogos 3D
Importação de modelos 3D; texturas e áudio
Aplicação e ajuste de texturas e iluminação
Animação de objetos, elementos e definição de sistemas de partículas
Definição de ações e sincronismo de eventos
Definição de interruptores e ações automáticas
Transição entre áreas de modelos; estrutura de níveis
Definição de limites de deslocamento; desenho de envolvente
Utilização de estruturas de deteção de colisões e sistemas físicos
Definição e extração de cenas animadas a partir do modelo interativo
e tem como pré-requisitos:
Conhecimentos prévios em Programação em C#
Entidade responsável por esta ação de formação é a EISnt – EISnt – Centro de Formação Profissional e Consultoria Formação profissional em tecnologia para empregados e desempregados financiada
+infos(oficial): LINK
Humble Software Bundle: Learn Unity Game Development (uma campanha)
Está a decorrer uma nova campanha relacionada com cursos acerca do Unity, e da lista consta:
Unity Multiplayer Course: Intermediate C# Coding & Networking
Unity Mobile C# Developer Course
Complete C# Unity Game Developer 2D Course
Complete C# Unity Game Developer 3D Course
Game Dev Skill Builder (Unity) – Season 2
Ultimate Music Bundle by Sidearm Studios
Ultimate SFX Bundle by Sidearm Studios
Programming Patterns Introduction Course
Data Oriented Tech Stack Introduction Course
Game Dev Skill Builder (Unity) – Season 1
RPG 2D Art Asset Pack
Get Git Smart Course: Learn Git in Unity, SourceTree, GitHub
Unity UIToolkit for Editor Scripting Introduction Course
+infos(oficial): LINK
How to Create a Multiplayer Game in Unity (a experimentar)
A malta da Zenva, através do portal https://gamedevacademy.org/ disponibilizou um tutorial onde explicam de forma bastante simples a construção de um jogo 2D multiplayer !!
Parece ser um tutorial simples mas com tudo o que é necessário.
Fica aqui o registo para testar mais tarde.
+infos(site): https://gamedevacademy.org/how-to-create-a-multiplayer-game-in-unity/
“Strategy Game Development Academy” o curso de RTS
A empresa Zenva enviou-me um email a indicar que está com uma promoção num curso que eu gostava de passar os olhos. Aliás não é um curso é um conjunto de vários cursos que depois estão associados a um perfil. Com o nome de “Strategy Game Development Academy” e do curriculum faz parte:
Level 1: Game Development Basics
Coding in Unity with C#
Building your first game
Simple game mechanics
Level 2: Strategy Game Basics
Strategy design principles
Basic resource management
Building your first strategy game
2D procedural maps
Level 3: Real-Time Strategy Games
Selecting, moving, & coordinating units
Resource-gathering
Unit combat with state machines
Enemy AI
Level 4: Popular Features
City-builder mechanics
Multiplayer games with Photon
Turn-based games
Technology trees
Mas depois com uma análise mais detalhada surge a seguinte lista do curriculum (e que eu acho que é o percurso mais natural):
Course 1: Intro to Game Development with Unity
Course 2: Create Your First 3D Game in Unity
Course 3: Build a Micro-Strategy Game
Course 4: 2D Procedural Maps for Beginners
Course 5: Develop a City-Building Game with Unity
Course 6: Real-time Strategy Project – Unit Movement
Course 7: Real-time Strategy Project – Resource Gathering
Course 8: Real-time Strategy Project – Unit Combat
Course 9: Real-time Strategy Project – Enemy AI
Course 10: Develop a Technology Tree for Strategy Games
Course 11: Discover AI and State Machines in Unity
Course 12: Intro to Multiplayer Game Development
Course 13: Turn-Based Game – Multiplayer Projects
O motor de jogo é o Unity e existem duas modalidades de aceder (pagando): 168 dólares por ano, ou 20 dólares por mês!
+infos(oficial): LINK
Parte4 – o meu projeto (aprender)
O terreno, coisas interessantes:
shift anula o elemento do terreno;
manipular o brush size e opacity
instalar o package Terrain tools, através do package manager (ativar no project settings, a hipótese de enable preview packages)e surgem outras opções com o package
teclas de atalho com o uso dos brushes: LINK
outras opções, o path finder: LINK
outras opções, o Terrain Tools Sample Asset Pack (free): LINK
depois de instalar é só importar.. neste caso fiz importar tudo. Surge então a hipótese de usar o paint texture e olhar para a secção das layers
Bump Map (informação 3d da imagem, uma layer a partir de mapa 2d, “light catches a shape”)
Height Map (fazer uso do preto/branco para criar informação acerca da altura dos elementos na imagem)
Normal Map (faz uso dos valores de RGB para indicar a direção da luz em termos de x,y e z de cada pixel)
assim sempre que for necessário aplicar uma layer shape é necessário tratar destas três questões:
standart assets para o Unity: LINK
(filtrar… por environment)
Timeline e a Animation
o processo é o mesmo que em Flash ou noutras ferramentas, trabalhar com keyframes e construir e aplicar movimentos entre esses espaços
Parte3 – o meu projeto (aprender)
Alguns dos temas que devem ser debatidos quando se desenvolve um videojogo:
a experiencia do jogador (precisão, e habilidade) (player experience (precision. skillful);
mecânica principal: pilotar habilmente uma nave espacial e evitar o meio ambiente (core mechanic: skilfully fly spaceship and avoid environmental hazards);
loop principal do jogo: ir de a até b para completar o nível e depois avançar para o próximo nível (core game loop: get from a to b to complete the level then progress to the next level).
Outro assunto é o fluxo do jogo e os ecrãs (game flow and screens) e que se resume ao seguinte cenário:
O tema do jogo (estória de elementos gráficos):
uma geração experimental de uma nave espacial;
tentar escapar de um planeta desconhecido.
(qual o tema central do jogo, o nome do jogo,…)
Questões que normalmente surgem quando se desenvolve um videojogo:
quais são os features (características) que eu devo incluir no meu videojogo?
quando é que se deve começar o desenvolvimento?
quais são as prioridades?
e se eu não tiver tempo?
quando é que eu devo parar?
Metodologia Onion Design (core feature ou mecânicas):
Devem haver respostas para:
qual é característica que é única e mais importante para o jogo?
qual é a característica seguinte mais importante?
qual é a característica seguinte mais importante?
(exemplos: movimento do jogador, colisão com o ambiente (e morrer por causa disso), power ups, ir de a para b e começar um novo nível (level progression), existirem obstáculos que se mexem, existência de pontuação, existência de inimigos, fuel..)
Um alternativa a este modelo será a de começar pelo mais difícil e mais complicado primeiro.
coisas interessantes:
A classe MonoBehaviour:
input +infos: LINK
Input.getKey +infos: LINK
simular o vento no jogo, alterar a física do projeto em X por exemplo
o áudio:
deve estar na camara, porque é o local onde o jogador está
para trabalhar o áudio vai ser necessário:
audio listener (na camara)
audio source (o elemento gráfico que tem/produz o áudio)
audio file
problemas com o áudio:
ou quando se faz o play no Unity estar muted
ou no projeto do ficheiro, ir às preferences…
O AudioSource +infos: LINK
O AudioSource PlayOneShot +infos: LINK
As cenas tem que ser geridas e referidas:
O SceneManager + infos: LINK
Pode também existir a necessidade de colocar uma pausa entre o morrer e o renascer, para isso existe o método Invoke()
Tem como referência o uso de uma String e pode ser lento.. alternativa é usar o Coroutine
O Invoke +infos: LINK
Ainda acerca dos prefabs:
convém que sejam feitos como deve ser e não duplicar/acrescentar simplesmente na barra inicial
remover os box colider de todos e aplicar apenas ao elemento pai do prefab
adicionar depois um box colider e moldar de seguida esse box colider com a ferramenta de edit colider
Particle System:
tem um emissor
e tem as partículas
é adicionado como game object ou através de um componente
um particle system tem módulos que permitem controlar o comportamento
se ficar a pink (cor de rosa) ir ao módulo render->material (é porque não tem ainda material)
na secção shape do módulo podemos alterar o comportamento do cone no radius
e manter os loops ativos
Lighting tab:
(menu window-> rendering-> lighting)
permite manipular os elementos relativos ao lighting
existem:
main directional light (sol)
environment lighting ()
scene lights (do tipo spot lights…)
Lighting +infos: LINK
transformações:
através do código
vector3
starting position (x,y,z)
movement vector (x,y,z)
movement factor (efeito de ping pong), entre 0 e 1
Transform +infos: LINK
movimento constante:
Matemátia, Mathf.Sin +infos: LINK
algum código:
using System; using UnityEngine; using UnityEngine.SceneManagement; public class Colisoes : MonoBehaviour { [SerializeField] float tempoLoadNivel = 2.0f; //audio [SerializeField] AudioClip suscesso; [SerializeField] AudioClip insucesso; AudioSource fonteAudio; [SerializeField] ParticleSystem suscessoParticulas; [SerializeField] ParticleSystem insucessoParticulas; bool estadoEmTransicao = false; //lidar com sons, movimentos.. //cheat code bool desligarColisoes = false; void Start() { fonteAudio = GetComponent<AudioSource>(); fonteAudio.Stop(); } void Update() { ResponderATeclasDeDebug(); } void ResponderATeclasDeDebug(){ if(Input.GetKeyDown(KeyCode.L)){ loadOProximoNivel(); }else if(Input.GetKeyDown(KeyCode.C)){ desligarColisoes = !desligarColisoes; } } void OnCollisionEnter(Collision other) { if(estadoEmTransicao == true || desligarColisoes == true) { return; } switch(other.gameObject.tag) { case "Amigo": Debug.Log("Amigo"); break; case "Fuel": Debug.Log("Fuel"); break; case "Finish": Debug.Log("Parabens terminaste"); //loadOProximoNivel(); ComecarSequenciaSucesso(); break; default: //Debug.Log("huns.."); //ou reLoadNivel(); //ou com pausa //ou Invoke("reLoadNivel", 1f); //ou Invoke("ComecaSequenciaCrash", 1f); //criar efeito de pausa com disable teclado ComecaSequenciaCrash(); break; } } void ComecarSequenciaSucesso() { estadoEmTransicao = true; //audio fonteAudio.Stop(); fonteAudio.PlayOneShot(suscesso); //particulas //ParticleSystem.Play(); suscessoParticulas.Play(); //parar o movimento GetComponent<Movimento>().enabled = true; //invoke.. Invoke("loadOProximoNivel", tempoLoadNivel); } void ComecaSequenciaCrash() { estadoEmTransicao = true; //som fonteAudio.Stop(); fonteAudio.PlayOneShot(insucesso); //particulas //ParticleSystem.Play()... insucessoParticulas.Play(); //criar efeito de pausa com disable teclado GetComponent<Movimento>().enabled = false; Invoke("reLoadNivel", 1f); } void loadOProximoNivel() { int cenaCorrenteIndex = SceneManager.GetActiveScene().buildIndex; int proximaCenaIndex = cenaCorrenteIndex + 1; if(proximaCenaIndex == SceneManager.sceneCountInBuildSettings){ proximaCenaIndex = 0; } SceneManager.LoadScene(proximaCenaIndex); } void reLoadNivel() { //ou SceneManager.LoadScene(0); // é a primeira ou com o nome //ou SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //voltamos ao inicio //ou int cenaCorrenteIndex = SceneManager.GetActiveScene().buildIndex; SceneManager.LoadScene(cenaCorrenteIndex); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movimento : MonoBehaviour //herança : MonoBehaviour { Rigidbody rb; [SerializeField] float forcaDoTrust = 100.0f; [SerializeField] float rotacaoDoTrust = 1.0f; //audio AudioSource ruidoMotor; [SerializeField] AudioClip motorFogetao; //sistema de particulas do motor [SerializeField] ParticleSystem motorFogetaoParticulas; [SerializeField] ParticleSystem motorEsquerdaFogetaoParticulas; [SerializeField] ParticleSystem motorDireitaFogetaoParticulas; void Start() { rb = GetComponent<Rigidbody>(); //audio ruidoMotor = GetComponent<AudioSource>(); ruidoMotor.Stop(); motorFogetaoParticulas.Stop(); } void Update() { InteratividadeThrust(); InteratividadeRotacao(); } void InteratividadeThrust() { //getKeyDown: só para saber se ele primiu a tecla //ou (Input.GetKey("up")) ou (Input.GetKey(KeyCode.UpArrow)) //duas escolhas, diferentes signatures if(Input.GetKey(KeyCode.Space)) { InicioThrust(); } else { PararThrust(); } } void InicioThrust() { Debug.Log("Foi pressionado a tecla de SPACE"); //rb.AddRelativeForce(0,1,0); //Vector3 são 3 valores:xyz //Vector3 permite aceder à direcção e velocidade rb.AddRelativeForce(Vector3.up * forcaDoTrust * Time.deltaTime); //equivalente a rb.AddRelativeForce(0,1,0); //audio if (!ruidoMotor.isPlaying) { //ruidoMotor.Play(); //só para um som ruidoMotor.PlayOneShot(motorFogetao); } //particulas if (!motorFogetaoParticulas.isPlaying) { motorFogetaoParticulas.Play(); } } void PararThrust() { ruidoMotor.Stop(); motorFogetaoParticulas.Stop(); } void InteratividadeRotacao() { if(Input.GetKey(KeyCode.A)) { RotacaoEsquerda(); } else if(Input.GetKey(KeyCode.D)) { RotacaoDireita(); } else { PararRotacao(); } } void RotacaoEsquerda() { Debug.Log("Foi pressionado a tecla de A"); RotacaoMetodo(rotacaoDoTrust); //xyz: 0,0,1 if (!motorDireitaFogetaoParticulas.isPlaying) { motorDireitaFogetaoParticulas.Play(); } } void RotacaoDireita() { Debug.Log("Foi pressionado a tecla de D"); //transform.Rotate(-Vector3.forward * rotacaoDoTrust * Time.deltaTime); //xyz: 0,0,1 //ou transform.Rotate(Vector3.back * rotacaoDoTrust * Time.deltaTime); //xyz: 1,0,0 if (!motorEsquerdaFogetaoParticulas.isPlaying) { motorEsquerdaFogetaoParticulas.Play(); } RotacaoMetodo(-rotacaoDoTrust); } private void PararRotacao() { motorDireitaFogetaoParticulas.Stop(); motorEsquerdaFogetaoParticulas.Stop(); } void RotacaoMetodo(float rotacaoDesteFrame) { //freezar o sistema de rotação não deixar o sistema de fisica tomar posse rb.freezeRotation = true; //para rodar manualmente transform.Rotate(Vector3.forward * rotacaoDesteFrame * Time.deltaTime); rb.freezeRotation = false; // unfreezar para que o sistema de fisica tome conta das ações } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class oscilador : MonoBehaviour { Vector3 posicaoDeInicio; [SerializeField] Vector3 vectorDeMovimento; //slider [SerializeField] [Range(0,1)] float vectorDeFactor; //periodo de tempo [SerializeField] float periodo = 2f; void Start() { //posição inciial posicaoDeInicio = transform.position; Debug.Log(posicaoDeInicio); } // Update is called once per frame void Update() { //para medir o tempo.. /* if(periodo == 0f){ //protecção return; } */ //por ser float a comparação com == pode comprometer. if(periodo <= Mathf.Epsilon){ //protecção return; } float ciclos = Time.time / periodo; //vai crescendo com o tempo //usar Tau, o tal Pi que não é pi e tem em conta o raio const float tau = Mathf.PI * 2; // o valor constante de 6.283 float rawSenoOnda = Mathf.Sin(ciclos * tau); //andar entre -1 e 1 Debug.Log(rawSenoOnda); vectorDeFactor = (rawSenoOnda + 1f) / 2f; //calculo que vai de 0 a 1 Vector3 offset = vectorDeMovimento * vectorDeFactor; transform.position = posicaoDeInicio + offset; } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class QuitJogo : MonoBehaviour { void Update() { if(Input.GetKeyDown(KeyCode.Escape)) { Debug.Log("Terminou o jogo!!!"); Application.Quit(); } } }
Parte2 – o meu projeto (aprender)
o GameDesign deste projeto:
a experiência do jogador ( player experience ) : agilidade
a mecânica do jogo ( core mechanic ) : movimentos, e de evitar obstáculos
o modo continuo do jogo ( game loop ): ir de a para b
coisas interessantes:
a função Time.deltaTime
usar o cinemachine (para termos acesso a diferentes camaras) +infos: LINK
box colider (lidar com as colisões)
rigidbody (vai permitir trabalhar as colisões, lidar com problemas de rotação, através de congelar (freeze nos constrains)
cores +infos: LINK
GameObject.GetComponent + infos: LINK
Time.time +infos: LINK
Tags +infos: LINK
Transform +infos: LINK
algum código:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColisaoMuros : MonoBehaviour { private void OnCollisionEnter(Collision other) { //Debug.Log("colisao com um muro"); //Collision, tipo de variavel //other, quem colidiu comigo //OnCollisionEnter, quando "entra" na colisão //se colidirem contigo muda de cor //GetComponent<MeshRenderer>().material.color = Color.grey; //2) a colisão só deve acontecer se for com o objecto do jogador if(other.gameObject.tag == "Player"){ GetComponent<MeshRenderer>().material.color = Color.grey; //mudar a tag gameObject.tag = "colisao"; } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Mover : MonoBehaviour { //para ficar disponivel no inspctor usamos o [SerializeField] //[SerializeField] float andaX = 0.0f; //[SerializeField] float andaY = 0.01f; //[SerializeField] float andaZ = 0.0f; // Start is called before the first frame update float andaY = 0.0f; [SerializeField]float movimentoVelocidade = 6.0f; void Start() { Debug.Log("parte 2 - inicio do jogo"); ImprimirInstrucoes(); //para mover } // Update is called once per frame void Update() { MoverOJogador(); } void ImprimirInstrucoes(){ Debug.Log("Bem vindo ao jogo"); Debug.Log("Move o jogador com as setas ou WSAD"); Debug.Log("Não vás contras os muros.."); } void MoverOJogador(){ float andaX = Input.GetAxis("Horizontal")*Time.deltaTime*movimentoVelocidade; float andaZ = Input.GetAxis("Vertical")*Time.deltaTime*movimentoVelocidade; transform.Translate(andaX, andaY, andaZ); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Pontuacao : MonoBehaviour { int pontuacao = 0; private void OnCollisionEnter(Collision other) { if(other.gameObject.tag != "colisao"){ pontuacao=pontuacao+1; Debug.Log("pontos: "+pontuacao); } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Queda : MonoBehaviour { [SerializeField] float TempoACorrer = 3.0f; MeshRenderer rendererizacao; Rigidbody corpoDoMuro; void Start() { //esconder a mesh do objeto //GetComponent<MeshRenderer>().enabled = false; rendererizacao = GetComponent<MeshRenderer>(); rendererizacao.enabled = false; corpoDoMuro = GetComponent<Rigidbody>(); corpoDoMuro.useGravity = false; } void Update() { //Time.time, o tempo que passou desde o inicio de play no jogo //Debug.Log(Time.time); if(Time.time > TempoACorrer){ //Debug.Log("ja passaram 3 segundos"); rendererizacao.enabled = true; corpoDoMuro.useGravity = true; } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Roda : MonoBehaviour { [SerializeField] float rodaX = 0.0f; [SerializeField] float rodaY = 0.50f; [SerializeField] float rodaZ = 0.0f; // Update is called once per frame void Update() { transform.Rotate(rodaX,rodaY,rodaZ); } }
Parte1 – o meu projeto (aprender)
coisas interessantes:
tecla F para centrar no objeto que queremos,
realizar um reset nas propriedades com o lado direito do rato no inspetor,
alt+botão esquerdo do rato, selecionado o objeto podemos mover em torno dele
coisas usadas e instaladas:
visual studio code
no VSC instalar o Unity Code Snippets
no VSC instalar o C#
Instalação do Unity
Provavelmente por já ter tido uma instalação de uma versão do Unity, e que foi apenas removida pelo uso do Add/Remove programs em ambiente windows, tive problemas em voltar a instalar.
Surgia sempre o erro de “Installation Aborted” instalação ficava a meio caminho.
A solução foi instalar a interface (hub) de instalação do Unity mais antigo deste local (LINK) e de seguida fui instalar o hub da versão mais recente e funcionou!
Vou usar a versão do Unity 2020.2.4f1, parece que é a mais recente e é uma versão final..
+infos(sobre o erro): LINK
Novo curso online pela Gamedev.tv
A malta da Gamedev.tv está a disponibilizar mais um curso online com o Unity: Unity Multiplayer: Intermediate C# Coding & Networking. Desta vez é um curso com o qual tenho um particular interesse já que é sobre o desenvolvimento de um RTS com a possibilidade de ser jogado com dois ou mais jogadores.
+infos(oficial): LINK
Cursos e aprendizagens online (Unity)
Coleção interessantes sobre alguns dos assuntos de trabalhar com o Unity
+infos(): https://www.raywenderlich.com/unity
Brackeys, the end.
O canal de youtube e comunidade do Brackeys vai terminar. Foi dos primeiros canais que segui já que tem vídeos muito interessantes para explicar o uso do Unity e assuntos correlacionados como é o caso da linguagem de programação c# ou de modelação de objectos.
Os vídeos e os outros canais de suporte vão ficar activos, apesar do projeto terminar.
+infos(listas no youtube): LINK
+infos(página oficial): https://brackeys.com/
A partilha de uma experiência..
Supostamente este é um video acerca de uma experiência sobre o uso do game engine Unity..
Um blog interessante.. sobre o uso do Unity
Este blog parece sobre o uso do Unity mas também sobre o desenvolvimento de videojogos :)
Tem um posts interessantes sobre retirar melhor performance deste game engine :)
+infos(blog): https://coffeebraingames.wordpress.com/
Mais uma referência para ajuda no uso do Unity
“Unity Cheat Sheet and Quick Reference 2018”
Os temas são:
MonoBehaviour Event Execution Order
GameObject Manipulation
Vector Quick Reference
Time Variables
Physics Events
Coroutines
Input Quick Reference
Hotkeys
+infos(oficial): LINK
+infos(o pdf): LINK
Livros sobre videojogos
Apareceram no mercado mais dois livros de introdução a ambientes gráficos para o desenvolvimento de videojogos e que são:
Unity 2018 Game Development in 24 Hours, Sams Teach Yourself, 3rd Edition – LINK
Godot Engine Game Development in 24 Hours, Sams Teach Yourself: The Official Guide to Godot 3.0 – LINK
Lisbon Game Conference 2016
No próximo mês de outubro e no ISCTE (em Lisboa) vai decorrer o Lisbon Game Conference 2016. É já a terceira edição de um evento que pretende aproximar a industria do ensino ao mesmo tempo que disponibiliza um espaço para workshops e networking.
A inscrição no evento é gratuita e o programa do mesmo ainda está para ser publicado.
No ano anterior um dos workshops esteve relacionado com a introdução ao Unity.
+infos(oficial): http://lisbongameconf.iscte-iul.pt/
Unity assets
Aqui fica um referencial de alguns assets para o Unity, livres (free):
https://bitbucket.org/Unity-Technologies/
https://github.com/crilleengvall/UnityExamples
https://github.com/Unity-Technologies
Não testei ainda nenhum deles apenas é uma colecção de referências.
Compilação de links..
Alguém se deu ao trabalho de compilar uns links relacionados com GameDev Tutorials..
Alguns exemplos na categoria GameDev Tutorials – Unity 3D
Devmag – 50 tips for working with Unity (best pratices)
http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/
Imgur – Unity 3D tips and tricks
http://imgur.com/a/2w7zd
Juicy Beast – Collisions for platforming
http://juicybeast.com/2014/03/the-making-of-toto-temple-deluxe-collisions-for-platforming/
Gamasutra – “0-60 fds in 14 days!” What we learned trying to optimize our game using Unity 3D
http://www.gamasutra.com/blogs/AmirFassihi/20130828/199134/
Maildeveloper – Optimizing Unity games for mobile platforms
http://malideveloper.arm.com/downloads/BrainsEden2013-OptimizingUnityGamesforMobilePlatforms.pdf
App Gruruz – Learn to Create Isometric games like clash of clans
http://www.theappguruz.com/blog/create-isometric-games-like-clash-of-clans-crossy-roads-age-of-empire-etc
Unity 3D – Reducing the file size of the build
http://docs.unity3d.com/Manual/ReducingFilesize.html
Unity 3D – Physics best pratices
http://unity3d.com/pt/learn/tutorials/modules/intermediate/physics/physics-best-practices
Unity 3D – How to make a physically real, stable car using WheelColliders
http://forum.unity3d.com/threads/how-to-make-a-physically-real-stable-car-with-wheelcolliders.50643/
Um blog a seguir
Este é um blog a seguir para quem quer desenvolver videojogos em Unity.. apresenta algumas soluções relacionadas com o desenvolvimento de plugins, cenários..
+infos: http://www.alanzucconi.com/
Unity Tutorial: The Fundamentals (Section 1)
Aqui fica o link para uma série de tutorias do Unity :)
+infos: LINK