Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
2 participantes
Página 1 de 1
Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Boa Tarde Prezados,
Estava participando de uma maratona da Academia de Produção de Jogos o nosso protótipo de jogo nasceu do tutorial do Marcos: https://www.schultzgames.com/t2628-tutorial-unity-5-sistema-basico-de-jogo-estilo-angry-birds
A diferença é que estamos usando a camera em perspective (para fazer o paralax scrolling) e não ortographic, o que adiciona complexidade de ter que controlar o eixo Z.
Estou com alguns problema na mira que esta bugando, se puder, vejam como esta o gameplay do jogo:
Press kit: http://www.bigdreamsgamestudio.com/followthatpig/
Link da Playstore: https://play.google.com/store/apps/details?id=com.eagleteam.followthatpig&hl=pt-br
Descrição do problema enfrentado:
O primeiro tiro funciona corretamente, o segundo tiro já começa a ficar bugado, como pendulo até que chega um momento e buga arrastando o tiro direto para um dos eixos sem tocar
O código que controla esse comportamento é esse:
Acredito que o problema esteja aqui:
Mas não estou conseguindo ajustar, mesmo debugando.
Estou tentando fazer o tutorial do angry birds novamente, e preparando para adaptar para o objeto em movimento e camera em perspectiva, para conseguir aplicar nessa ideia desse game Follow That Pig.
Se puderem baixar e instalar no Android e testarem, vão ver o bug zuado na mira. =/ Esse bug nasceu por que tive que alterar a camera de ortografica para perspectiva e setar o Z fixo, estava funcionando e agora deu uma bugada.
Estava participando de uma maratona da Academia de Produção de Jogos o nosso protótipo de jogo nasceu do tutorial do Marcos: https://www.schultzgames.com/t2628-tutorial-unity-5-sistema-basico-de-jogo-estilo-angry-birds
A diferença é que estamos usando a camera em perspective (para fazer o paralax scrolling) e não ortographic, o que adiciona complexidade de ter que controlar o eixo Z.
Estou com alguns problema na mira que esta bugando, se puder, vejam como esta o gameplay do jogo:
Press kit: http://www.bigdreamsgamestudio.com/followthatpig/
Link da Playstore: https://play.google.com/store/apps/details?id=com.eagleteam.followthatpig&hl=pt-br
Descrição do problema enfrentado:
O primeiro tiro funciona corretamente, o segundo tiro já começa a ficar bugado, como pendulo até que chega um momento e buga arrastando o tiro direto para um dos eixos sem tocar
O código que controla esse comportamento é esse:
- Código:
using UnityEngine;
public class ProjectileDragging : MonoBehaviour {
public float maxStretch = 3f;
public LineRenderer catapultLineFront; //Linha do elastico de frente
public LineRenderer catapultLineBack; //Linha do elastico de tras
public Transform placeHolder; //Local de Suporte do estilingue
private SpringJoint2D spring;
public Sprite[] TiposDeProjetil;
private Transform catapult;
private Ray rayToMouse;
private Ray leftCatapultToProjectile;
private float maxStretchSqr;
private float circleRadius;
private bool clickedOn;
private Vector2 prevVelocity;
private PolygonCollider2D playerCol;
Rigidbody2D rb;
CircleCollider2D coll;
LineRenderer lr;
int line_res;
float velocity;
float angle;
float g;
float dt;
float Vy_old;
float Vy;
float Vx;
BalaoScript balaoScript;
void Awake ()
{
spring = GetComponent <SpringJoint2D> ();
catapult = spring.connectedBody.transform;
playerCol = GameObject.FindGameObjectWithTag("Player").GetComponent<PolygonCollider2D>();
Physics2D.IgnoreCollision(GetComponent<CircleCollider2D>(), playerCol);
balaoScript = transform.parent.GetComponent<BalaoScript>();
coll = GetComponent<CircleCollider2D>();
rb = GetComponent<Rigidbody2D>();
}
void Start ()
{
LineRendererSetup ();
rayToMouse = new Ray(-catapult.position, Vector3.zero);
leftCatapultToProjectile = new Ray(catapultLineFront.transform.position, Vector3.zero);
maxStretchSqr = maxStretch * maxStretch;
CircleCollider2D circle = GetComponent<Collider2D>() as CircleCollider2D;
circleRadius = circle.radius;
coll.radius = 10f;
g = 9.81f;
dt = 0.01f;
line_res = 100;
lr = gameObject.GetComponent<LineRenderer>();
lr.SetWidth(0.2f, 0.1f);
lr.SetVertexCount(line_res);
lr.enabled = false;
transform.GetComponent<SpriteRenderer>().sprite = TiposDeProjetil[0];
}
void Update ()
{
if (clickedOn)
Dragging ();
if (spring != null) {
if (!rb.isKinematic && prevVelocity.sqrMagnitude > rb.velocity.sqrMagnitude) {
Destroy (spring);
//print("velocidade: " + GetComponent<Rigidbody2D>().velocity);
rb.velocity = prevVelocity;
}
if (!clickedOn)
prevVelocity = rb.velocity;
LineRendererUpdate ();
} else {
catapultLineFront.enabled = false;
catapultLineBack.enabled = false;
}
}
void LineRendererSetup ()
{
catapultLineFront.enabled = true;
catapultLineBack.enabled = true;
catapultLineFront.sortingLayerName = "Foreground";
catapultLineBack.sortingLayerName = "Foreground";
catapultLineFront.sortingOrder = 3;
catapultLineBack.sortingOrder = 1;
}
void OnMouseDown ()
{
if (Time.timeScale > 0)
{
spring.enabled = false;
clickedOn = true;
balaoScript.DesabilitaGravidade();
}
}
void OnMouseUp ()
{
if (Time.timeScale > 0)
{
lr.enabled = false;
spring.enabled = true;
rb.isKinematic = false;
coll.isTrigger = false;
clickedOn = false;
balaoScript.HabilitaGravidade();
coll.radius = 2.5f;
Invoke("Reseta", 1f);
}
}
void Dragging ()
{
//lr.enabled = true;
Vector3 mouseWorldPoint;
#if UNITY_STANDALONE || UNITY_EDITOR
mouseWorldPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 20f));
#elif UNITY_ANDROID
mouseWorldPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 20f));
#endif
Vector2 catapultToMouse = mouseWorldPoint - catapult.position;
if (catapultToMouse.sqrMagnitude > maxStretchSqr)
{
rayToMouse = new Ray(catapult.position, Vector3.zero);
rayToMouse.direction = catapultToMouse;
mouseWorldPoint = rayToMouse.GetPoint(maxStretch);
}
transform.position = new Vector3(mouseWorldPoint.x, mouseWorldPoint.y, transform.position.z);
}
void LineRendererUpdate ()
{
catapultLineFront.SetPosition(0, catapultLineFront.transform.position);
catapultLineBack.SetPosition(0, catapultLineBack.transform.position);
catapultLineFront.SetPosition(1, transform.position);
catapultLineBack.SetPosition(1, transform.position);
}
void Reseta()
{
LineRendererSetup();
rb.isKinematic = true;
coll.isTrigger = true;
transform.position = placeHolder.position;
coll.radius = 10f;
spring = gameObject.AddComponent<SpringJoint2D>();
spring.autoConfigureDistance = false;
spring.distance = 0.5f;
spring.frequency = 2;
spring.connectedBody = catapult.GetComponent<Rigidbody2D>();
}
public void setTiro(GameObject tiro)
{
this.transform.GetComponent<SpriteRenderer>().sprite = TiposDeProjetil[1];
}
}
Acredito que o problema esteja aqui:
- Código:
#if UNITY_STANDALONE || UNITY_EDITOR
mouseWorldPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 20f));
#elif UNITY_ANDROID
mouseWorldPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 20f));
#endif
Mas não estou conseguindo ajustar, mesmo debugando.
Estou tentando fazer o tutorial do angry birds novamente, e preparando para adaptar para o objeto em movimento e camera em perspectiva, para conseguir aplicar nessa ideia desse game Follow That Pig.
Se puderem baixar e instalar no Android e testarem, vão ver o bug zuado na mira. =/ Esse bug nasceu por que tive que alterar a camera de ortografica para perspectiva e setar o Z fixo, estava funcionando e agora deu uma bugada.
Última edição por Deiverson em Sex Dez 09, 2016 3:23 pm, editado 6 vez(es) (Motivo da edição : Ajustando titulo para ficar mais coerente)
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
provavelmente o problema está aonde você citou mesmo... pois todos os objetos da cena terão que estar na posição 20f no eixo Z para se adequarem a camera em perspectiva e ajustar o AddForce corretamente.
Mas por que estão usando a câmera em perspectiva? Se o jogo em si está trabalhando com sprites O.o
Mas por que estão usando a câmera em perspectiva? Se o jogo em si está trabalhando com sprites O.o
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
MarcosSchultz escreveu:.....
Mas por que estão usando a câmera em perspectiva? Se o jogo em si está trabalhando com sprites O.o
Eu coloquei 3 planos de fundos em distancias diferentes (eixo z), para dar o efeito de paralax scrolling, quando a camera movimenta, o cenário de fundo movimenta mais lentamente, enquanto o mais próximo a camera movimenta mais rápido, sem precisar programar 1 linha de código, da mesma forma eu posicionei as nuvens em posições do eixo Z diferentes, para dar esse efeito de perspectiva e movimento gerado pela camera, sem precisar me preocupar com distancia e velocidade das nuvens, montanhas, plano de fundo.
Essa imagem descreve melhor: (imagem antiga)
Estou usando o fundo como texture em um quad, para não ter que ficar copiando e montando dezenas de sprites de planos de fundos, fiz um quad gigante e ajustei o tiling e para as nuvens superiores a velocidade do offset (fiz um script para controlar a velocidade do offset), para as nuvens superiores que ficam no limite do cenário mover em velocidade diferente independente sem estar relacionado a movimentação do usuário.
Eu gosto de usar sprites dentro do level somente se for para monstros, inimigos, obstáculos moveis, fixos, elementos consumiveis ou destrutiveis, etc... Mas para plano de fundo eu sinto mais confortável de transformar o sprite em texture aplicando em um quad. No caso desse jogo, foi possível fazer isso, em outros jogos onde o cenário não se repete, não é muito possível fazer dessa forma.
Você tem alguma sugestão de quando é recomendado (ponto de vista tecnico, programação, processamento, memoria e espaço) utilizar imagem como textura e quando usar sprite?
Um cenario extenso em que as imagens de fundo vão se repetir, eu prefiro usar texture do que sprite, tenho a sensação que o custo para instanciar na memoria vai ser bem mais baixo do que ter que criar dezenas de objetos (sprites) repetidos (prefabs) e ter que ficar montando no cenario.
Última edição por Deiverson em Seg Dez 12, 2016 12:32 pm, editado 3 vez(es) (Motivo da edição : Adicionando mais informações)
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Tem razão no que está fazendo... citei o uso de sprites por que não sabia da construção do cenário deste modo.
Tem como mandar uma print de qual local o script do lançador está alocado? Para fazer o direcionamento, vão ser pegas as posições em X/Y da posição da bola e da posição do objeto que contem o script em si...
Ambos tem que estar todos no mesmo local no eixo Z.
Outra coisa, cade a parte do Instantiate? precisamos ver a posição em Z do objeto.
Tem como criar uma cena básica e mandar o projeto para eu ver como você está montando? o problema está apenas na subtração dos vetores na hora de descobrir a força
Tem como mandar uma print de qual local o script do lançador está alocado? Para fazer o direcionamento, vão ser pegas as posições em X/Y da posição da bola e da posição do objeto que contem o script em si...
Ambos tem que estar todos no mesmo local no eixo Z.
Outra coisa, cade a parte do Instantiate? precisamos ver a posição em Z do objeto.
Tem como criar uma cena básica e mandar o projeto para eu ver como você está montando? o problema está apenas na subtração dos vetores na hora de descobrir a força
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Boa Noite Marcos,
Agradeço desde já a ajuda, te mandei um MP com o link de parte do codigo fonte, para você analisar.
Acredito que realmente seja a questão do eixo Z mesmo, principalmente o apoio do estilingue que eu cheguei a deslocar de posição, mas foi só no eixo x e y, não acredito que isso deveria influenciar tanto no tiro.
Qualquer duvida ou questão na parte do projeto que te enviei, pode me acionar.
Muito obrigado!
Agradeço desde já a ajuda, te mandei um MP com o link de parte do codigo fonte, para você analisar.
Acredito que realmente seja a questão do eixo Z mesmo, principalmente o apoio do estilingue que eu cheguei a deslocar de posição, mas foi só no eixo x e y, não acredito que isso deveria influenciar tanto no tiro.
Qualquer duvida ou questão na parte do projeto que te enviei, pode me acionar.
Muito obrigado!
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Dei uma olhada mais afundo naquele projeto que você me mandou, mas ele foi projetado meio errado... também faltaram algumas coisas para conseguir testar tudo que estava interferindo, por que tinham partes faltando.
Cara, vou dizer, este projeto parece bastante profissional, mas para quem pega assim aleatoriamente para ver, parece uma salada.
A questão é que o tutorial que eu fiz não é muito aplicado ali, pois no projeto, em vez do Instantiate, foi feito um controle externo dos projeteis em si, e o controle da posição foi feito diretamente no projetil em si, e não em um vetor, para depois ser passado um AddForce para o projetil.
Também, não consegui achar nenhuma linha contendo o AddForce...
O sistema todo em si é bem construído, mas está funcionando muito estranhamente pela maneira que foi empregado. Pessoalmente eu não largaria mão do AddForce e do Instantiate, ainda mais por que vocês estão lidando com poucos projeteis em cena, que são controlados.
Não sei se é possível você enviar o projeto mais completo para melhor análise... o atual apresenta alguns links faltando, dentre outras coisas que causam erros, o que torna mais difícil para achar o problema.
Cara, vou dizer, este projeto parece bastante profissional, mas para quem pega assim aleatoriamente para ver, parece uma salada.
A questão é que o tutorial que eu fiz não é muito aplicado ali, pois no projeto, em vez do Instantiate, foi feito um controle externo dos projeteis em si, e o controle da posição foi feito diretamente no projetil em si, e não em um vetor, para depois ser passado um AddForce para o projetil.
Também, não consegui achar nenhuma linha contendo o AddForce...
O sistema todo em si é bem construído, mas está funcionando muito estranhamente pela maneira que foi empregado. Pessoalmente eu não largaria mão do AddForce e do Instantiate, ainda mais por que vocês estão lidando com poucos projeteis em cena, que são controlados.
Não sei se é possível você enviar o projeto mais completo para melhor análise... o atual apresenta alguns links faltando, dentre outras coisas que causam erros, o que torna mais difícil para achar o problema.
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Eu peguei esse projeto pela metade e dei uma organizada minima nele, mas esta distante do que gostaria, não esta usando alguns padrões como gamecontroller, e pooling objects, eu iria fazer um refactoring nele, caso não tivesse sido cancelado com a equipe.
Vou verificar para liberar o projeto completo para você ver.
Outro caminho que imaginei é pegar o seu tutorial e adaptar para camera perspectiva em uma prova de conceito.
O foda é que eu já voltei o codigo do jeito que estava antes, corrigido, mas o problema continua, mesmo voltando o codigo inteiro, acho que pode ser alguma configuração de posição do objeto, estou usando o bitbucket para versionamento.
Vou verificar para liberar o projeto completo para você ver.
Outro caminho que imaginei é pegar o seu tutorial e adaptar para camera perspectiva em uma prova de conceito.
O foda é que eu já voltei o codigo do jeito que estava antes, corrigido, mas o problema continua, mesmo voltando o codigo inteiro, acho que pode ser alguma configuração de posição do objeto, estou usando o bitbucket para versionamento.
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Pelo que vi até agora, não aparenta ser posição do objeto, mas sim o princípio da descoberta de direção, mas ele aparenta estar correto.
Digo isto, por que o primeiro tiro sai corretamente, o problema começa nos outros, o que me faz pensar que alguma referência de transform é perdida, ou direcionada a um Vector3.zero.
Digo isto, por que o primeiro tiro sai corretamente, o problema começa nos outros, o que me faz pensar que alguma referência de transform é perdida, ou direcionada a um Vector3.zero.
Re: Dúvida aplicando tutorial do Angry Birds em camera perspective e veiculo em movimento
Sim, eu dei uma congelada nisso, acabei de tirar o projeto de produção e vou publicar depois em uma versão beta, como a equipe se desfez, fica ruim eu tocar o projeto sozinho, dei uma engavetada nele por causa da equipe.
Deiverson- Iniciante
- PONTOS : 3514
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» Mecânica estilingue Angry Birds.
» [TUTORIAL] FPS Camera e movimento
» [TUTORIAL] SOM DOS PASSOS e MOVIMENTO DA CAMERA
» Sistema De Camera De Primeira Pessoa de um Veiculo Para Android
» Como fazer a câmera balançar de acordo com a suspensão do veículo?
» [TUTORIAL] FPS Camera e movimento
» [TUTORIAL] SOM DOS PASSOS e MOVIMENTO DA CAMERA
» Sistema De Camera De Primeira Pessoa de um Veiculo Para Android
» Como fazer a câmera balançar de acordo com a suspensão do veículo?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos