[RESOLVIDO] Script não ativa bool do animator
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Script não ativa bool do animator
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class INKController : MonoBehaviour
{
public float vvalue;
public float hvalue;
public Text vt;
public Text ht;
public float walkSpeed = 4f;
Vector3 forward, right;
private float moveSpeed;
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
forward = Camera.main.transform.forward;
forward.y = 0;
forward = Vector3.Normalize(forward * 1 * Time.deltaTime);
// -45 degrees from the world x axis
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
// Initial speed
moveSpeed = walkSpeed;
}
void Update()
{
hvalue = Input.GetAxis("Horizontal");
vvalue = Input.GetAxis("Vertical");
ht.text = hvalue.ToString();
vt.text = vvalue.ToString();
if (Input.anyKey)
{
Move();
}
else
{
Idle();
}
}
void Move()
{
var h_axis = Input.GetAxis("Horizontal");
var v_axis = Input.GetAxis("Vertical");
Vector3 rightMovement = right * moveSpeed * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * moveSpeed * Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement + upMovement);
Vector3 newPosition = transform.position;
newPosition += rightMovement;
newPosition += upMovement;
transform.forward = heading;
transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime);
//Anim
if (h_axis != 0f)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
if (v_axis != 0f)
anim.SetBool("Walking", true);
else
anim.SetBool("Walking", false);
}
void Idle()
{
anim.SetBool("Walking", false);
}
}
O problema esta nas ultimas linhas, o h_axis fica diferente de 0, mas mesmo assim o bool não ativa.
Última edição por dstaroski em Ter Abr 17, 2018 7:36 am, editado 1 vez(es) (Motivo da edição : Resolvido)
INKnight- Avançado
- PONTOS : 3599
REPUTAÇÃO : 18
Áreas de atuação : Iniciante em programação em C#;
Iniciante em design;
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
Acho que deve ser porque uma bool está anulando a outra, tenta apertar as duas teclas junto e vê se ele se faz a animação, se ele fizer voce vai ter que mudar esses seus if's ai
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
As duas juntas funcionam...Fluttershy28 escreveu:Acho que deve ser porque uma bool está anulando a outra, tenta apertar as duas teclas junto e vê se ele se faz a animação, se ele fizer voce vai ter que mudar esses seus if's ai
Algum meio de arrumar isso?
Última edição por Ghosthy em Seg Abr 16, 2018 10:16 pm, editado 1 vez(es)
INKnight- Avançado
- PONTOS : 3599
REPUTAÇÃO : 18
Áreas de atuação : Iniciante em programação em C#;
Iniciante em design;
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
Deve ser um problema de lógica. Olhando pela ordem : SE h_axis for diferente de 0 bool retorna verdadeiro, mas SE v_axis NÃO for diferente de 0, retorna falso. Aí está o problema, pois como os códigos são lidos de cima para baixo, eles acabam "obedecendo" mais os últimos IFs caso você modifique a mesma variável em várias sentenças. O mais correto seria assim :Ghosthy escreveu:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class INKController : MonoBehaviour
{
public float vvalue;
public float hvalue;
public Text vt;
public Text ht;
public float walkSpeed = 4f;
Vector3 forward, right;
private float moveSpeed;
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
forward = Camera.main.transform.forward;
forward.y = 0;
forward = Vector3.Normalize(forward * 1 * Time.deltaTime);
// -45 degrees from the world x axis
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
// Initial speed
moveSpeed = walkSpeed;
}
void Update()
{
hvalue = Input.GetAxis("Horizontal");
vvalue = Input.GetAxis("Vertical");
ht.text = hvalue.ToString();
vt.text = vvalue.ToString();
if (Input.anyKey)
{
Move();
}
else
{
Idle();
}
}
void Move()
{
var h_axis = Input.GetAxis("Horizontal");
var v_axis = Input.GetAxis("Vertical");
Vector3 rightMovement = right * moveSpeed * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * moveSpeed * Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement + upMovement);
Vector3 newPosition = transform.position;
newPosition += rightMovement;
newPosition += upMovement;
transform.forward = heading;
transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime);
//Anim
if (h_axis != 0f)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
if (v_axis != 0f)
anim.SetBool("Walking", true);
else
anim.SetBool("Walking", false);
}
void Idle()
{
anim.SetBool("Walking", false);
}
}
O problema esta nas ultimas linhas, o h_axis fica diferente de 0, mas mesmo assim o bool não ativa.
- Código:
if (h_axis != 0f || v_axis != 0)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
Deste jeito, se pelo menos uma das variáveis retornar verdadeiro, a ação será realizada.
Daniel Pires da Silva- Avançado
- PONTOS : 2753
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
Valeu cara! Funcionou direitinho!Daniel Pires da Silva escreveu:Deve ser um problema de lógica. Olhando pela ordem : SE h_axis for diferente de 0 bool retorna verdadeiro, mas SE v_axis NÃO for diferente de 0, retorna falso. Aí está o problema, pois como os códigos são lidos de cima para baixo, eles acabam "obedecendo" mais os últimos IFs caso você modifique a mesma variável em várias sentenças. O mais correto seria assim :Ghosthy escreveu:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class INKController : MonoBehaviour
{
public float vvalue;
public float hvalue;
public Text vt;
public Text ht;
public float walkSpeed = 4f;
Vector3 forward, right;
private float moveSpeed;
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
forward = Camera.main.transform.forward;
forward.y = 0;
forward = Vector3.Normalize(forward * 1 * Time.deltaTime);
// -45 degrees from the world x axis
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
// Initial speed
moveSpeed = walkSpeed;
}
void Update()
{
hvalue = Input.GetAxis("Horizontal");
vvalue = Input.GetAxis("Vertical");
ht.text = hvalue.ToString();
vt.text = vvalue.ToString();
if (Input.anyKey)
{
Move();
}
else
{
Idle();
}
}
void Move()
{
var h_axis = Input.GetAxis("Horizontal");
var v_axis = Input.GetAxis("Vertical");
Vector3 rightMovement = right * moveSpeed * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * moveSpeed * Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement + upMovement);
Vector3 newPosition = transform.position;
newPosition += rightMovement;
newPosition += upMovement;
transform.forward = heading;
transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime);
//Anim
if (h_axis != 0f)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
if (v_axis != 0f)
anim.SetBool("Walking", true);
else
anim.SetBool("Walking", false);
}
void Idle()
{
anim.SetBool("Walking", false);
}
}
O problema esta nas ultimas linhas, o h_axis fica diferente de 0, mas mesmo assim o bool não ativa.
- Código:
if (h_axis != 0f || v_axis != 0)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
Deste jeito, se pelo menos uma das variáveis retornar verdadeiro, a ação será realizada.
Eu não sabia sobre essas ||, elas significam "ou"?
INKnight- Avançado
- PONTOS : 3599
REPUTAÇÃO : 18
Áreas de atuação : Iniciante em programação em C#;
Iniciante em design;
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
|| "Ou" && "e"
Fluttershy28- Avançado
- PONTOS : 2751
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: [RESOLVIDO] Script não ativa bool do animator
Ghosthy escreveu:Valeu cara! Funcionou direitinho!Daniel Pires da Silva escreveu:Deve ser um problema de lógica. Olhando pela ordem : SE h_axis for diferente de 0 bool retorna verdadeiro, mas SE v_axis NÃO for diferente de 0, retorna falso. Aí está o problema, pois como os códigos são lidos de cima para baixo, eles acabam "obedecendo" mais os últimos IFs caso você modifique a mesma variável em várias sentenças. O mais correto seria assim :Ghosthy escreveu:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class INKController : MonoBehaviour
{
public float vvalue;
public float hvalue;
public Text vt;
public Text ht;
public float walkSpeed = 4f;
Vector3 forward, right;
private float moveSpeed;
private Animator anim;
void Start()
{
anim = GetComponent<Animator>();
forward = Camera.main.transform.forward;
forward.y = 0;
forward = Vector3.Normalize(forward * 1 * Time.deltaTime);
// -45 degrees from the world x axis
right = Quaternion.Euler(new Vector3(0, 90, 0)) * forward;
// Initial speed
moveSpeed = walkSpeed;
}
void Update()
{
hvalue = Input.GetAxis("Horizontal");
vvalue = Input.GetAxis("Vertical");
ht.text = hvalue.ToString();
vt.text = vvalue.ToString();
if (Input.anyKey)
{
Move();
}
else
{
Idle();
}
}
void Move()
{
var h_axis = Input.GetAxis("Horizontal");
var v_axis = Input.GetAxis("Vertical");
Vector3 rightMovement = right * moveSpeed * Input.GetAxis("Horizontal");
Vector3 upMovement = forward * moveSpeed * Input.GetAxis("Vertical");
Vector3 heading = Vector3.Normalize(rightMovement + upMovement);
Vector3 newPosition = transform.position;
newPosition += rightMovement;
newPosition += upMovement;
transform.forward = heading;
transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime);
//Anim
if (h_axis != 0f)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
if (v_axis != 0f)
anim.SetBool("Walking", true);
else
anim.SetBool("Walking", false);
}
void Idle()
{
anim.SetBool("Walking", false);
}
}
O problema esta nas ultimas linhas, o h_axis fica diferente de 0, mas mesmo assim o bool não ativa.
- Código:
if (h_axis != 0f || v_axis != 0)
anim.SetBool("Walking", true);
else
{
anim.SetBool("Walking", false);
}
Deste jeito, se pelo menos uma das variáveis retornar verdadeiro, a ação será realizada.
Eu não sabia sobre essas ||, elas significam "ou"?
O "|" é um dos operadores lógicos. Os operadores lógicos são : "&", que significa "e", é usado quando todas as sentenças devem ser verdadeiras. "!" é o operador lógico usado quando alguma variável retorna falso, daí a sentença será realizada... Aprendi isso no meu curso básico de lógica de programação, toda linguagem usa os operadores lógicos.
Se você quiser usá-las nas suas sentenças IF, é só repetir elas duas vezes assim :
- Código:
if(minhaVar == true && outraVar == true)
{
}
\\outro exemplo
if(minhaVar == true || outraVar == true)
{
}
Obs.: o operador lógico "!" não é usado da mesma forma :
- Código:
if(!minhaVar) \\isso significa que : SE minhaVar retornar falso
{
}
\\ outro exemplo
if(variavelFloat != 10) \\sentença será realizada se a variavelFloat não for igual a 10
{
}
Daniel Pires da Silva- Avançado
- PONTOS : 2753
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO]como acesar uma void publica pelo script e ativa-la
» [RESOLVIDO] script senha para bool
» [RESOLVIDO] canvas ativa mas nao e possivel clicar nos botoes
» [RESOLVIDO] Como setar um valor de um animator no script.
» [RESOLVIDO] Alguém me explica isso? (Animator script)
» [RESOLVIDO] script senha para bool
» [RESOLVIDO] canvas ativa mas nao e possivel clicar nos botoes
» [RESOLVIDO] Como setar um valor de um animator no script.
» [RESOLVIDO] Alguém me explica isso? (Animator script)
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos