GIRAR EM TORNO DE ACORDO COM AS TECLAS
2 participantes
Página 1 de 1
GIRAR EM TORNO DE ACORDO COM AS TECLAS
Olá!
Caramba, estou quebrando a cabeça om algo que acho simples, porém não estou conseguindo...
Caso possam me ajudar, já agradeço!
Seguinte, preciso que o player sempre olhe para o ponto central da tela, fácil, lookAt, ou outras coisas como um objeto no meio, do qual pega o transform, ou cálculo da metade da tela, blz, porém o player conforme os comandos WASD, ele gire em torno do centro, no maior angulo possível, sem sair da tela, esta sempre estática.
Então se pressiono W, e o player estiver às 6h01, ele seguirá pela esquerda da tela, sempre olhando para o centro e girando em torno dele, no caso iria até o topo 12h00, se estiver às 5h59 seguirá para o topo mas pelo sentido anti horário (mais perto!). Outro exemplo: se pressiono A, e o Player estiver às 2h00 ele fará o sentido anti horário, até 9h00. isso tudo só acontece se pressionada alguma tecla, caso contrário fica parado...
Realmente procurei e achei alguns scripts que não eram exatamente isso, mas parecidos e tentei adequá-los, mas sem sucesso!
Alguém pode me dar uma LUZ!
Caramba, estou quebrando a cabeça om algo que acho simples, porém não estou conseguindo...
Caso possam me ajudar, já agradeço!
Seguinte, preciso que o player sempre olhe para o ponto central da tela, fácil, lookAt, ou outras coisas como um objeto no meio, do qual pega o transform, ou cálculo da metade da tela, blz, porém o player conforme os comandos WASD, ele gire em torno do centro, no maior angulo possível, sem sair da tela, esta sempre estática.
Então se pressiono W, e o player estiver às 6h01, ele seguirá pela esquerda da tela, sempre olhando para o centro e girando em torno dele, no caso iria até o topo 12h00, se estiver às 5h59 seguirá para o topo mas pelo sentido anti horário (mais perto!). Outro exemplo: se pressiono A, e o Player estiver às 2h00 ele fará o sentido anti horário, até 9h00. isso tudo só acontece se pressionada alguma tecla, caso contrário fica parado...
Realmente procurei e achei alguns scripts que não eram exatamente isso, mas parecidos e tentei adequá-los, mas sem sucesso!
Alguém pode me dar uma LUZ!
wagnercaragua- Iniciante
- PONTOS : 2121
REPUTAÇÃO : 6
Respeito as regras :
Re: GIRAR EM TORNO DE ACORDO COM AS TECLAS
Então, uma luz eu não tenho, serve um vaga-lume?
Ao invés de fazer via código, você poderia criar uma malha em forma de círculo, e usá-la como navmesh pro seu player, neste caso, apertando "W" você mandaria um objeto vazio (Objetivo) para a posição 12:00h, e o sistema da navmesh se encarregaria de buscar o menor caminho até ele.
A malha seria assim:
ou...
A parte de olhar pro centro você já manja...
Mas se o vaga-lume não servir, daqui a pouco chega algum Programador com um Refletor de estádio pra você kkk
Boa sorte e boa noite!
Ao invés de fazer via código, você poderia criar uma malha em forma de círculo, e usá-la como navmesh pro seu player, neste caso, apertando "W" você mandaria um objeto vazio (Objetivo) para a posição 12:00h, e o sistema da navmesh se encarregaria de buscar o menor caminho até ele.
A malha seria assim:
ou...
A parte de olhar pro centro você já manja...
Mas se o vaga-lume não servir, daqui a pouco chega algum Programador com um Refletor de estádio pra você kkk
Boa sorte e boa noite!
Isabela- Avançado
- PONTOS : 2835
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: GIRAR EM TORNO DE ACORDO COM AS TECLAS
Isabela escreveu:Então, uma luz eu não tenho, serve um vaga-lume?
Ao invés de fazer via código, você poderia criar uma malha em forma de círculo, e usá-la como navmesh pro seu player, neste caso, apertando "W" você mandaria um objeto vazio (Objetivo) para a posição 12:00h, e o sistema da navmesh se encarregaria de buscar o menor caminho até ele.
A malha seria assim:
ou...
A parte de olhar pro centro você já manja...
Mas se o vaga-lume não servir, daqui a pouco chega algum Programador com um Refletor de estádio pra você kkk
Boa sorte e boa noite!
Caramba! Este vaga lume brilhou!
Esta realmente foi uma das possibilidades que cheguei a pensar, mas não tinha em mente tudo que passou!
Muitíssimo agradecido!
Enquanto isso....eu consegui fazer funcionar, mas o scrip ficou enorme e terrivelmente redundante....já é tarde e não consigo mais...rs
O importante é que funcionou, porém acho que a opção que apresentou parece bem melhor....
Da uma olhada no frankestein que criei!
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class rotacionarPlayer : MonoBehaviour
{
public GameObject alvo;
public Vector3 direcao;
public float velocidade;
public float xpos, ypos;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.A))//caso pressione a tecla A, deseja que o player vá em direção à 09h00
{
if (transform.position.x < 0)
{
if (transform.position.y < 1)
{
if (transform.position.y > -1)
{
direcao.z = 0;
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveA(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveA(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveA(xpos, ypos);
}
}
else if (Input.GetKey(KeyCode.D))//caso pressione a tecla S, deseja que o player vá em direção à 03h00
{
if (transform.position.x > 0)
{
if (transform.position.y < 1)
{
if (transform.position.y > -1)
{
direcao.z = 0;
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveD(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveD(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveD(xpos, ypos);
}
}
else if (Input.GetKey(KeyCode.W))//caso pressione a tecla W, deseja que o player vá em direção à 12h00
{
if (transform.position.y > 0)
{
if (transform.position.x < 1)
{
if (transform.position.x > -1)
{
direcao.z = 0;
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveW(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveW(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveW(xpos, ypos);
}
}
else if (Input.GetKey(KeyCode.S))//caso pressione a tecla S, deseja que o player vá em direção à 06h00
{
if (transform.position.y < 0)
{
if (transform.position.x < 1)
{
if (transform.position.x > -1)
{
direcao.z = 0;
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveS(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveS(xpos, ypos);
}
}
else
{
xpos = transform.position.x;
ypos = transform.position.y;
moveS(xpos, ypos);
}
}
else
{
direcao.z = 0;
}
void moveA(float posX, float posY)
{
if (posX > 0f)//verifica se o player está do lado direito da tela (quadrante 12h00 as 06h00)
{
if (posY > 0f)//verifica se está acima, caso positivo, o player está no quadrante 12h00 a 03h00
{
//o melhor caminho é sentido anti horário
direcao.z = 1f;
}
else//neste caso está no quadrante 03h00 as 06h00
{
direcao.z = -1f;//sentido horário nele
}
}
else//não o player está do lado esquerdo da tela
{
if (posY < 0f)//verifica se está acima, caso positivo, o player está no quadrante 09h00 as 12h00
{
//o melhor caminho para 09h00 é sentido horário
direcao.z = -1f;
}
else//neste caso está no quadrante 06h00 as 09h00
{
direcao.z = 1f;//sentido anti horário nele
}
}
}
void moveD(float posX, float posY)
{
if (posX > 0f)//verifica se o player está do lado direito da tela (quadrante 12h00 as 06h00)
{
if (posY > 0f)//verifica se está acima, caso positivo, o player está no quadrante 12h00 a 03h00
{
//o melhor caminho é sentido horário
direcao.z = -1f;
}
else//neste caso está no quadrante 03h00 as 06h00
{
direcao.z = 1f;//sentido anti horário nele
}
}
else//não o player está do lado esquerdo da tela
{
if (posY < 0f)//verifica se está acima, caso positivo, o player está no quadrante 09h00 as 12h00
{
//o melhor caminho para 03h00 é sentido anti horário
direcao.z = 1f;
}
else//neste caso está no quadrante 06h00 as 09h00
{
direcao.z = -1f;//sentido horário nele
}
}
}
void moveW(float posX, float posY)
{
if (posY < 0f)//verifica se o player está do lado de baixo da tela (quadrante 03h00 as 09h00)
{
if (posX > 0f)//verifica se está a direita, caso positivo, o player está no quadrante 03h00 a 06h00
{
//o melhor caminho é sentido anti horário
direcao.z = 1f;
}
else//neste caso está no quadrante das 06h00 as 09h00
{
direcao.z = -1f;//sentido horário nele
}
}
else//não o player está do lado de cima da tela
{
if (posX < 0f)//verifica se está a esquerda, caso positivo, o player está no quadrante 09h00 as 12h00
{
//o melhor caminho para 03h00 é sentido horário
direcao.z = -1f;
}
else//neste caso está no quadrante 12h00 as 03h00
{
direcao.z = 1f;//sentido anti horário nele
}
}
}
void moveS(float posX, float posY)
{
if (posY > 0f)//verifica se o player está do lado de cima da tela (quadrante das 09h00 as 03h00)
{
if (posX > 0f)//verifica se está a direita, caso positivo, o player está no quadrante 12h00 as 03h00
{
//o melhor caminho é sentido horário
direcao.z = -1f;
}
else//neste caso está no quadrante das 09h00 as 12h00
{
direcao.z = 1f;//sentido anti horário nele
}
}
else//não o player está do lado de baixo da tela
{
if (posX < 0f)//verifica se está a esquerda, caso positivo, o player está no quadrante das 06h00 as 09h00
{
//o melhor caminho para 03h00 é sentido anti horário
direcao.z = 1f;
}
else//neste caso está no quadrante das 03h00 as 06h00
{
direcao.z = -1f;//sentido horário nele
}
}
}
transform.LookAt(alvo.transform.position);
transform.RotateAround(alvo.transform.position, direcao, velocidade * Time.deltaTime);
}
}
De qualquer forma muito obrigado!
wagnercaragua- Iniciante
- PONTOS : 2121
REPUTAÇÃO : 6
Respeito as regras :
Re: GIRAR EM TORNO DE ACORDO COM AS TECLAS
Bom, se estiver disposto a implementar usando navmesh, creio que irá simplificar muito seu código kkk
um exemplo que eu fiz:
e aqui uma build, caso queira dar uma olhada no resultado...
Download
um exemplo que eu fiz:
- Código:
using UnityEngine;
using UnityEngine.AI;
public class Player : MonoBehaviour
{
public NavMeshAgent player;
public Transform destino;
public Transform[] pos;
void FixedUpdate()
{
if (Input.GetKeyDown(KeyCode.W))
destino.transform.position = pos[0].transform.position;
if (Input.GetKeyDown(KeyCode.D))
destino.transform.position = pos[1].transform.position;
if (Input.GetKeyDown(KeyCode.S))
destino.transform.position = pos[2].transform.position;
if (Input.GetKeyDown(KeyCode.A))
destino.transform.position = pos[3].transform.position;
if (Input.GetKey(KeyCode.W)|| Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A))
{
player.isStopped = false;
player.destination = destino.position;
}
else
{
player.velocity = Vector3.zero;//Remover caso queira parar suavemente.
player.isStopped = true;
}
}
}
e aqui uma build, caso queira dar uma olhada no resultado...
Download
Isabela- Avançado
- PONTOS : 2835
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: GIRAR EM TORNO DE ACORDO COM AS TECLAS
Ae sim!
Vou implementar hoje e depois te falo como ficou!
Valeu! Obrigado pelo interesse em ajudar!
Vou implementar hoje e depois te falo como ficou!
Valeu! Obrigado pelo interesse em ajudar!
wagnercaragua- Iniciante
- PONTOS : 2121
REPUTAÇÃO : 6
Respeito as regras :
Re: GIRAR EM TORNO DE ACORDO COM AS TECLAS
Isabela, usando meu script, visto que ainda não dominei o navMesh, como faria para que o objeto ficasse de cabeça para baixo quando estiver em cima e virado ao centro quando aos lados e normal quando em baixo? Ou seja, verdadeiramente olhando para o centro?
wagnercaragua- Iniciante
- PONTOS : 2121
REPUTAÇÃO : 6
Respeito as regras :
Tópicos semelhantes
» Como faz a câmera seguir e gira em torno do jogador
» girar o personagem de acordo com o analógico
» Como criar uma mira que rotacione em torno do player e não ultrapasse os limites?
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como fazer para girar o celular e com isto girar o volante do veículo?
» girar o personagem de acordo com o analógico
» Como criar uma mira que rotacione em torno do player e não ultrapasse os limites?
» [DÚVIDA] FAZER OBJETO GIRAR EM TORNO DE SI QUANDO CLICAR E ARRASTAR O OBJETO PARA OS LADOS
» Como fazer para girar o celular e com isto girar o volante do veículo?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos