Personagem não para ao fazer a animação de atirar
+2
GustavoMaster
Joaogabrielf13
6 participantes
Página 1 de 1
Personagem não para ao fazer a animação de atirar
No meu jogo, esse é o script que faz o personagem atirar :
Quando aperto o x ele executa a animação de atirar, so que se eu apertar uma das setas ele se movimenta, mesma colocando "speed = 0" la no script.
Obs: Antes de colocar isso :
(Se eu apagar essa void atirar2, volta ao normal e o player executa a animação de atirar sem problemas).
Olhei o animator mas não consegui ver nenhum erro:
Tirei print das transições de Andando para Atirando.
HELP!!!!!!!
- Código:
private void Atirar(){
if (Input.GetKey (KeyCode.X)) {
anim.SetBool ("atirando", true);
speed=0;
} else {
anim.SetBool ("atirando", false);
speed=7;
}
Quando aperto o x ele executa a animação de atirar, so que se eu apertar uma das setas ele se movimenta, mesma colocando "speed = 0" la no script.
Obs: Antes de colocar isso :
- Código:
private void Atirar2(){
if (Input.GetKey (KeyCode.C)) {
anim.SetBool ("atirando para os lados", true);
speed = 0;
} else {
anim.SetBool ("atirando para os lados", false);
speed=7;
}
(Se eu apagar essa void atirar2, volta ao normal e o player executa a animação de atirar sem problemas).
Olhei o animator mas não consegui ver nenhum erro:
Tirei print das transições de Andando para Atirando.
HELP!!!!!!!
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Vc quer que quando ele estiver andando ele n possa atirar ?
GustavoMaster- Avançado
- PONTOS : 3771
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Não cara, quando eu aperto x o player deve executar somente a animação de atirar(que na verdade é so um sprite), nem se mover nem nada. No caso do problema, se, enquanto eu estiver apertando x, eu apertar também as setas, o player é arrastado enquanto faz a animação de atirar.
Olhai ai o video que gravei.
Ne 0:04 eu aperto x, o player deveria ficar estatico,mesmo se apertasse as setas.Deveria ficar igual em 0:010, mesmo apertando setas, o player n se move nem nada.
Esse é o problema, o player se mover se o x for apertado mesmo eu tendo definido speed = 0 no script.
Olhai ai o video que gravei.
Ne 0:04 eu aperto x, o player deveria ficar estatico,mesmo se apertasse as setas.Deveria ficar igual em 0:010, mesmo apertando setas, o player n se move nem nada.
Esse é o problema, o player se mover se o x for apertado mesmo eu tendo definido speed = 0 no script.
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Coloca o Script completo com o de tiro e movimentação
GustavoMaster- Avançado
- PONTOS : 3771
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Ainda não tem o script de tiro, ja que eu ainda tenho problemas na movimentação.
- Código:
using UnityEngine;
using System.Collections;
public class Humano1Controle : MonoBehaviour {
public float speed ;
private Animator anim;
private Rigidbody2D rgd2;
private BoxCollider2D colisor2D;
private Vector2 sizeOriginal;
void Start () {
rgd2 = GetComponent<Rigidbody2D> ();
anim = GetComponentInChildren<Animator> ();
colisor2D = GetComponent<BoxCollider2D> ();
sizeOriginal = new Vector2 (colisor2D.size.x, colisor2D.size.y);
}
void Update () {
Moviment ();
Rasteira ();
Atirar ();
Atirardiferente();
}
private void Moviment(){
if(Input.GetAxis("Horizontal") < 0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,180);
}else
if(Input.GetAxis("Horizontal")>0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,0);
}
}
private void Rasteira(){
if ( Input.GetKey (KeyCode.Z)) {
anim.SetBool ("rasteira", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.5f);
}else{
anim.SetBool ("rasteira", false);
colisor2D.size = sizeOriginal;
}
}
private void Atirar(){
if (Input.GetKey (KeyCode.X)) {
anim.SetBool ("atirando", true);
speed=0;
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.8f);
} else {
anim.SetBool ("atirando", false);
speed=7;
}
}
private void Atirardiferente(){
if (Input.GetKey (KeyCode.C)) {
anim.SetBool ("atirando para os lados", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.8f);
speed = 0;
} else {
anim.SetBool ("atirando para os lados", false);
speed=7;
}
}
}
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
No seu animator vc tirou o hás êxito time ? VC manteve pressionado a letra "c" no video ou só deu um clique ?
GustavoMaster- Avançado
- PONTOS : 3771
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Sim, eu tirei todos os Has Exit Time, e sim , no vídeo eu mantive o C(ou X, caso você tenha se confundido) pressionado.
edit: Resumindo o que quero: Caso o x seja pressionado, o player executa a animação de atirar e fique parado, estático, sem se mover, paradão enquanto eu estiver pressionando o x.
edit 2: ESQUECE, TODA A MOVIMENTAÇÃO AGORA BUGOU SEM EU TER MEXIDO EM NADA,NADA.
vou refazer tudo, deve ser só mais algum bug da unity.
edit: Resumindo o que quero: Caso o x seja pressionado, o player executa a animação de atirar e fique parado, estático, sem se mover, paradão enquanto eu estiver pressionando o x.
edit 2: ESQUECE, TODA A MOVIMENTAÇÃO AGORA BUGOU SEM EU TER MEXIDO EM NADA,NADA.
vou refazer tudo, deve ser só mais algum bug da unity.
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Cara, o erro é na programação...
Você tem que criar uma condição adicional usando o operador "&&", para somente poder atirar quando não está pressionando os botões dos lados
Você tem que criar uma condição adicional usando o operador "&&", para somente poder atirar quando não está pressionando os botões dos lados
Re: Personagem não para ao fazer a animação de atirar
De qualquer maneira , sem eu ter feito nada o animator bugou completamente,quando executo uma animação só, acaba executando todas.
Ja tinha feito o teste um tempo atras e tinha dado certo.Sem contar que o Ataque2, que é a mesma logica não bugou,quando aperto as setas o player nao se mexe.
Como uso o "&&"?
Assim?Não sei C# direito rsrs
Ja tinha feito o teste um tempo atras e tinha dado certo.Sem contar que o Ataque2, que é a mesma logica não bugou,quando aperto as setas o player nao se mexe.
Como uso o "&&"?
- Código:
if (Input.GetKey (KeyCode.X) && ! Input.GetAxis ("Horizontal")) {
anim.SetBool ("atirando", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.8f);
speed=0;
} else {
anim.SetBool ("atirando", false);
speed=7;
}
Assim?Não sei C# direito rsrs
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Tenta isso
- Código:
if (Input.GetKey(KeyCode.X) && Input.GetKey("Horizontal"))
{
}
hellkiller- Mestre
- PONTOS : 4053
REPUTAÇÃO : 170
Áreas de atuação : Programação em C#,
Modelagem,
GameArt.
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Da um erro e diz que Não é possivel aplicar o operador "&&" a operandos do tipo "bool" e "float".
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Tenta assim e c# ou javascript?
- Código:
if (Input.GetKey(KeyCode.X) && Input.GetKey("Horizontal"))
{
anim.SetBool("atirando", true);
colisor2D.size = new Vector2(sizeOriginal.x, sizeOriginal.y * 0.8f);
speed = 0;
}
else
{
anim.SetBool("atirando", false);
speed = 7;
hellkiller- Mestre
- PONTOS : 4053
REPUTAÇÃO : 170
Áreas de atuação : Programação em C#,
Modelagem,
GameArt.
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Não entendi a sua pergunta, você perguntei se meu script é em c# ou javascript?
se for, é c#.
se for, é c#.
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Claro que é possível aplicar && a operadores do tipo bool e float O.o
mande o seu código ai
mande o seu código ai
Re: Personagem não para ao fazer a animação de atirar
- Código:
using UnityEngine;
using System.Collections;
public class Humano1Controle : MonoBehaviour {
public float speed ;
private Animator anim;
private Rigidbody2D rgd2;
private BoxCollider2D colisor2D;
private Vector2 sizeOriginal;
void Start () {
rgd2 = GetComponent<Rigidbody2D> ();
anim = GetComponentInChildren<Animator> ();
colisor2D = GetComponent<BoxCollider2D> ();
sizeOriginal = new Vector2 (colisor2D.size.x, colisor2D.size.y);
}
void Update () {
Moviment ();
Rasteira ();
Atirar ();
Atirardiferente();
}
private void Moviment(){
if(Input.GetAxis("Horizontal") < 0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,180);
}else
if(Input.GetAxis("Horizontal")>0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,0);
}
}
private void Rasteira(){
if ( Input.GetKey (KeyCode.Z)) {
anim.SetBool ("rasteira", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.5f);
}else{
anim.SetBool ("rasteira", false);
colisor2D.size = sizeOriginal;
}
}
private void Atirar(){
if (Input.GetKey (KeyCode.X) && Input.GetAxis ("Horizontal")) {
anim.SetBool ("atirando", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.8f);
speed=0;
} else {
anim.SetBool ("atirando", false);
speed=7;
}
}
private void Atirardiferente(){
if (Input.GetKey (KeyCode.C)) {
anim.SetBool ("atirando para os lados", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.8f);
speed = 0;
} else {
anim.SetBool ("atirando para os lados", false);
speed=7;
}
}
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Cara nesta parte do código vc esta pedindo para executar a animação de atirar se estiver precionando uma das setas de andar.
Você pode mudar isso para
Mas se mesmo assim não der tente como esta descrito abaixo.
Crie uma variável atirando do tipo bool
e altere o valor dela na VOID atirar para false e true.
Depois ponha o código de andar dentro de outro IF .
Espero ter conseguido explicar kkkk.
Post ai o resultado.
- Código:
private void Atirar(){
if (Input.GetKey (KeyCode.X) && Input.GetAxis ("Horizontal")) // <---------- AKI
{
anim.SetBool ("atirando", true);
...
} else {
anim.SetBool ("atirando", false);
speed=7;
}
Você pode mudar isso para
- Código:
private void Atirar(){
if (Input.GetKey (KeyCode.X) && !Input.GetAxis ("Horizontal")) // <---------- AKI
{
anim.SetBool ("atirando", true);
...
} else {
anim.SetBool ("atirando", false);
speed=7;
}
Mas se mesmo assim não der tente como esta descrito abaixo.
Crie uma variável atirando do tipo bool
e altere o valor dela na VOID atirar para false e true.
- Código:
private void Atirar(){
if (Input.GetKey (KeyCode.X)) {
atirando = true; // <----------
anim.SetBool ("atirando", true);
...
} else {
atirando = false; // <----------
anim.SetBool ("atirando", false);
speed=7;
}
}
Depois ponha o código de andar dentro de outro IF .
- Código:
if(atirando == false){ // <----------
if(Input.GetAxis("Horizontal") < 0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,180);
}else
if(Input.GetAxis("Horizontal")>0){
transform.Translate(Vector2.right *speed*Time.deltaTime);
anim.SetFloat("andando",Mathf.Abs(Input.GetAxis("Horizontal")));
transform.eulerAngles = new Vector2(0,0);
}
}
Espero ter conseguido explicar kkkk.
Post ai o resultado.
Re: Personagem não para ao fazer a animação de atirar
Funcionou, só que eu ainda estou com o problema do operador &&, diz que ele não pode ser aplicado em operandos do tipo bool e float. Nao sei o que fazer!!
Tem outra maneira de fazer com que determinado comando só seja ativado ao pressionar duas diferentes,sem ser com o "&&"??????????
Tem outra maneira de fazer com que determinado comando só seja ativado ao pressionar duas diferentes,sem ser com o "&&"??????????
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Tem! basta vc colocar um if dentro do outro.
Exemplo:
Se não der poste o código e diz qual a linha que esta dando o erro assim fica mas fácil para ajudar.
Exemplo:
- Código:
if (Input.GetKey (KeyCode.X)){
if (!Input.GetAxis ("Horizontal")){
anim.SetBool ("atirando", true);
...
}
} else{
anim.SetBool ("atirando", false);
speed=7;
}
Se não der poste o código e diz qual a linha que esta dando o erro assim fica mas fácil para ajudar.
Re: Personagem não para ao fazer a animação de atirar
Joaogabrielf13 escreveu:Funcionou, só que eu ainda estou com o problema do operador &&, diz que ele não pode ser aplicado em operandos do tipo bool e float. Nao sei o que fazer!!
Tem outra maneira de fazer com que determinado comando só seja ativado ao pressionar duas diferentes,sem ser com o "&&"??????????
Poste o exato código que está dando erro com os operadores "&&"
Re: Personagem não para ao fazer a animação de atirar
LeoBrito, da um erro,"Cannot implicitly convert type "float" to "bool".
Marcos:
Tirei print do erro também:
Não sei o que ta acontecendo com a unity, vem bugando direto,tava usando a versão 5.2, ai por causa dos bugs resolvi atualizar para a 5.3.
Marcos:
- Código:
private void Rasteira(){
if (Input.GetKey (KeyCode.X) && Input.GetAxis ("Horizontal")) {
anim.SetBool ("rasteira", true);
colisor2D.size = new Vector2 (sizeOriginal.x, sizeOriginal.y * 0.5f);
} else {
colisor2D.size = sizeOriginal;
anim.SetBool ("rasteira", false);
}
}
Tirei print do erro também:
Não sei o que ta acontecendo com a unity, vem bugando direto,tava usando a versão 5.2, ai por causa dos bugs resolvi atualizar para a 5.3.
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
Coloca
&& Input.GetAxis ("Horizontal") != 0)
Nao eh bug do unity. Eh simplesmente pq o GetAxys retorna um valor em float do lado que voce esta indo, pressionando...
Menor que 0 = <
Maior que 0 = >
0 = Esta parado
Do jeito que voce colocou voce esta tratando ele como se ele retornasse uma booleana
&& Input.GetAxis ("Horizontal") != 0)
Nao eh bug do unity. Eh simplesmente pq o GetAxys retorna um valor em float do lado que voce esta indo, pressionando...
Menor que 0 = <
Maior que 0 = >
0 = Esta parado
Do jeito que voce colocou voce esta tratando ele como se ele retornasse uma booleana
RenanMSV- Instrutor
- PONTOS : 4483
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
o erro é bastante simples... básicamente o Renan respondeu já...
Input.GetKey (KeyCode.X) - isto retorna uma booleana, então pode entrar sozinha no if sem problemas, más, isto:
Input.GetAxis ("Horizontal")
GetAxis retorna uma float, então precisa de alguma orientação como >, <, >=, <=, ==, !=, para comparação
Input.GetKey (KeyCode.X) - isto retorna uma booleana, então pode entrar sozinha no if sem problemas, más, isto:
Input.GetAxis ("Horizontal")
GetAxis retorna uma float, então precisa de alguma orientação como >, <, >=, <=, ==, !=, para comparação
Re: Personagem não para ao fazer a animação de atirar
RenanMSV escreveu:Coloca
&& Input.GetAxis ("Horizontal") != 0)
Nao eh bug do unity. Eh simplesmente pq o GetAxys retorna um valor em float do lado que voce esta indo, pressionando...
Menor que 0 = <
Maior que 0 = >
0 = Esta parado
Do jeito que voce colocou voce esta tratando ele como se ele retornasse uma booleana
Joaogabrielf13 -> Basta seguir isso que o RenanMSV postou e resolve seu caso.
Com um detalhe! vc tem que por: && Input.GetAxis ("Horizontal") == 0) -> pq você quer que ele atire somente quando não estiver se movendo.
Obs.: Toda vez que você pressionar as teclas para andar ele para de atirar e começa a andar.
Re: Personagem não para ao fazer a animação de atirar
Éé faz muito sentido rsrs. Obrigado galera, salvou o jogo e deu pra aprender um pouco.Vlw!!
Joaogabrielf13- Avançado
- PONTOS : 3595
REPUTAÇÃO : 7
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
LeoBrito escreveu:RenanMSV escreveu:Coloca
&& Input.GetAxis ("Horizontal") != 0)
Nao eh bug do unity. Eh simplesmente pq o GetAxys retorna um valor em float do lado que voce esta indo, pressionando...
Menor que 0 = <
Maior que 0 = >
0 = Esta parado
Do jeito que voce colocou voce esta tratando ele como se ele retornasse uma booleana
Joaogabrielf13 -> Basta seguir isso que o RenanMSV postou e resolve seu caso.
Com um detalhe! vc tem que por: && Input.GetAxis ("Horizontal") == 0) -> pq você quer que ele atire somente quando não estiver se movendo.
Obs.: Toda vez que você pressionar as teclas para andar ele para de atirar e começa a andar.
Mas ali no codigo o metodo chama Rasteira. Na rasteira precisa estar andando pra ela funcionar. '-' n era sobre atirar nao
RenanMSV- Instrutor
- PONTOS : 4483
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: Personagem não para ao fazer a animação de atirar
RenanMSV escreveu:LeoBrito escreveu:RenanMSV escreveu:Coloca
&& Input.GetAxis ("Horizontal") != 0)
Nao eh bug do unity. Eh simplesmente pq o GetAxys retorna um valor em float do lado que voce esta indo, pressionando...
Menor que 0 = <
Maior que 0 = >
0 = Esta parado
Do jeito que voce colocou voce esta tratando ele como se ele retornasse uma booleana
Joaogabrielf13 -> Basta seguir isso que o RenanMSV postou e resolve seu caso.
Com um detalhe! vc tem que por: && Input.GetAxis ("Horizontal") == 0) -> pq você quer que ele atire somente quando não estiver se movendo.
Obs.: Toda vez que você pressionar as teclas para andar ele para de atirar e começa a andar.
Mas ali no codigo o metodo chama Rasteira. Na rasteira precisa estar andando pra ela funcionar. '-' n era sobre atirar nao
Realmente! peço desculpas estava tão fixado no código andar que nem notei que era problema com a rasteira kkkkkk maus aew.
Tópicos semelhantes
» Fazer o personagem atirar
» O QUE FAZER PARA O PERSONAGEM DETECTAR O TERRAIN ?
» Gostaria de fazer a animação do arco seguir animação do personagem
» Preciso de um script para fazer o personagem pular
» Nao consigo fazer criar um coliso com o meu personagem com animaçao
» O QUE FAZER PARA O PERSONAGEM DETECTAR O TERRAIN ?
» Gostaria de fazer a animação do arco seguir animação do personagem
» Preciso de um script para fazer o personagem pular
» Nao consigo fazer criar um coliso com o meu personagem com animaçao
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos