Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Licnus

#1
Offtopic / Ayuda con programación pls :)
Febrero 14, 2019, 07:10:17 PM
Hola, que tal a todos, soy nuevo en este foro, y la verdad también en el desarrollo de videojuegos.
 
Yo no soy programador, y en el desarrollo de mi juego me ha salido un problema que no tengo ni idea de como resolverlo. Quisiera ver si alguien aquí puede ayudarme porque ya le di muchas vueltas al asunto y no se que pasa.
 
Tengan un poco de paciencia porfa :)
 
Este es mi script:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class EnemigoSeguidor : MonoBehaviour
{
    public float visionRadius;
    public float Speed;
    public GameObject prefExp;
    GameObject player;
    Vector3 initialPosition;
    Vector3 target01;
    public static bool enRango = false;
    // Use this for initialization
    void Start()
    {
        StartCoroutine(autoDestroy());
        player = GameObject.FindGameObjectWithTag("Player");
        target01 = new Vector3(Random.Range(-988.4f, 988.6f), Random.Range(988.8f, -988.6f), 1f);
    }
    // Update is called once per frame
    void Update()
    {
        Vector3 target = target01;
        initialPosition = transform.position;
        float dist = Vector3.Distance(player.transform.position, transform.position);
        float rango = Vector3.Distance(initialPosition, target01);
        if (rango <= 0)
        {
            target01 = new Vector3(Random.Range(-988.4f, 988.6f), Random.Range(988.8f, -988.6f), 1f);
        }
        if (dist < visionRadius)
        {
            enRango = true;
            target = player.transform.position;
        }
        if (dist > visionRadius)
        {
            enRango = false;
        }
         
        float fixedSpeed = Speed * Time.deltaTime;
        transform.position = Vector3.MoveTowards(transform.position, target, fixedSpeed);
        Debug.DrawLine(transform.position, target, Color.green);
    }
    void OnDrawGizmos()
    {
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, visionRadius);
    }
    void OnTriggerEnter2D(Collider2D collider)
    {
        if (collider.tag == "Destructor" && enRango)
        {
            Destroy(gameObject);
            Instantiate(prefExp, transform.position, Quaternion.identity);
        }
        if (collider.tag == "MeteorG" && enRango)
        {
           
            Destroy(gameObject);
            Instantiate(prefExp, transform.position, Quaternion.identity);
        }
        if (collider.tag == "MeteorM" && enRango)
        {
            Destroy(gameObject);
            Instantiate(prefExp, transform.position, Quaternion.identity);
        }
    }
    IEnumerator autoDestroy()
    {
        yield return new WaitForSecondsRealtime(120);
        Destroy(gameObject);
        Instantiate(prefExp, transform.position, Quaternion.identity);
    }
 }

 
Aqui lo que sucede es que el "enemigo" persigue al "player" en tanto entre en el rango de vision. Y cuando este sale de rango, el "enemigo" sigue su curso. El problema es que cuando hay varios enemigos parece haber un bug. Ya que para poder hacer colision con ciertos objetos, como se ve en el script, necesito estar "enRango = true", pero al haber varios "enemigos" siguiendo al player y  si uno se destruye, parece que "enRango" cambia a false, y los demas objetos ya no pueden hacer colisión a pesar de que aun siguen al "player".Quisiera ver si alguno de ustedes sabe cual es la razón y como puedo resolverlo.
 
Muchas gracias de antemano desde ya!.