Calcular a distância apenas do eixo X
3 participantes
Página 1 de 1
Calcular a distância apenas do eixo X
Eu estava tentando programar um inimigo para me atacar só quando eu chegar perto dele(usando Vector2.Distance), mas quando eu fico em cima dele(em uma plataforma) ele começa a atacar o ar.Como eu poderia programar o inimigo de uma forma q ele só me atacaria quando eu estivesse na frente dele?
Hamassfall- Avançado
- PONTOS : 2067
REPUTAÇÃO : 7
Respeito as regras :
Re: Calcular a distância apenas do eixo X
Acho que o que você diz no título não seria a solução, afinal em cima da plataforma o valor do eixo X ainda permitiria que ele atacasse mesmo estando fora de alcance.
O que você precisa são duas checagens, a altura e a distancia horizontal.
digamos que distancia recebe seu Vector2.Distance
Se( distancia < 1 && Mathf.Abs(transform.position.y - player.position.y) < 1){ //checando também a distância vertical entre o inimigo e o player.
Atacar();
}
O que você precisa são duas checagens, a altura e a distancia horizontal.
digamos que distancia recebe seu Vector2.Distance
Se( distancia < 1 && Mathf.Abs(transform.position.y - player.position.y) < 1){ //checando também a distância vertical entre o inimigo e o player.
Atacar();
}
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Calcular a distância apenas do eixo X
No meu caso o player é um GameObject e ele diz que um GameObject não contém uma definição para position. Como eu posso arrumar isso?SteveRogers escreveu:Acho que o que você diz no título não seria a solução, afinal em cima da plataforma o valor do eixo X ainda permitiria que ele atacasse mesmo estando fora de alcance.
O que você precisa são duas checagens, a altura e a distancia horizontal.
digamos que distancia recebe seu Vector2.Distance
Se( distancia < 1 && Mathf.Abs(transform.position.y - player.position.y) < 1){ //checando também a distância vertical entre o inimigo e o player.
Atacar();
}
Hamassfall- Avançado
- PONTOS : 2067
REPUTAÇÃO : 7
Respeito as regras :
Re: Calcular a distância apenas do eixo X
player.transform.position.y
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Calcular a distância apenas do eixo X
Agora ele fala q o operador && não pode ser aplicado a operandos dos tipos bool ou floatSteveRogers escreveu:player.transform.position.y
Hamassfall- Avançado
- PONTOS : 2067
REPUTAÇÃO : 7
Respeito as regras :
Re: Calcular a distância apenas do eixo X
Última edição por SteveRogers em Dom Ago 25, 2019 4:51 pm, editado 1 vez(es)
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Calcular a distância apenas do eixo X
Esse é o código:Hamassfall escreveu:Agora ele fala q o operador && não pode ser aplicado a operandos dos tipos bool ou floatSteveRogers escreveu:player.transform.position.y
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public GameObject enemyBullet;
public GameObject player;
public float minimunDistance = 4;
public int enemyHealth = 100;
public GameObject firePoint2;
public float move = -2;
Rigidbody2D rb;
private bool collide;
private float waitingTime = 0.5f;
public bool canShoot;
void Start()
{
canShoot = true;
rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(move, rb.velocity.y);
}
void Update()
{
float playerDistance = Vector2.Distance(transform.position.x, player.transform.position);
if (playerDistance < minimunDistance && Mathf.Abs(transform.position.x - player.transform.position.x) <1 && canShoot)
{
Shoot();
canShoot = false;
StartCoroutine("WaitToShoot");
}
if (collide)
{
Flip();
}
}
IEnumerator WaitToShoot()
{
yield return new WaitForSeconds(waitingTime);
canShoot = true;
}
public void TakeDamage(int Damage)
{
enemyHealth -= Damage;
if (enemyHealth <= 0)
{
Destroy(gameObject);
}
}
void Shoot()
{
Instantiate(enemyBullet, firePoint2.transform.position, transform.rotation);
}
void OnCollisionEnter2D(Collision2D other)
{
if(other.gameObject.tag == "Wall")
{
Flip();
}
}
void Flip()
{
SpriteRenderer spr = GetComponent<SpriteRenderer>();
move *= -1;
spr.flipX = spr.flipX;
collide = false;
}
}
Hamassfall- Avançado
- PONTOS : 2067
REPUTAÇÃO : 7
Respeito as regras :
Re: Calcular a distância apenas do eixo X
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour {
public GameObject enemyBullet;
public GameObject player;
public float minimunDistance = 4;
public int enemyHealth = 100;
public GameObject firePoint2;
public float move = -2;
Rigidbody2D rb;
private bool collide;
private float waitingTime = 0.5f;
public bool canShoot;
void Start() {
canShoot = true;
rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(move, rb.velocity.y);
}
void Update() {
float playerDistance = Vector2.Distance(transform.position, player.transform.position);
if (playerDistance < minimunDistance && Mathf.Abs(transform.position.y - player.transform.position.y) < 1 && canShoot) {
Shoot();
canShoot = false;
StartCoroutine("WaitToShoot");
}
if (collide) {
Flip();
}
}
IEnumerator WaitToShoot() {
yield return new WaitForSeconds(waitingTime);
canShoot = true;
}
public void TakeDamage(int Damage) {
enemyHealth -= Damage;
if (enemyHealth <= 0) {
Destroy(gameObject);
}
}
void Shoot() {
Instantiate(enemyBullet, firePoint2.transform.position, transform.rotation);
}
void OnCollisionEnter2D(Collision2D other) {
if (other.gameObject.tag == "Wall") {
Flip();
}
}
void Flip() {
SpriteRenderer spr = GetComponent<SpriteRenderer>();
move *= -1;
spr.flipX = spr.flipX;
collide = false;
}
}
Tópicos semelhantes
» Rotacionar objeto em apenas um eixo
» Copiar a Rotação do objeto em apenas um eixo.
» Objeto ter a mesma rotação que outro em apenas um eixo
» Calcular ponto da Timeline
» Pegar objeto com OnTriggerStay, mas move-lo apenas no eixo X.
» Copiar a Rotação do objeto em apenas um eixo.
» Objeto ter a mesma rotação que outro em apenas um eixo
» Calcular ponto da Timeline
» Pegar objeto com OnTriggerStay, mas move-lo apenas no eixo X.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos