[RESOLVIDO] Animação de abrir/fechar porta mais complexa
4 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Animação de abrir/fechar porta mais complexa
Opa galera, boa noite! Tudo bem com vocês?
Bom, já faz um tempo que não apareço por aqui, tenho ficado muito ocupado ultimamente, e no momento estou trabalhando em um jogo pro meu TCC.
Deixa eu explicar primeiro como ta funcionando o negócio aqui hahaha
Então, meu jogo parece que é o que chamam de GPU Bound, daqueles que são pesados para a placa de vídeo, e o maior motivo disso, são a grande quantidade de luzes e sombras.
O jeito que achei para resolver isso foi, que tipo, o game se passa totalmente dentro de uma casa, e quando você abre uma porta e sai para outro cômodo, a porta se fecha desligando as luzes daquele cômodo (que não está mais acessível até você entrar de novo) e liga as luzes do lugar que você acabou de entrar.
Até aí beleza, mas não queria que apenas pressionasse 'E' para a porta se abrir, queria que, ao você apertar o comando, a porta se abrisse, rodando a animação e o jogo fizesse o player andar para fora do cômodo sem que o jogador tivesse que andar manualmente sabe. Aí que tá o problema... sei como fazer a porta se abrir e fechar, mas não como fazer o jogo tacar o jogador lá pra fora.
Já vi em muitos jogos, que quando você aperta o comando para o player pegar tipo, um item, o jogo fazer ele automaticamente andar até o item e pegar o mesmo. Sempre tive curiosidade de saber como fazer isso também.
Sou modelador no projeto, e enquanto o vagabundo do meu programador não faz nada, já queria ir adiantando, já que temos que entregar essa demo em Outubro hahaha
Ficaria muito grato se alguém pudesse me ajudar! Garanto que colocarei seu nome nos créditos :D
Bom, já faz um tempo que não apareço por aqui, tenho ficado muito ocupado ultimamente, e no momento estou trabalhando em um jogo pro meu TCC.
Deixa eu explicar primeiro como ta funcionando o negócio aqui hahaha
Então, meu jogo parece que é o que chamam de GPU Bound, daqueles que são pesados para a placa de vídeo, e o maior motivo disso, são a grande quantidade de luzes e sombras.
O jeito que achei para resolver isso foi, que tipo, o game se passa totalmente dentro de uma casa, e quando você abre uma porta e sai para outro cômodo, a porta se fecha desligando as luzes daquele cômodo (que não está mais acessível até você entrar de novo) e liga as luzes do lugar que você acabou de entrar.
Até aí beleza, mas não queria que apenas pressionasse 'E' para a porta se abrir, queria que, ao você apertar o comando, a porta se abrisse, rodando a animação e o jogo fizesse o player andar para fora do cômodo sem que o jogador tivesse que andar manualmente sabe. Aí que tá o problema... sei como fazer a porta se abrir e fechar, mas não como fazer o jogo tacar o jogador lá pra fora.
Já vi em muitos jogos, que quando você aperta o comando para o player pegar tipo, um item, o jogo fazer ele automaticamente andar até o item e pegar o mesmo. Sempre tive curiosidade de saber como fazer isso também.
Sou modelador no projeto, e enquanto o vagabundo do meu programador não faz nada, já queria ir adiantando, já que temos que entregar essa demo em Outubro hahaha
Ficaria muito grato se alguém pudesse me ajudar! Garanto que colocarei seu nome nos créditos :D
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Então cara, não tem muita diferença da porta abrir com E, nesse caso tem 1 maneira de fazer, estou supondo que é um jogo 3D
----
você faria a animação do 0, dessa vez voce coloca o player na posição que tu quer perto da porta e criaria a animação um por um dele indo com a mao na maçaneta e puxando e junto disso a porta vindo se abrindo, e logo depois dele abrir a porta faz ele andar pra fora pela animação msm, soltando a maçaneta da porta antes de sair andando, e a porta se fechando logo atrás de ti normalmente...
Pronto tens a animação, agora é só ir no Script onde tem que apertar "E" e trocar pra em vez de chamar a animação da porta abrir, chame essa nova animação do seu personagem
Nesse momento teras tambem que criar umas variaveis booleanas para travar o jogador de andar com WASD ou pular, ou mecher a camera com mouse , enquanto executa a animação, ficando false só depois de terminar a animação liberando pra voce andar
Eu deixaria um pouco escuro as bordas da tela tambem quando executar a animação, pra dar a entender que entrou em uma "cutscene" sumindo ela logo no fim da animação, só pra detalhe msm
---------
Eu estou longe do pc to no trabalho, eu te mandei a teoria que pensei agr, mas tem que testar pois pode ser que eu tenha esqueçido de algo
----
você faria a animação do 0, dessa vez voce coloca o player na posição que tu quer perto da porta e criaria a animação um por um dele indo com a mao na maçaneta e puxando e junto disso a porta vindo se abrindo, e logo depois dele abrir a porta faz ele andar pra fora pela animação msm, soltando a maçaneta da porta antes de sair andando, e a porta se fechando logo atrás de ti normalmente...
Pronto tens a animação, agora é só ir no Script onde tem que apertar "E" e trocar pra em vez de chamar a animação da porta abrir, chame essa nova animação do seu personagem
Nesse momento teras tambem que criar umas variaveis booleanas para travar o jogador de andar com WASD ou pular, ou mecher a camera com mouse , enquanto executa a animação, ficando false só depois de terminar a animação liberando pra voce andar
Eu deixaria um pouco escuro as bordas da tela tambem quando executar a animação, pra dar a entender que entrou em uma "cutscene" sumindo ela logo no fim da animação, só pra detalhe msm
---------
Eu estou longe do pc to no trabalho, eu te mandei a teoria que pensei agr, mas tem que testar pois pode ser que eu tenha esqueçido de algo
nibirou- MembroAvançado
- PONTOS : 2073
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Depende de como você está controlando o personagem. Mas eu faria usando Navmesh, como fazemos com bots mesmo. Desativa o controller, toca a animação e faz o jogador ir pra onde você quiser usando navmesh. Quando atinge o objetivo, ativa o controller novamente.
A vantagem é que você não se restringe a um ponto específico, pode desviar de objetos dinâmicos, etc..
Existe mais de uma maneira de se fazer quase tudo.
A vantagem é que você não se restringe a um ponto específico, pode desviar de objetos dinâmicos, etc..
Existe mais de uma maneira de se fazer quase tudo.
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Ahh beleza beleza, vou tentar fazer amanhã e respondo aqui o resultado. Muito obrigado! :Dnibirou escreveu:Então cara, não tem muita diferença da porta abrir com E, nesse caso tem 1 maneira de fazer, estou supondo que é um jogo 3D
----
você faria a animação do 0, dessa vez voce coloca o player na posição que tu quer perto da porta e criaria a animação um por um dele indo com a mao na maçaneta e puxando e junto disso a porta vindo se abrindo, e logo depois dele abrir a porta faz ele andar pra fora pela animação msm, soltando a maçaneta da porta antes de sair andando, e a porta se fechando logo atrás de ti normalmente...
Pronto tens a animação, agora é só ir no Script onde tem que apertar "E" e trocar pra em vez de chamar a animação da porta abrir, chame essa nova animação do seu personagem
Nesse momento teras tambem que criar umas variaveis booleanas para travar o jogador de andar com WASD ou pular, ou mecher a camera com mouse , enquanto executa a animação, ficando false só depois de terminar a animação liberando pra voce andar
Eu deixaria um pouco escuro as bordas da tela tambem quando executar a animação, pra dar a entender que entrou em uma "cutscene" sumindo ela logo no fim da animação, só pra detalhe msm
---------
Eu estou longe do pc to no trabalho, eu te mandei a teoria que pensei agr, mas tem que testar pois pode ser que eu tenha esqueçido de algo
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Ah saquei, mas tipo, tem como fazer por exemplo, imagina que o player ta a uma certa distancia da porta, ai quando o jogador apertar 'E', tem como fazer o navmesh (ou qualquer outra coisa) levar o player mais próximo da porta para executar a animação de fazer ela abrir??artplayer escreveu:Depende de como você está controlando o personagem. Mas eu faria usando Navmesh, como fazemos com bots mesmo. Desativa o controller, toca a animação e faz o jogador ir pra onde você quiser usando navmesh. Quando atinge o objetivo, ativa o controller novamente.
A vantagem é que você não se restringe a um ponto específico, pode desviar de objetos dinâmicos, etc..
Existe mais de uma maneira de se fazer quase tudo.
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Oi! Sei como eh essa época de projeto pro TCC semestre passado passei por isso e os finalmentes são sempre tensos xD
Respondendo a sua dúvida: se não existe nenhum obstáculo entre o caminho da onde o personagem está e a porta, vc pode fazer isso através do MoveTowards que move o seu player para um ponto específico.
Como fazer:
Suponho que seu personagem se controla através de um Controller né? Enfim, coloque o script no prefab da porta, daí ele vai servir para qualquer porta, basta mudar a posição alvo para onde o player deve ir:
Respondendo a sua dúvida: se não existe nenhum obstáculo entre o caminho da onde o personagem está e a porta, vc pode fazer isso através do MoveTowards que move o seu player para um ponto específico.
Como fazer:
Suponho que seu personagem se controla através de um Controller né? Enfim, coloque o script no prefab da porta, daí ele vai servir para qualquer porta, basta mudar a posição alvo para onde o player deve ir:
- Código:
public MovePlayer : Monobehaviour {
public Vector3 target; // posição final
public float speedToWalk; // velocidade do movimento
public float distance; // A distância entre a porta e o player
private GameObject _player;
private bool canPressKey;
private bool canMove;
private bool endWalk;
void Start(){
canMove = false;
endWalk = false;
_player = GameObject.FindWithTag("Player");
}
void Update(){
canPressKey = Vector3.distance(transform.position, _player.transform.position)
<= distance && !endWalk;
CheckKey();
if(!endWalk && canMove)
MovingPlayer ();
}
void CheckKey(){
if(canPressKey && Input.GetKeyDown(KeyCode.E) &&!canMove)
{
canMove = true;
_player.GetComponent<Controller>().enabled = false;
_player.GetComponent<Animator>().SetBool(nomeDaAnimacaoDeAndar, true);
} else
return;
}
void MovingPlayer(){
_player.transform.position = Vector3.MoveTowards(
_player.transform.position, target,speedToWalk*Time.deltaTime);
endWalk = _player.transform.position == target;
if(endWalk){
_player.GetComponent<Controller>().enabled = true;
_player.GetComponent<Animator>().SetBool(nomeDaAnimacaoDeAndar, false);
}
}
}
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Tenso de maisss kkkkkkkkMayLeone escreveu:Oi! Sei como eh essa época de projeto pro TCC semestre passado passei por isso e os finalmentes são sempre tensos xD
Respondendo a sua dúvida: se não existe nenhum obstáculo entre o caminho da onde o personagem está e a porta, vc pode fazer isso através do MoveTowards que move o seu player para um ponto específico.
Como fazer:
Suponho que seu personagem se controla através de um Controller né? Enfim, coloque o script no prefab da porta, daí ele vai servir para qualquer porta, basta mudar a posição alvo para onde o player deve ir:
- Código:
public MovePlayer : Monobehaviour {
public Vector3 target; // posição final
public float speedToWalk; // velocidade do movimento
public float distance; // A distância entre a porta e o player
private GameObject _player;
private bool canPressKey;
private bool canMove;
private bool endWalk;
void Start(){
canMove = false;
endWalk = false;
_player = GameObject.FindWithTag("Player");
}
void Update(){
canPressKey = Vector3.distance(transform.position, _player.transform.position)
<= distance && !endWalk;
CheckKey();
if(!endWalk && canMove)
MovingPlayer ();
}
void CheckKey(){
if(canPressKey && Input.GetKeyDown(KeyCode.E) &&!canMove)
{
canMove = true;
_player.GetComponent<Controller>().enabled = false;
_player.GetComponent<Animator>().SetBool(nomeDaAnimacaoDeAndar, true);
} else
return;
}
void MovingPlayer(){
_player.transform.position = Vector3.MoveTowards(
_player.transform.position, target,speedToWalk*Time.deltaTime);
endWalk = _player.transform.position == target;
if(endWalk){
_player.GetComponent<Controller>().enabled = true;
_player.GetComponent<Animator>().SetBool(nomeDaAnimacaoDeAndar, false);
}
}
}
Mas então, chegando em casa, já vou testar do jeito que você me mostrou aqui! Muuito obrigado! :D
Re: [RESOLVIDO] Animação de abrir/fechar porta mais complexa
Aeee, tentei pelo modo do navmesh e tem dado mt certo até agora! Muito obrigado!!artplayer escreveu:Depende de como você está controlando o personagem. Mas eu faria usando Navmesh, como fazemos com bots mesmo. Desativa o controller, toca a animação e faz o jogador ir pra onde você quiser usando navmesh. Quando atinge o objetivo, ativa o controller novamente.
A vantagem é que você não se restringe a um ponto específico, pode desviar de objetos dinâmicos, etc..
Existe mais de uma maneira de se fazer quase tudo.
Tópicos semelhantes
» Abrir e Fechar Porta
» ABRIR E FECHAR PORTA!
» [RESOLVIDO] Colocar o código certo para abrir porta
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
» Abrir e Fechar Gavetas
» ABRIR E FECHAR PORTA!
» [RESOLVIDO] Colocar o código certo para abrir porta
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
» Abrir e Fechar Gavetas
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos