Category: Videojogos

Developer Interview – WarPlan Pacific with Alvaro Sousa

Mais um texto tão bom que vem do portal strategyandwargaming.com :)
Desta vez é sobre o desenvolvimento de um conjunto de jogos de guerra sobre a sigla de WarPlan e pela empresa Matrix Games :)

É sempre bom ler sobre o desenvolvimento de videojogos!

+infos(oficial): LINK

Tags : , , ,

ABugInTheSystem, um jogo tuga

Fica aqui o registo para mais um videojogo tuga, de nome ABugInTheSystem:
“ABugInTheSystem is an experimental game meant to invoke a somber and bleak atmosphere through cinematic gameplay sections and naturalistic dialog.”

+infos(oficial): https://chronicbite.itch.io/abuginthesystem

Tags : ,

GDScript Fundamentals Tutorial Series

Encontrei este conjunto de vídeos que explicar o uso do GDScript, mais concretamente para saber usar scritps com o motor de videojogos Godot. Começa pelo básico e vai avançando para assuntos mais importantes. Interessante, fica aqui o registo. O canal tem outras listas interessantes, alguns deles abstratos mas servem para explicar algumas das funcionalidades que são implementadas nos videojogos.

+infos(videos): LINK

Tags :

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/

Tags : , , ,

Proposta de trabalho (para Braga)

A empresa Sketchpixel tem em aberto um conjunto alargado de propostas de trabalho:

+infos(oficial): https://sketchpixel.com/pt/

Tags :

Proposta de trabalho (para Lisboa)

A empresa Doppio Games tem em aberto uma proposta de trabalho:
“Game Designer – New Concepts
das tarefas consta:
Design and prototype game concepts that make the most of the benefits of voice as an input in the context of a group video call
Analyze popular social/parlor/board games and identify which ones could be adapted well to work with voice as an input in the context of a group video call
Deeply understand the pros and cons of voice as an input and use that knowledge to steer the prototyping efforts to success
Understand the requirements of games in the context of group video calls and make sure game concepts fit that mold (session time, accessibility, etc.)
Work closely with the rest of the Concepting team (Producer, GUI/VUI designer and Gameplay Engineer)
Help inform the needs for our tools and platform

dos requisitos:
You have experience as a game designer that has allowed you to release commercial games
Your skills cover all aspects of game design: gameplay, balancing, reward and progression systems, etc.
You know how to design innovative prototypes using tools like Unity, Photoshop, Game Maker, etc.
You have a great knowledge of video games (all genres and platforms), particularly parlor/board games, including what are the most popular titles in this space
You are interested in new business models, and understand the links between traditional game design and game economy design
You enjoy working in a team and have good interpersonal skills
Your communication style is structured, clear, concise and responsive
You have a fluent level of English (written and oral), ideally with living experience in the US, Canada or the UK

e/ou ainda:
Previous experience building prototypes that became products
Graphic design skills
Mobile and browser game development experience
Some programming experience

+infos(oficial): https://doppio.games/careers/game-designer-new-concepts

Tags :

Proposta de trabalho (para Lisboa)

Tarefas:
“Working with Live Ops Designers, Artists and Marketing teams to eliminate issues of Live game events and to validate that these events have reached the targeted quality level;
Compile trackers and reports for regression, checklists and coverage;
Proactively pick up testing requests from Live Ops, and Marketing teams;
Find and enter high-quality issues based on department standards and perform edge case scenario tests to ensure fixes have no knock-on effects;
Verify In-game events and Monetisation implementation for issue fixing, changes or tuning before Live engagement;
Responsibility for a some specific areas of the game which includes:
Point of contact for testing areas of Live Ops based projects for other teams
Initiate conversations with Live Ops Designers, Artists and Marketing teams involved in in the specific areas of the game;
Interface with other in-house QA, the Outsourced QA Team & development, art and management team members involved in the specific area of the game on a daily basis;
Organise and review testing by other in-house and/or outsourced testers;
Support for the Content Team on testing Live Operations events and dynamic changes in a live game environment.”

Requisitos:
“At least one year experience in a QA position on either Mobile or Console;
Interest and knowledge of mobile platforms (Amazon, Google Play, Apple);
Strong ability to work under pressure and to meet given deadlines;
Good communication skills and able to work as part of a team;
Keen eye for detail;
Previous experience with black-box testing;
Experience in Live Service based gameplay, Desirably on mobile devices;
Previous experience working in the games industry;
Understanding the usage monetisation on either Mobile or Console;
Previous Quality Assurance experience with Freemium mobile games;
Passionate and experienced social mobile games player;
Has the testing knowledge to provide constructive feedback to address challenges that come up within the project;”

(é uma excelente oportunidade para quem quer entrar nesta industria.. )

+infos(oficial): LINK

Tags :

Game designer explicado..

A quantidade de trabalhos/tarefas que envolvem o Game designer.. e que eles realmente fazem :)
Um vídeo interessante que explica de forma rápida as tarefas que cada um faz: o game designer, level designer..

as tarefas/qualidades:

mas no final o que conta é o que já foi feito, o portefólio, mesmo que seja constituído apenas por coisas pequenas!!!

Tags : ,

Recursos como textos e livros

Encontrei uma editora em Berlim que tem algumas coisas relacionadas com videojogos, várias investigações, sobre diferentes perspetivas, ..e interessantes, algumas delas são:
Game Production Studies, por Olli Sotamaa, Jan Svelch
Experimental Games Critique, Play, and Design in the Age of Gamification, por Patrick Jagoda
A Precarious Game The Illusion of Dream Jobs in the Video Game Industry, por Ergin Bulut
Gaming as Art Perspectives on the Relationship between Art and Digital Gaming, por Frank G. Bosman
Time and Space in Video Games A Cognitive-Formalist Approach, por Federico Alvarez Igarzábal
(Not) In the Game History, Paratexts, and Games Regina Seiwald, por Ed Vollans
How to Play Video Games Matthew Thomas Payne, por Nina B. Huntemann
Games and Rules Game Mechanics for the »Magic Circle«, por Beat Suter, Mela Kocher, René Bauer, Kollektion-Knowledge Unlatched Auswahl

+infos(oficial): LINK

Tags : , ,

Proposta de trabalho (para Lisboa)

“A Fun Punch Games está à procura de membros para reforçar a equipa nas vertentes de:
Gameplay Programmer
Experiência com implementação de mecânicas de gameplay, noções de “game feel” e sentido crítico.
Artista Generalista
Com foco em 3D, noções de UI e familiarizado com implementação no Unity.
Procuram pessoas que tenham experiência em Unity, gostem e valorizem o trabalho em equipa e entendam a importância de cada uma das áreas de gamedev. Valorizamos experiência com Shader Graph.
São uma equipa focada em explorar jogos com mecânicas divertidas e inovadoras e incentivamos a partilha e exploração em conjunto. Podem conhecer o nosso trabalho aqui https://www.funpunchgames.com/
Estamos localizados em Lisboa mas neste momento as posições são para trabalho remoto.
Para mais detalhes, dúvidas ou candidaturas enviem um email com o vosso Portfolio + CV para jobs@funpunchgames.com com o título “Gameplay Programmer” ou “Art Generalist”, dependendo da posição a que se querem candidatar. “
+infos(oficial): https://www.funpunchgames.com/
Tags :

Proposta de trabalho (para Londres)

O estúdio/empresa First Light Games está à procura de “um senior developer com bastante experiencia(tinha preferência com Lead/Director experience)” para ir para Londres.

Requisitos:
“5+ years professional experience as a software engineer working in a game development team (+7 for technical Director).
Knowledge of scalable software architectures and distributed services
Experience in OOP with Unity3D in C#
Experience shipping a game on mobile
A passion for making games!”

+infos(oficial): https://firstlight.games/job-page-01

+infos(rede social): LINK

Tags :

Proposta de trabalho (em Lisboa)

O centro de investigação Hei-Lab da Universidade Lusófona tem disponíveis três vagas para alunos licenciados na área de videojogos ou similares (candidaturas até 26 de Março).

2 Vagas – Bolsa para licenciado em áreas de jogos ou afins, para desenvolvimento de aplicações de serious games em VR
+infos: http://www.eracareers.pt/opportunities/index.aspx?task=global&jobId=132239

1 Vaga – Bolsa para licenciado em áreas de jogos ou afins, para desenvolvimento de aplicações de serious games, incluindo-se ambientes imersivos.
+infos: http://www.eracareers.pt/opportunities/index.aspx?task=global&jobId=131929

+infos(Hei-Lab): https://hei-lab.ulusofona.pt/

Tags :

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

 

Tags : , ,

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();
        }
    }
}
Tags : , ,

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);
    }
}
Tags : , ,

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#

Tags : , ,

Teclas de atalho no Unity

ou

Tags : , ,

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

Tags : , ,

Proposta de trabalho (em Lisboa)

A malta do OnTop anda à procura de AR game designer… interessante!

+infos(página oficial): https://www.ontopstudios.com/

Tags :

Caravel: Set Forth

“Caravel: Set Forth”, mais um jogo com malta portuguesa no desenvolvimento :)

+infos(oficial): https://www.caravelgame.com/

Tags : ,

Proposta de trabalho (em Lisboa)

“Programadores de Unity por esse Portugal e não só estamos a contratar para o estúdio de Lisboa.”

Description
We’re looking for an awesome Unity developer to join our Client team in Lisbon and help push Avakin to the next level.

Responsibilities:
Writing clear, efficient and robust code using C# and Unity;
Collaborate with other departments to design, develop and maintain features;
for a live title with an active player base;
Ensure reliability and performance of the title through bug fixing and optimising;
Work with Leads and Producers to plan and schedule tasks;
Helping the team highlight and solve potential issues when delivering a release;
Writing and maintaining technical documentation where appropriate.

Requirements
Minimum of 2 years experience in the video game industry or equivalent;
At least one shipped title, preferably on a mobile platform (multiplayer is a plus);
A clear understanding of C# as well as the Unity game engine and its nuances;
Experience with RESTful API services;
Good understanding of distributed systems and multiplayer games’ tech stack;
Working knowledge of version control systems (e.g. Git, Perforce);
Excellent English verbal and written communication skills;

Desirable: 
Good understanding of scripting languages (Lua, TypeScript, Shell), Understanding of how implemented features are perceived and used by players, Experience working in networked game development, Experience developing on mobile platforms.

Benefits
Profit share bonus scheme, Share Scheme
Life Insurance, Healthcare Cash Plan, Income Protection
Flexible working hours
Public transportation support
Food allowance
Flexible 23 days holiday (plus bank holidays)

Lockwood Publishing is one of the leading independent UK mobile games companies. Our most successful product to date is a 3D virtual world on mobile called Avakin Life.

+infos(): https://apply.workable.com/lockwood/j/37D25DFCD5/

Tags :

Proposta de trabalho (em Gaia)

“SABER PORTO is NOW hiring the best:
– CHARACTER ARTISTS
– ENVIRONMENT ARTISTS
– TEXTURE ARTISTS

If you’re interested to work in Porto and develop AAA games, send your CV and PORTFOLIO to jobs@saber3d.pt.”

+infos(rede social): LINK

+infos(oficial): http://www.bigmoonstudios.com/

Tags :

Proposta de trabalho (em Gaia)

“SABER PORTO is hiring the best:
– CONCEPT ARTISTS
– GAME DESIGNERS
– VISUAL FX ARTISTS
If you’re interested to work in Porto and develop AAA games, send your CV and PORTFOLIO to jobs@saber3d.pt”

+infos(rede social): LINK

+infos(oficial): http://www.bigmoonstudios.com/

Tags :

Proposta de trabalho (em Gaia)

SABER PORTO continues to grow its fantastic team in PORTUGAL! WE ARE HIRING:
– IT MANAGER
– HUMAN RESOURCES MANAGER
– ADMINISTRATIVE ASSISTANT
– ASSISTANT PRODUCER
– CINEMATICS & VIDEO EDITOR
– COMMUNITY MANAGER
If you’re interested, send your CV to jobs@saber3d.pt

+infos(rede social): LINK

+infos(oficial): http://www.bigmoonstudios.com/

Tags :