tengo un par de problemas con un script, ya que yo usaba solo JS se me dificulta un poco el hacer ciertas cosas en C#
El Objertivo esta en el Update, ya que se van a estar instanciando varios enemigos durante la escena, quiero que detecte a todos en cada momento, al guardarlos en una lista (Array [ ]), no me deja ponerlos como el objetivo, ya qu e sale un error de convercion a transform o position.
como puedo hacer que en la lista, ejemplo: 3 enemigos (Enemigo 0, Enemigo1, Enemigo 2) me detecte el que esta mas cerca y vaya tras el, y no que se vaya por el ultimo de la lista
te muestro este script:
//Estadisticas
public int Salud = 100;
public int Velociad = 2;
//Componentes
public UnityEngine.AI.NavMeshAgent Agente;
//Enemigos
public Transform Objetivo;
GameObject Obj;
//Funciones
void Update () {
Objetivo = GameObject.FindGameObjectWithTag("Humano").transform;
if (Obj == null) {
Debug.Log ("Ganaste");
}
Agente.destination = Objetivo.position;
}
void OnTriggerEnter (Collider otro) {
if (otro.tag == "Humano") {
Obj = otro.gameObject;
}
}
Asi como esta el Script busca al ultimo creado, pero esta hasta el fondo, pasa a travez de todos para atacar al que esta mas escondido, algo ilogico.
Espero me haya explicado y puedas entenderme y ayudarme, estoy estancado con eso desde hace mucho.....
Se puede hacer de muchas maneras. Por ejemplo:
Primero se saca con un bucle todos los GameObjects/Collisions que estén dentro del radio del Trigger/Raycast/SphereCast. Los metes dentro de un Array[..] o un List<>, tú decides.
Luego se filtran según si son "Humano", y recoge de todos ellos sus Transforms. Ahora deberías tener un Array o una List de Transforms.
Por último, ordena ese array por distancias relativas al Player, y el primero de la lista será el objetivo al que ir.
También se puede recoger el primer objeto que entre en tu trigger, ya que generalmente es el que está más cerca del Player.
O también se puede recoger de uno en uno, y compararlo en
Vector3.Distance con el actual candidato que tengas asignado en una variable...
Ok Pero traducido eso en código como seria?
He estado buscando durante toda la noche y no he logrado hacerlo...
y tengo otro problema que me acaba de surgir, al destruir un "enemigo" se eliminan todos los enemigos a la vez, como podria solucionar eso???
Cita de: MotoSierraProducciones date=1549642043y tengo otro problema que me acaba de surgir, al destruir un "enemigo" se eliminan todos los enemigos a la vez, como podria solucionar eso???
Asegurate que no sean hijos de un objeto enemigo y que su padre sea un objeto vacío.
Cita de: Soy C# date=1549644858Asegurate que no sean hijos de un objeto enemigo y que su padre sea un objeto vacío.
Estan por separado, cada uno con su script (El mismo script lo llevan todos), pero al hacer una acción 1 los demás lo hacen igual.
(//<fileStore.core_Attachment>/monthly_2019_02/Captura.PNG.ff61e3032cafbb9f5f8704c904e6b9d7.PNG)
Muestra el código a ver que está mal.
Cita de: Soy C# date=1549672591Muestra el código a ver que está mal.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Soldado2 : MonoBehaviour {
//Componentes
public UnityEngine.AI.NavMeshAgent Agente;
//Instancias
public GameObject Zombie;
//Objetos
static public Transform Zombie1;
//Variables
static public bool Escapar = false;
static public bool Calculo = false;
void Update () {
if (Escapar == true) {
Agente.destination = this.gameObject.transform.position - Zombie1.position;
}
if (Calculo == true) {
Calcular();
}
}
void Calcular () {
int Calculo = Random.Range (0,3);
if (Calculo == 0) {
Destroy (this.gameObject);
}
if (Calculo == 1) {
Instantiate (Zombie, transform.position, transform.rotation);
Destroy(this.gameObject);
}
if (Calculo == 2) {
Destroy (this