Jump to content
UnitySpain

ramunda

Registrados
  • Content Count

    355
  • Joined

  • Last visited

  • Days Won

    1

ramunda last won the day on July 22 2015

ramunda had the most liked content!

Community Reputation

22 Excellent

About ramunda

  • Rank
    Avanzado

Profile Information

  • Especialidad
    Otros

Recent Profile Visitors

594 profile views
  1. Muchas gracias por la explicación /respuesta #lightbug, desgracidamanete no me ha funcionado o no he sabido aplicar el ejemplo que me has propuesto. Y si, la idea era que detectara el enemigo mas cercano habiendo varios pululando cerca. De todas maneras mil gracias , ya vere como lo apaño... Feliz Navidad amigo.
  2. Buenas tardes a todos/todas, es una tonteria pero me he liado. estoy haciendo que dos pequeños ejercitos se peguen de leches unos con otros y para eso he creado (creo) la manera que detecte al enemigo mas cercano. Hasta aqui va ok, me dice la distancia y detecta al tag requerido, pero me he atascado a la hora de decirle que si la distancia es +o- la estipulada el agresor vaya hacia ese objetivo. Moverse se mueve pero no se para al llegar al ojectivo! el sigue palante . public class Enemy : MonoBehaviour { public float curDist = 20; GameObject[] enemigos; GameObject enemigo; public GameObject player; public float MoveSpeed = 3f; void Update() { enemigos = GameObject.FindGameObjectsWithTag("enemy1"); curDist = 1; foreach (GameObject item in enemigos) { float dist = Vector3.Distance(player.transform.position, item.transform.position); if (dist >= curDist) ; { curDist = dist; enemigo = item; print(dist); player.transform.position += transform.forward * MoveSpeed * Time.deltaTime; } } } } seguro que es un tonteria pero me he bloqueado!, agradezco una mano , gracias de antemano y Feliz Navidad!
  3. @juanma_teso@lightbug @debug mil gracias a los 3 , ya salio algo entre todas las posibles opciones!!! soys geniales! mil gracias por la ayuda y por el tiempo prestado!!! Un abrazo!!
  4. Gracias @juanma_teso y gracias @lightbug Desgraciadamente sigue sin funcionar, pero despues de vuestra ayuda intentare enfocarlo de otra manera. Muchas gracias
  5. Gracias juanmma_teso, lo que me dices tiene mucho sentido, pero el problema es que en la coorutina no puedo saber cuento tiempo el enemigo estara en la distancia de <3 en frente de el player, se puede tirar un mimuto como 3 segundos, si estipulo en tiempo se parara. igualmente lo he provado...y algo he echo mal porque no funciona , se activa la sangre al empezar el juego luego se va y el enemigo al pegarme no se activa :( :( la parte de el enemigo simplemente la he dejado asi: if (distance <= 3) { GetComponent<Animation>().CrossFade("2H_skeleton_specal_attack_A"); ManagerScript.manager.Vida -= 5f * Time.deltaTime; ManagerScript.manager.activasangre = true; pega.enabled = true; espadahit.enabled = true; } y el manager asi con la coorutina que me sijeristes: using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using UnityEngine.UI; public class ManagerScript : MonoBehaviour { public static ManagerScript manager; public float Vida; public float Mana; public float Manamaximo = 100f; public float manaReg; public GameObject player; public GameObject sangre; public bool activasangre; private float tiempoDeEspera = 5f; public float experiencia = 0f; public Text exptext; //public bool activamusicabatalla; //public AudioSource batalla; public GameObject playermuerto; void Awake() { if (manager == null) { DontDestroyOnLoad(gameObject); manager = this; } else if (manager != this) { Destroy(gameObject); } } void Start() { activasangre =false; } void Update() { exptext.text = "Experiencia: " + experiencia.ToString(); if (activasangre = true) { StartCoroutine("CorrutinaSangre"); } else if (activasangre = false) { sangre.SetActive(false); } if (Mana <= Manamaximo) { StartCoroutine(RegainHealthOverTime()); } if (Vida <= 0) { player.SetActive(false); playermuerto.SetActive(true); } } IEnumerator RegainHealthOverTime() { while (Mana < Manamaximo) { manaregen(); yield return new WaitForSeconds(5); } } public void manaregen() { Mana += manaReg*Time.deltaTime; } private IEnumerator CorrutinaSangre() { sangre.SetActive(true); yield return new WaitForSeconds(tiempoDeEspera); sangre.SetActive(false); } } pero la he liado y nada va a cordes.
  6. Buenas tardes, llevo dos dias rompiendome la cabeza de este problema, veran; Tengo un enemigo que me persigue a distgancia x me ataca a distancia x...eso va perfecto, a la hora de activar un simple canvas que es una imagen de sangre en la pantalla solo lo activa el primer enemigo los demas pasan de activar nada. Creo que el problema puede ser en el transform(ahora lo vereis en el script), lo mismo me pasa al activar audios etc solo uno lo hace los demas aunque aga prefab no funciona. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class enemigoataca2 : MonoBehaviour { public Transform player; public float velocidadenemigo; public float distance; public AudioSource pega; public AudioSource camina; public AudioSource espadahit; void Start() { player = GameObject.FindGameObjectWithTag("player").transform; pega.enabled = false; camina.enabled = false; espadahit.enabled = false; } void Update() { distance = Vector3.Distance(transform.position, player.position); if (distance <= 30) { camina.enabled = true; pega.enabled = false; GetComponent<Animation>().CrossFade("Walk"); GetComponent<walkmesh2>().enabled = false; GetComponent<UnityEngine.AI.NavMeshAgent>().SetDestination(player.transform.position); } if (distance <= 3)///AQUI DEBERIA ACTIVAR EL CANVAS SANGRE/AUDIO LO QUE SEA { GetComponent<Animation>().CrossFade("2H_skeleton_specal_attack_A"); ManagerScript.manager.Vida -= 5f * Time.deltaTime; ManagerScript.manager.activasangre = true; pega.enabled = true; // player.GetComponent<Animation>().Play("Cover_sword_hit"); espadahit.enabled = true; } else { espadahit.enabled = false; // player.GetComponent<Animation>().CrossFade("Run"); ManagerScript.manager.activasangre = false; } if (distance >= 25) { camina.enabled = false; GetComponent<walkmesh2>().enabled = true; } } } Donde le digo que si la distancia es-= 3 es donde deberia activarlo. y creo que el problema viene de : player = GameObject.FindGameObjectWithTag("player").transform; que solo calcula la distancia de el player en un solo enemigo. Agradeceria una idea gracias!!!
  7. Gracias de nuevo lightbug , hora lo veo de otro enfoque y partire desde este punto de vista. Muchas gracias por la ayuda y el tiempo. Saludos cordiales!!
  8. gracias lighbug , creo que entiendo lo que me quieres decir , y si por ejemplo tengo un libro en la pantalla que al colisionar me añade la función y el icono de lightbolt por ejemplo. ese icono se queda en la pantalla y se activa un script el cuel me permite tirar ese lightball. pero , si salgo de la partida ese icono y ese lighbolt no esta , solo queda guardado el mana y la vida, a eso me refiero. Para guardar la partida como aun no he conseguido hacerlo con serialización lo ago asi: using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class Player : MonoBehaviour { public float pX; public float pY; public float pZ; void Start() { // Check if the values have been saved if (PlayerPrefs.GetInt("Saved") == 1) { pX = PlayerPrefs.GetFloat("p_x"); pY = PlayerPrefs.GetFloat("p_y"); pZ = PlayerPrefs.GetFloat("p_z"); transform.position = new Vector3(pX, pY, pZ); // Reset, so that the save will be used only once PlayerPrefs.SetInt("Saved", 0); PlayerPrefs.Save(); } } void Update() { if (Input.GetKeyDown(KeyCode.S)) { position_save(); Debug.Log("Save"); } if (Input.GetKeyDown(KeyCode.L)) { position_load(); Debug.Log("Load"); } } void position_save() { PlayerPrefs.SetFloat("p_x", transform.position.x); PlayerPrefs.SetFloat("p_y", transform.position.y); PlayerPrefs.SetFloat("p_z", transform.position.z); PlayerPrefs.SetInt("Saved", 1); // You need to actually save the values! PlayerPrefs.Save(); } void position_load() { SceneManager.LoadScene("cofres"); } } que evidentememte esto es pasajero porque no lo guarda en disco pero ese es otro tema. he intentado agregar el objetoque hace esas cosas(lo del lightbol etc) el la serializacion: public GameObject player; public GameObject librofirebolt; etc etc y despues agegarlos al script existente: public void Save() { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat"); PlayerData data = new PlayerData(); data.player = player; data.librofirebolt= librofirebolt; bf.Serialize(file, data); file.Close(); } etc pero nada , sigue sin guardarlos :(
  9. Buenas a todos, sere lo mas claro posible, empece un proyecto al estilo witcher3 , un mago con echizos etc. Consegui que se guardara la posición de el personaje y los valores de vida y mana, pero ahora me encuentro que ese echizo que aprendio el personaje ayer hoy no esta aprendido porque no se guarda(canvas imagenes etc). La pregunta es, alguien me da una idea de como implementar estos objetos y que se guarden como lo del mana y la vida?, mire tutos y cofeccione esto por mi cuenta satisfactoriamente. using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class GameControl : MonoBehaviour { public static GameControl control; public float vida; public float mana; //public GameObject ballfire; void Awake() { if (control == null) { DontDestroyOnLoad(gameObject); control = this; } else if (control != this) { Destroy(gameObject); } } public void Save() { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat"); PlayerData data = new PlayerData(); data.vida = vida; data.mana = mana; bf.Serialize(file, data); file.Close(); } public void Load() { if (File.Exists(Application.persistentDataPath + "/playerInfo.dat")) { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open); PlayerData data = (PlayerData)bf.Deserialize(file); file.Close(); vida = data.vida; mana = data.mana; } } } [System.Serializable] public class PlayerData { public float vida; public float mana; //public GameObject ballfire; } con esto lo llamo desde cualquier parte y me guarda los valores vida y mana, pero como meto aqui los objetos, por ejemplo el mago encuentra un libro el cual le otorga un nuevo echizo que aparece en su barra de echizos(imagenes canvas que se ativan etc)?? O debo de meter el script aqui dentro? usando updates y voids starts? gracias de antemano
  10. Antes de nada gracias #FrancoSP y juanma_teso. He probado la propuesta de Franco, sigue dando el mismo error, lo que dice juanma tambien tiene sentido pero he probado con un solo enemigo con ese nombre exacto y tampoco funciona...yo tambien estoy aprendiendo pero creia que esto ya lo dominaba ..pues no. Lo e puesto tal cual me comentais y nada: public Health Enemigo; void Start() { anim=GetComponent<Animation>(); particulascamina.SetActive(false); GetComponent<AudioSource>().enabled = false; audiopega.enabled = false; Enemigo = GameObject.Find("enemigo").GetComponent<Health>(); y en el parrafo de ataque else if (ataca) { GetComponent<Animation>().CrossFade("vc_uppercut_jab"); audiopega.enabled = true; if (attackDist <=2f) { Enemigo.vida -= 80f * Time.deltaTime; } pero el mismo error que no encuentra el objeto :( Claro porque soy tonto.....como me va a encontrarlo...el fallo es mio, y vosotros me lo habeis echo ver XDD el script enemigo no se llama Health...ese es el de mi personage principal XDD se llama Healthenemiga....el otro problema que tengo es lo de la distancia pero eso es otro tema aqui la resolución para posibles visitas: public Healthenemiga Enemigo;/////////////asi se llama el script que quiero acceder. void Start() { anim=GetComponent<Animation>(); particulascamina.SetActive(false); GetComponent<AudioSource>().enabled = false; audiopega.enabled = false; Enemigo = GameObject.Find("enemigo").GetComponent<Healthenemiga>();////////////// start correcto!!! else if (ataca) { GetComponent<Animation>().CrossFade("vc_uppercut_jab"); audiopega.enabled = true; if (attackDist <=2f) { Enemigo.vida -= 80f * Time.deltaTime;//////////quito vida correcto!!! } no se si de haberlo puesto al principio funcionase....pero asi funciona almenos con un enemigo :P Mil gracias!!
  11. Buenas tardes a todos/todas, cada vez que unity cambia de versión algo cambia en el codigo.... Aver estoy haciendo algo sencillo,tengo unos monigotes enemigos llamados "enemigo", los cuales tienes un script llamado Health. Bien , la idea es que quiero quitarles vida, para ello los busco en este afragmento de codigo: else if (ataca) { GetComponent<Animation>().CrossFade("vc_uppercut_jab"); audiopega.enabled = true; if (attackDist <=2f) { GameObject.Find("enemigo").GetComponent<Health>().vida -= 80f * Time.deltaTime; } busco el objeto, (enemigo). le cojo el script(health). y realizo lo que hace en este caso le quita vida cada segundo. Pero nada...no me encuentra el enemigo.....me tira este error en la linea donde esta el find... NullReferenceException: Object reference not set to an instance of an object alguna idea por favor? Gracias de antemano
  12. Amigos muchísimas gracias, que ciego estoy, lo comprendo perfectamente. #Leocub58 #juanma_teso Las dos respuestas son geniales, gracias por la rapidez y la ayuda. La cosa ha quedado asi y parece que funciona: using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; public class Loguin : MonoBehaviour { public InputField insertarcodigo; public string codigo; void Start() { // codigo = insertarcodigo.text; // PlayerPrefs.SetString("Codigo",codigo); // PlayerPrefs.Save(); } void Update() { codigo = insertarcodigo.text; PlayerPrefs.SetString("Codigo",codigo); PlayerPrefs.Save(); if (Input.GetKeyDown ("space")) { PlayerPrefs.GetString ("Codigo"); Debug.Log ("El codigo es:" + PlayerPrefs.GetString ("Codigo")); } } } Si voy bien os agradecería que me lo indicaseis . Gracias!!
  13. Buenas tardes, agradecería por favor una mano en un pequeño problema que tengo. Estoy terminando un proyecto y ahora me encuentro con esto... La cosa es sencilla , tengo un simple inputfield el cual me deja insertar lo que quiera.. Lo que intento es capturar esa String en un playerpreff para luego usar ese texto en otra pantalla. Prove esto; using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; public class Loguin : MonoBehaviour { public InputField insertarcodigo; string codigo; void Start() { PlayerPrefs.SetString("Codigo",codigo); PlayerPrefs.Save(); } void Update() { if (Input.GetKeyDown ("space")) { codigo = insertarcodigo.text; PlayerPrefs.GetString ("Codigo"); //Debug.Log ("El codigo es:" + codigo); Debug.Log ("El codigo es:" + PlayerPrefs.GetString ("Codigo")); } } } pero nada, cuando llamo al pref GetString pensaba que me cojeria la string de codigo pero no. si le llamo al debug directamente a la string(codigo), si me lo da pero lo que quiero es que me la guarde y no lo hace. Agradecería una ayuda por favor, asi puedo terminar este proyecto. muchas gracias de antemano.
  14. Brutal!, muchisimas gracias de nuevo esto le da un nuevo enfoque a la cosa. Gracias
  15. Llightbug has dado en el clavo e lleno!!!, el problama era cuando moria, no se reseteabaj la velocidad!!, se la llevaba con ella, era justamente eso ponerle el vector 2 a 0, eres um genio!, y si por supuesto le tengo un physisc material a la bola que es bounce friction0 bounce 0 y rebota bien :), lo del vector2 up, lo probe pero el problema es que se va recta hacia arriba y eso impide que coja angulos de rebote osea que sube i baja como un ascensor. Al ponerle esto: ballInitialForce = new Vector2 (50.0f,300.0f); me coje 50 de la x / 300 de la y y sale un pelin torcida asi rebota bien de echo con un 100 basta. Muchisimas gracias!!!!!! Un abrazo.
×
×
  • Create New...