[RESOLVIDO] Ativação de objetos de acordo com a direção do inimigo
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Ativação de objetos de acordo com a direção do inimigo
Bem já faz um tempo que eu tinha feito este Script.
A função dele é Ativar e Desativar os Objetos de acordo com a direção que o Inimigo andava mas ele nuca funcionou.
Então se alguém puder me dizer oque eu fiz de errado nele seria de grande ajuda.
A função dele é Ativar e Desativar os Objetos de acordo com a direção que o Inimigo andava mas ele nuca funcionou.
Então se alguém puder me dizer oque eu fiz de errado nele seria de grande ajuda.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovementEnemy : MonoBehaviour {
[SerializeField]
GameObject Up;
[SerializeField]
GameObject Down;
[SerializeField]
GameObject Right;
[SerializeField]
GameObject Left;
[SerializeField]
Transform Target;
[SerializeField]
float speed = 15;
Rigidbody2D rb;
float axisX;
float axisY;
void Start () {
rb = GetComponent<Rigidbody2D> ();
}
void Update () {
float distansia = Vector3.Distance (transform.position, Target.transform.position);
transform.position = Vector2.MoveTowards(transform.position, Target.position, speed * Time.deltaTime);
if (axisX > 0 && Mathf.Abs (axisX) > Mathf.Abs (axisY)) {
Right.SetActive (true);
Left.SetActive (false);
Up.SetActive (false);
Down.SetActive (false);
}
if (axisX < 0 && Mathf.Abs (axisX) > Mathf.Abs (axisY)) {
Right.SetActive (false);
Left.SetActive (true);
Up.SetActive (false);
Down.SetActive (false);
}
if (axisY > 0 && Mathf.Abs (axisY) > Mathf.Abs (axisX)) {
Right.SetActive (false);
Left.SetActive (false);
Up.SetActive (true);
Down.SetActive (false);
}
if (axisY < 0 && Mathf.Abs (axisY) > Mathf.Abs (axisX)) {
Right.SetActive (false);
Left.SetActive (false);
Up.SetActive (false);
Down.SetActive (true);
}
}
}
Re: [RESOLVIDO] Ativação de objetos de acordo com a direção do inimigo
Então, não está funcionando porque você não está setando valores para as variáveis axisY e axisX, hehehe...
Mudei um pouco a lógica de movimento e também os if's... Isso aqui funciona bem:
Mudei um pouco a lógica de movimento e também os if's... Isso aqui funciona bem:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class MovementEnemy : MonoBehaviour {
public GameObject Up;
public GameObject Down;
public GameObject Right;
public GameObject Left;
public Transform Target;
public float speed = 2;
Rigidbody2D rb;
float axisX;
float axisY;
void Start() {
rb = GetComponent<Rigidbody2D>();
}
void Update() {
Vector2 direcao = Target.position - transform.position;
direcao.Normalize();
float distancia = Vector2.Distance(transform.position, Target.position);
rb.velocity = (direcao * speed * distancia);
axisX = rb.velocity.x;
axisY = rb.velocity.y;
//X
Right.SetActive (axisX > 0 && Mathf.Abs(axisX) > Mathf.Abs(axisY));
Left.SetActive (axisX < 0 && Mathf.Abs(axisX) > Mathf.Abs(axisY));
//Y
Up.SetActive (axisY > 0 && Mathf.Abs(axisY) > Mathf.Abs(axisX));
Down.SetActive (axisY < 0 && Mathf.Abs(axisY) > Mathf.Abs(axisX));
}
}
Re: [RESOLVIDO] Ativação de objetos de acordo com a direção do inimigo
Obrigado.MarcosSchultz escreveu:Então, não está funcionando porque você não está setando valores para as variáveis axisY e axisX, hehehe...
Mudei um pouco a lógica de movimento e também os if's... Isso aqui funciona bem:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class MovementEnemy : MonoBehaviour {
public GameObject Up;
public GameObject Down;
public GameObject Right;
public GameObject Left;
public Transform Target;
public float speed = 2;
Rigidbody2D rb;
float axisX;
float axisY;
void Start() {
rb = GetComponent<Rigidbody2D>();
}
void Update() {
Vector2 direcao = Target.position - transform.position;
direcao.Normalize();
float distancia = Vector2.Distance(transform.position, Target.position);
rb.velocity = (direcao * speed * distancia);
axisX = rb.velocity.x;
axisY = rb.velocity.y;
//X
Right.SetActive (axisX > 0 && Mathf.Abs(axisX) > Mathf.Abs(axisY));
Left.SetActive (axisX < 0 && Mathf.Abs(axisX) > Mathf.Abs(axisY));
//Y
Up.SetActive (axisY > 0 && Mathf.Abs(axisY) > Mathf.Abs(axisX));
Down.SetActive (axisY < 0 && Mathf.Abs(axisY) > Mathf.Abs(axisX));
}
}
Tópicos semelhantes
» [RESOLVIDO] Rotacionar Personagem De Acordo Com a Direção Do Analógico
» [RESOLVIDO] Instanciar objetos na direção do mouse
» [RESOLVIDO] Como faço uma seta na direção do inimigo?
» [RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
» [RESOLVIDO] O parâmetro de direção do raycast limita a distância máxima?
» [RESOLVIDO] Instanciar objetos na direção do mouse
» [RESOLVIDO] Como faço uma seta na direção do inimigo?
» [RESOLVIDO] Inverter o sprite para a direçao que o personagem anda.
» [RESOLVIDO] O parâmetro de direção do raycast limita a distância máxima?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos